@fest-lib/uniform 0.1.23 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/uniform.js +220 -213
  2. package/package.json +3 -2
package/dist/uniform.js CHANGED
@@ -1,7 +1,7 @@
1
- import { Promised as rn, UUIDv4 as h, deepOperateAndClone as he, isCanJustReturn as Me, isCanTransfer as Ie, isNotComplexArray as ot, isPrimitive as Ae } from "@fest-lib/core";
2
- var Gs = /* @__PURE__ */ (function(e) {
1
+ import { MOUNTED_FS_EVENT as Gs, MOUNTED_FS_HTTP_PATH as Qs, MOUNTED_FS_WS_PATH as Vs, Promised as rn, UUIDv4 as h, createMountedFsId as Ks, deepOperateAndClone as he, isCanJustReturn as Me, isCanTransfer as Ie, isMountedFsRequest as Ys, isMountedFsResponse as Js, isNotComplexArray as ot, isPrimitive as Ae, parseMountedFsMessage as Xs } from "@fest-lib/core";
2
+ var Zs = /* @__PURE__ */ (function(e) {
3
3
  return e.SUCCESS = "success", e.ERROR = "error", e;
4
- })({}), Qs = /* @__PURE__ */ (function(e) {
4
+ })({}), er = /* @__PURE__ */ (function(e) {
5
5
  return e.PRIMITIVE = "primitive", e.NUMBER = "number", e.STRING = "string", e.BOOLEAN = "boolean", e.BIGINT = "bigint", e.UNDEFINED = "undefined", e.NULL = "null", e.OBJECT = "object", e.FUNCTION = "function", e.ARRAY = "array", e.MAP = "map", e.SET = "set", e.SYMBOL = "symbol", e.WEAK_REF = "weakRef", e.PROMISE = "promise", e.UNKNOWN = "unknown", e;
6
6
  })({}), d = /* @__PURE__ */ (function(e) {
7
7
  return e.GET = "get", e.SET = "set", e.CALL = "call", e.APPLY = "apply", e.CONSTRUCT = "construct", e.DELETE = "delete", e.DELETE_PROPERTY = "deleteProperty", e.HAS = "has", e.OWN_KEYS = "ownKeys", e.GET_OWN_PROPERTY_DESCRIPTOR = "getOwnPropertyDescriptor", e.GET_PROPERTY_DESCRIPTOR = "getPropertyDescriptor", e.GET_PROTOTYPE_OF = "getPrototypeOf", e.SET_PROTOTYPE_OF = "setPrototypeOf", e.IS_EXTENSIBLE = "isExtensible", e.PREVENT_EXTENSIONS = "preventExtensions", e.TRANSFER = "transfer", e.IMPORT = "import", e.DISPOSE = "dispose", e;
@@ -330,7 +330,7 @@ function ht(e) {
330
330
  close: () => t.close()
331
331
  };
332
332
  }
333
- var Vs = {
333
+ var tr = {
334
334
  createSender: g,
335
335
  createListener: m,
336
336
  detectType: Z,
@@ -430,7 +430,7 @@ var Vs = {
430
430
  get subscriberCount() {
431
431
  return this._subs.size;
432
432
  }
433
- }, Ks = class extends _ {
433
+ }, nr = class extends _ {
434
434
  constructor(e = 1) {
435
435
  super({
436
436
  bufferSize: e,
@@ -522,7 +522,7 @@ function hn(e) {
522
522
  r && n(r.response, r.transfer), s.next(t);
523
523
  };
524
524
  }
525
- var Ys = class extends _ {
525
+ var sr = class extends _ {
526
526
  constructor(e, t) {
527
527
  super(), e.subscribe({
528
528
  next: (n) => {
@@ -539,14 +539,14 @@ var Ys = class extends _ {
539
539
  complete: () => n.complete()
540
540
  });
541
541
  return () => s.unsubscribe();
542
- }), Js = (e) => (t) => new v((n) => {
542
+ }), rr = (e) => (t) => new v((n) => {
543
543
  const s = t.subscribe({
544
544
  next: (r) => n.next(e(r)),
545
545
  error: (r) => n.error(r),
546
546
  complete: () => n.complete()
547
547
  });
548
548
  return () => s.unsubscribe();
549
- }), Xs = (e) => (t) => new v((n) => {
549
+ }), ir = (e) => (t) => new v((n) => {
550
550
  let s = 0;
551
551
  const r = t.subscribe({
552
552
  next: (i) => {
@@ -556,7 +556,7 @@ var Ys = class extends _ {
556
556
  complete: () => n.complete()
557
557
  });
558
558
  return () => r.unsubscribe();
559
- }), Zs = (e) => (t) => new v((n) => {
559
+ }), or = (e) => (t) => new v((n) => {
560
560
  const s = t.subscribe({
561
561
  next: (i) => n.next(i),
562
562
  error: (i) => n.error(i),
@@ -565,7 +565,7 @@ var Ys = class extends _ {
565
565
  return () => {
566
566
  s.unsubscribe(), r.unsubscribe();
567
567
  };
568
- }), er = (e) => (t) => new v((n) => {
568
+ }), ar = (e) => (t) => new v((n) => {
569
569
  let s;
570
570
  const r = t.subscribe({
571
571
  next: (i) => {
@@ -577,7 +577,7 @@ var Ys = class extends _ {
577
577
  return () => {
578
578
  clearTimeout(s), r.unsubscribe();
579
579
  };
580
- }), tr = (e) => (t) => new v((n) => {
580
+ }), cr = (e) => (t) => new v((n) => {
581
581
  let s = 0;
582
582
  const r = t.subscribe({
583
583
  next: (i) => {
@@ -610,12 +610,12 @@ var Ys = class extends _ {
610
610
  error: (r) => t.error(r)
611
611
  }));
612
612
  return () => n.forEach((s) => s.unsubscribe());
613
- }), nr = () => h(), M = (e, t) => (n) => {
613
+ }), lr = () => h(), M = (e, t) => (n) => {
614
614
  const s = g(e), r = (i, o) => s(i, o);
615
615
  return m(e, (i) => {
616
616
  n.active && (t ? t(i, r, n) : n.next(i));
617
617
  }, (i) => n.error(i), () => n.complete());
618
- }, sr = (e, t) => M(e, t), rr = (e, t) => M(e, t), ir = (e, t) => M(new BroadcastChannel(e), t), or = (e, t, n) => M(new WebSocket(typeof e == "string" ? e : e.href, t), n), ar = (e) => M("chrome-runtime", e), cr = (e) => M("service-worker-client", e), lr = (e) => M("service-worker-host", e), hr = (e) => M("self", e);
618
+ }, hr = (e, t) => M(e, t), ur = (e, t) => M(e, t), dr = (e, t) => M(new BroadcastChannel(e), t), fr = (e, t, n) => M(new WebSocket(typeof e == "string" ? e : e.href, t), n), pr = (e) => M("chrome-runtime", e), _r = (e) => M("service-worker-client", e), mr = (e) => M("service-worker-host", e), gr = (e) => M("self", e);
619
619
  function mn(e, t, n) {
620
620
  const s = g(e), r = new v((i) => M(e, n)(i));
621
621
  return {
@@ -631,7 +631,7 @@ function gn(e, t) {
631
631
  return e.addEventListener(t, s), () => e.removeEventListener(t, s);
632
632
  });
633
633
  }
634
- var ur = {
634
+ var br = {
635
635
  channel: (e, t) => new ln(e, t),
636
636
  invoker: (e, t, n) => Ve(e, t, n),
637
637
  handler: (e, t) => Ve(e, t, hn(t)),
@@ -780,7 +780,7 @@ var yn = {
780
780
  this.requestor.close(), this.responder.close();
781
781
  }
782
782
  };
783
- function dr(e, t) {
783
+ function yr(e, t) {
784
784
  return new dt({
785
785
  channel: e,
786
786
  ...t
@@ -798,10 +798,10 @@ function qe(e, t) {
798
798
  ...t
799
799
  });
800
800
  }
801
- function fr(e, t, n) {
801
+ function wr(e, t, n) {
802
802
  return qe(e, n).connect(t);
803
803
  }
804
- function pr(e, t) {
804
+ function vr(e, t) {
805
805
  const n = qe(e, {
806
806
  autoDetect: !0,
807
807
  ...t
@@ -895,7 +895,7 @@ var pt = /* @__PURE__ */ Symbol.for("uniform.proxy"), _t = /* @__PURE__ */ Symbo
895
895
  primitive: !1
896
896
  };
897
897
  }
898
- }, _r = class {
898
+ }, Cr = class {
899
899
  _dispatch;
900
900
  constructor(e) {
901
901
  this._dispatch = e;
@@ -960,10 +960,10 @@ function gt(e) {
960
960
  return !1;
961
961
  }
962
962
  }
963
- function mr(e) {
963
+ function xr(e) {
964
964
  return gt(e) ? e.$descriptor ?? null : null;
965
965
  }
966
- function gr(e) {
966
+ function kr(e) {
967
967
  if (!gt(e)) return null;
968
968
  try {
969
969
  const t = Reflect.get(e, _t);
@@ -1015,7 +1015,7 @@ var Sn = class {
1015
1015
  return ee(this._invoker, this._config);
1016
1016
  }
1017
1017
  };
1018
- function br() {
1018
+ function Sr() {
1019
1019
  return new Sn();
1020
1020
  }
1021
1021
  var En = mt;
@@ -1644,13 +1644,13 @@ var bt = class {
1644
1644
  function S(e) {
1645
1645
  return new yt(e);
1646
1646
  }
1647
- function yr(e, t, n) {
1647
+ function Er(e, t, n) {
1648
1648
  return S({
1649
1649
  name: e,
1650
1650
  ...n
1651
1651
  }).attach(t, n);
1652
1652
  }
1653
- function wr(e, t, n) {
1653
+ function Ir(e, t, n) {
1654
1654
  const s = new MessageChannel();
1655
1655
  return s.port1.start(), s.port2.start(), {
1656
1656
  channel1: S({
@@ -1667,16 +1667,16 @@ function wr(e, t, n) {
1667
1667
  };
1668
1668
  }
1669
1669
  var U = /* @__PURE__ */ new Map();
1670
- function vr(e, t) {
1670
+ function Tr(e, t) {
1671
1671
  return U.has(e) || U.set(e, S({
1672
1672
  name: e,
1673
1673
  ...t
1674
1674
  })), U.get(e);
1675
1675
  }
1676
- function Cr() {
1676
+ function Pr() {
1677
1677
  return [...U.keys()];
1678
1678
  }
1679
- function xr(e) {
1679
+ function Mr(e) {
1680
1680
  const t = U.get(e);
1681
1681
  return t ? (t.close(), U.delete(e)) : !1;
1682
1682
  }
@@ -1698,14 +1698,14 @@ function te() {
1698
1698
  }
1699
1699
  return re;
1700
1700
  }
1701
- function kr(e, t) {
1701
+ function Ar(e, t) {
1702
1702
  te().expose(e, t);
1703
1703
  }
1704
- function Sr(e, t) {
1704
+ function Rr(e, t) {
1705
1705
  return te().remote(e, t);
1706
1706
  }
1707
- var wt = (e, t = null) => te().proxy(e), Er = (e, t, n = {}) => wt(t, null), Ir = (e, t, n = {}) => te().wrapDescriptor(e, e?.channel ?? n?.connectChannel);
1708
- function Tr(e, t) {
1707
+ var wt = (e, t = null) => te().proxy(e), qr = (e, t, n = {}) => wt(t, null), Nr = (e, t, n = {}) => te().wrapDescriptor(e, e?.channel ?? n?.connectChannel);
1708
+ function Or(e, t) {
1709
1709
  const n = S({
1710
1710
  name: t,
1711
1711
  autoListen: !1
@@ -1728,7 +1728,7 @@ var C = {
1728
1728
  a: "array",
1729
1729
  ta: "typedarray",
1730
1730
  udf: "undefined"
1731
- }, Pr = [
1731
+ }, Dr = [
1732
1732
  typeof ArrayBuffer != C.udf ? ArrayBuffer : null,
1733
1733
  typeof MessagePort != C.udf ? MessagePort : null,
1734
1734
  typeof ReadableStream != C.udf ? ReadableStream : null,
@@ -1791,7 +1791,7 @@ function P(e) {
1791
1791
  var ye = /* @__PURE__ */ new Map(), w = {
1792
1792
  name: "unknown",
1793
1793
  instance: null
1794
- }, we = /* @__PURE__ */ new Map(), xt = (e) => [...Object.values(d)].includes(e), Mr = (e) => {
1794
+ }, we = /* @__PURE__ */ new Map(), xt = (e) => [...Object.values(d)].includes(e), Lr = (e) => {
1795
1795
  if (e instanceof Worker) return e;
1796
1796
  if (e instanceof URL) return new Worker(e.href, { type: "module" });
1797
1797
  if (typeof e == "function") try {
@@ -1851,7 +1851,7 @@ var ye = /* @__PURE__ */ new Map(), w = {
1851
1851
  }, St = (e = "$host$") => Oe(e), G = (e, t = {}, n = typeof self < "u" ? self : null) => {
1852
1852
  const s = St(e ?? "$host$");
1853
1853
  return s?.createRemoteChannel?.(e, t, n) ?? s;
1854
- }, Ar = (e, t = {}, n) => {
1854
+ }, Br = (e, t = {}, n) => {
1855
1855
  if (e == null || n) return;
1856
1856
  if (ye.has(e)) return ye.get(e);
1857
1857
  const s = {
@@ -1860,7 +1860,7 @@ var ye = /* @__PURE__ */ new Map(), w = {
1860
1860
  remote: Promise.resolve(new kt(e, t))
1861
1861
  };
1862
1862
  return ye.set(e, s), s;
1863
- }, ue = /* @__PURE__ */ new WeakMap(), de = /* @__PURE__ */ new WeakMap(), Ye = /* @__PURE__ */ new WeakMap(), Rr = (e, t) => ue.get(e)?.[t], Rn = (e, t = w?.name, n) => typeof e == "object" && e != null || typeof e == "function" && e != null ? de.has(e) ? de.get(e) : ue.has(e) ? ue.get(e) : ot(e) || n?.includes?.(e) || t == w?.name ? e : {
1863
+ }, ue = /* @__PURE__ */ new WeakMap(), de = /* @__PURE__ */ new WeakMap(), Ye = /* @__PURE__ */ new WeakMap(), Wr = (e, t) => ue.get(e)?.[t], Rn = (e, t = w?.name, n) => typeof e == "object" && e != null || typeof e == "function" && e != null ? de.has(e) ? de.get(e) : ue.has(e) ? ue.get(e) : ot(e) || n?.includes?.(e) || t == w?.name ? e : {
1864
1864
  $isDescriptor: !0,
1865
1865
  path: D.get(e) ?? (() => {
1866
1866
  const s = [h()];
@@ -2290,7 +2290,7 @@ var Bn = class {
2290
2290
  get names() {
2291
2291
  return [...this._connections.keys()];
2292
2292
  }
2293
- }, Le = () => Wn.getInstance(), At = (e, t, n) => Le().getOrCreate(e, t, n), qr = (e = "$host$", t) => At(e, "internal", {
2293
+ }, Le = () => Wn.getInstance(), At = (e, t, n) => Le().getOrCreate(e, t, n), $r = (e = "$host$", t) => At(e, "internal", {
2294
2294
  ...t,
2295
2295
  metadata: {
2296
2296
  ...t?.metadata,
@@ -2687,7 +2687,7 @@ var Bn = class {
2687
2687
  detach() {
2688
2688
  this._cleanup?.(), super.detach();
2689
2689
  }
2690
- }, Nr = {
2690
+ }, Fr = {
2691
2691
  worker: (e, t, n) => new $n(e, t, n),
2692
2692
  messagePort: (e, t, n) => new Fn(e, t, n),
2693
2693
  broadcast: (e, t, n) => new Un(e, t, n),
@@ -2699,7 +2699,7 @@ var Bn = class {
2699
2699
  serviceWorker: (e, t, n) => new Vn(e, t, n),
2700
2700
  self: (e, t) => new Kn(e, t)
2701
2701
  };
2702
- function Or(e) {
2702
+ function Ur(e) {
2703
2703
  const t = [], n = new _({ bufferSize: 100 });
2704
2704
  for (const s of e) s.subscribeIncoming((r) => {
2705
2705
  t.push(r), n.next(r);
@@ -3124,7 +3124,7 @@ var Yn = "uniform_channels", Jn = 1, f = {
3124
3124
  function Rt(e) {
3125
3125
  return J.has(e) || J.set(e, new Xn(e)), J.get(e);
3126
3126
  }
3127
- function Dr() {
3127
+ function jr() {
3128
3128
  for (const e of J.values()) e.close();
3129
3129
  J.clear();
3130
3130
  }
@@ -3645,14 +3645,14 @@ function ns(e, t = {}) {
3645
3645
  name: e
3646
3646
  });
3647
3647
  }
3648
- function Lr(e) {
3648
+ function zr(e) {
3649
3649
  return q.get(e);
3650
3650
  }
3651
- function Br(e) {
3651
+ function Hr(e) {
3652
3652
  const t = q.get(e);
3653
3653
  return t ? (t.close(), q.delete(e)) : !1;
3654
3654
  }
3655
- function Wr() {
3655
+ function Gr() {
3656
3656
  return [...q.keys()];
3657
3657
  }
3658
3658
  function ss(e, t = {}) {
@@ -3672,28 +3672,28 @@ async function rs(e, t, n = {}) {
3672
3672
  })
3673
3673
  };
3674
3674
  }
3675
- async function $r(e, t, n = {}) {
3675
+ async function Qr(e, t, n = {}) {
3676
3676
  return N().addWorker(e, t, n);
3677
3677
  }
3678
- async function Fr(e, t, n = {}) {
3678
+ async function Vr(e, t, n = {}) {
3679
3679
  return N().addPort(e, t, n);
3680
3680
  }
3681
- async function Ur(e, t, n = {}) {
3681
+ async function Kr(e, t, n = {}) {
3682
3682
  return N().addBroadcast(e, t, n);
3683
3683
  }
3684
- function jr(e, t = {}) {
3684
+ function Yr(e, t = {}) {
3685
3685
  return N().addSelfChannel(e, t);
3686
3686
  }
3687
- function zr(e, t) {
3687
+ function Jr(e, t) {
3688
3688
  N().defer(e, t);
3689
3689
  }
3690
- async function Hr(e) {
3690
+ async function Xr(e) {
3691
3691
  return N().initDeferred(e);
3692
3692
  }
3693
- async function Gr(e) {
3693
+ async function Zr(e) {
3694
3694
  return N().getChannelAsync(e);
3695
3695
  }
3696
- function Qr(e, t, n = {}) {
3696
+ function ei(e, t, n = {}) {
3697
3697
  return N().createChannelPair(e, t, n);
3698
3698
  }
3699
3699
  var I = class {
@@ -3891,7 +3891,7 @@ var I = class {
3891
3891
  _activate() {
3892
3892
  this._listening || (this._cleanup = m("self", (e) => this._dispatch(e)), this._listening = !0);
3893
3893
  }
3894
- }, Vr = {
3894
+ }, ti = {
3895
3895
  worker: (e) => new Ze(e),
3896
3896
  workerFromUrl: (e, t) => new Ze(new Worker(typeof e == "string" ? e : e.href, {
3897
3897
  type: "module",
@@ -3914,7 +3914,7 @@ var I = class {
3914
3914
  serviceWorkerHost: () => new us(),
3915
3915
  self: () => new ds()
3916
3916
  };
3917
- function Kr(e, t) {
3917
+ function ni(e, t) {
3918
3918
  return {
3919
3919
  send: (n, s) => e.next(n, s),
3920
3920
  subscribe: (n) => t.subscribe({ next: n }),
@@ -4116,13 +4116,13 @@ var Bt = class {
4116
4116
  function Be(e) {
4117
4117
  return j || (j = new Bt(e)), j;
4118
4118
  }
4119
- function Yr(e) {
4119
+ function si(e) {
4120
4120
  return j?.close(), j = new Bt(e), j;
4121
4121
  }
4122
- function Jr(e) {
4122
+ function ri(e) {
4123
4123
  return Be().subscribeConnections(e);
4124
4124
  }
4125
- function Xr(e) {
4125
+ function ii(e) {
4126
4126
  return Be().subscribeChannelCreated(e);
4127
4127
  }
4128
4128
  var ae = null, ce = null;
@@ -4132,19 +4132,19 @@ function Wt(e) {
4132
4132
  function $t(e) {
4133
4133
  return ce || (ce = qe(e ?? "worker"), ce.connect(self)), ce;
4134
4134
  }
4135
- function Zr(e, t) {
4135
+ function oi(e, t) {
4136
4136
  Wt().expose(e, t);
4137
4137
  }
4138
- function ei(e) {
4138
+ function ai(e) {
4139
4139
  return Wt().subscribeInvocations(e);
4140
4140
  }
4141
- function ti(e = "host", t = []) {
4141
+ function ci(e = "host", t = []) {
4142
4142
  return $t().createProxy(e, t);
4143
4143
  }
4144
- function ni(e, t = "host") {
4144
+ function li(e, t = "host") {
4145
4145
  return $t().importModule(t, e);
4146
4146
  }
4147
- var si = Be({ name: "worker" }), pe = class {
4147
+ var hi = Be({ name: "worker" }), pe = class {
4148
4148
  _subs = /* @__PURE__ */ new Set();
4149
4149
  _listening = !1;
4150
4150
  _cleanup = null;
@@ -4320,7 +4320,7 @@ var si = Be({ name: "worker" }), pe = class {
4320
4320
  chrome.runtime.onMessageExternal.addListener(e), this._cleanup = () => chrome.runtime.onMessageExternal.removeListener(e), this._listening = !0;
4321
4321
  }
4322
4322
  };
4323
- function ri(e, t) {
4323
+ function ui(e, t) {
4324
4324
  return async (n, s, r) => {
4325
4325
  if (n.type !== "request") {
4326
4326
  r.next(n);
@@ -4352,7 +4352,7 @@ function ri(e, t) {
4352
4352
  else r.next(n);
4353
4353
  };
4354
4354
  }
4355
- var ii = {
4355
+ var di = {
4356
4356
  runtime: (e, t) => new We(e, t),
4357
4357
  tabs: (e, t) => new $e(e, t),
4358
4358
  port: (e, t) => new Fe(e, t),
@@ -4493,7 +4493,7 @@ var ii = {
4493
4493
  return this._roomName;
4494
4494
  }
4495
4495
  };
4496
- function oi(e, t) {
4496
+ function fi(e, t) {
4497
4497
  return async (n) => {
4498
4498
  if (n.type !== "request" || !n.ack) return;
4499
4499
  const s = n.payload?.action;
@@ -4521,11 +4521,11 @@ function oi(e, t) {
4521
4521
  }
4522
4522
  };
4523
4523
  }
4524
- var ai = {
4524
+ var pi = {
4525
4525
  create: (e, t, n) => new _e(e, t, n),
4526
4526
  room: (e, t) => new fs(e, t)
4527
4527
  };
4528
- function ci(e, t, n) {
4528
+ function _i(e, t, n) {
4529
4529
  return new _e(e, t, n);
4530
4530
  }
4531
4531
  var me = class {
@@ -4779,13 +4779,13 @@ var me = class {
4779
4779
  return this._channelName;
4780
4780
  }
4781
4781
  };
4782
- function li(e, t, n) {
4782
+ function mi(e, t, n) {
4783
4783
  return new me(e, t, n);
4784
4784
  }
4785
- function hi(e) {
4785
+ function gi(e) {
4786
4786
  return new Ue(e);
4787
4787
  }
4788
- var ui = {
4788
+ var bi = {
4789
4789
  client: (e, t, n) => new me(e, t, n),
4790
4790
  host: (e) => new Ue(e)
4791
4791
  }, V = null;
@@ -4983,7 +4983,7 @@ function zt(e, t = {}) {
4983
4983
  }
4984
4984
  };
4985
4985
  }
4986
- function di(e, t, n, s = {}) {
4986
+ function yi(e, t, n, s = {}) {
4987
4987
  return new se(e, t, n, s);
4988
4988
  }
4989
4989
  var Ht = class b {
@@ -5041,7 +5041,7 @@ var Ht = class b {
5041
5041
  get overflow() {
5042
5042
  return Atomics.load(this._meta, b.OVERFLOW);
5043
5043
  }
5044
- }, fi = {
5044
+ }, wi = {
5045
5045
  create: (e, t, n, s) => new se(e, t, n, s),
5046
5046
  createPair: (e, t) => zt(e, t),
5047
5047
  createBuffer: (e, t) => new F(e, t),
@@ -5357,7 +5357,7 @@ function Gt(e) {
5357
5357
  }
5358
5358
  };
5359
5359
  }
5360
- var pi = {
5360
+ var vi = {
5361
5361
  createPeer: (e, t) => new ge(e, t),
5362
5362
  createManager: (e, t) => new je(e, t),
5363
5363
  createSignaling: (e) => Gt(e)
@@ -5488,7 +5488,7 @@ function be(e, t) {
5488
5488
  transfer: () => n.port2
5489
5489
  };
5490
5490
  }
5491
- function _i(e, t, n) {
5491
+ function Ci(e, t, n) {
5492
5492
  return new B(e, t, n);
5493
5493
  }
5494
5494
  var Qt = class {
@@ -5643,7 +5643,7 @@ function vs(e, t) {
5643
5643
  });
5644
5644
  } });
5645
5645
  }
5646
- var mi = {
5646
+ var xi = {
5647
5647
  create: (e, t, n) => new B(e, t, n),
5648
5648
  createPair: (e, t) => be(e, t),
5649
5649
  createPool: (e) => new Qt(e),
@@ -5928,7 +5928,7 @@ var mi = {
5928
5928
  async getPendingCount(e) {
5929
5929
  return (await this.query({ filter: (t) => t.data.channel === e && t.data.status === "pending" })).length;
5930
5930
  }
5931
- }, gi = {
5931
+ }, ki = {
5932
5932
  create: (e) => new ze(e),
5933
5933
  createMessageQueue: (e) => new Vt(e)
5934
5934
  }, He = class {
@@ -6266,10 +6266,10 @@ var mi = {
6266
6266
  });
6267
6267
  };
6268
6268
  };
6269
- function bi(e) {
6269
+ function Si(e) {
6270
6270
  return new He(e);
6271
6271
  }
6272
- function yi(e) {
6272
+ function Ei(e) {
6273
6273
  return new Ge(e);
6274
6274
  }
6275
6275
  function Cs(e, t = self) {
@@ -6633,7 +6633,7 @@ var ks = class {
6633
6633
  function Ss() {
6634
6634
  return Se || (Se = new ks()), Se;
6635
6635
  }
6636
- var wi = {
6636
+ var Ii = {
6637
6637
  create: $,
6638
6638
  registry: Ss,
6639
6639
  fromWorker: (e, t, n) => $(t, { worker: { existing: e } }, n),
@@ -6741,7 +6741,7 @@ var wi = {
6741
6741
  if (e.length === 0) throw new Error("No active tab found");
6742
6742
  if (!e[0].id) throw new Error("Active tab has no ID");
6743
6743
  return e[0].id;
6744
- }, vi = async () => {
6744
+ }, Ti = async () => {
6745
6745
  try {
6746
6746
  return await Is();
6747
6747
  } catch {
@@ -6749,7 +6749,7 @@ var wi = {
6749
6749
  if (!e?.id) throw new Error("No visible tab found");
6750
6750
  return e.id;
6751
6751
  }
6752
- }, Ci = (e, t = "worker") => {
6752
+ }, Pi = (e, t = "worker") => {
6753
6753
  const n = Oe(t ?? "worker");
6754
6754
  return Object.keys(e).forEach((s) => {
6755
6755
  e[s];
@@ -7054,7 +7054,7 @@ function Ts(e) {
7054
7054
  const t = e?.dbName ?? "default";
7055
7055
  return Ee.has(t) || Ee.set(t, new Yt(e)), Ee.get(t);
7056
7056
  }
7057
- function xi(e) {
7057
+ function Mi(e) {
7058
7058
  return new Yt(e);
7059
7059
  }
7060
7060
  var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
@@ -7209,7 +7209,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7209
7209
  for (const e of this.wrappedListeners) T.get(this.channelName)?.delete(e);
7210
7210
  this.wrappedListeners.clear(), this.wrappedByOriginal.clear();
7211
7211
  }
7212
- }, ki = class {
7212
+ }, Ai = class {
7213
7213
  port;
7214
7214
  channelName;
7215
7215
  listeners = /* @__PURE__ */ new Set();
@@ -7244,7 +7244,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7244
7244
  close() {
7245
7245
  this.listeners.clear(), this.port?.disconnect?.();
7246
7246
  }
7247
- }, Si = async (e) => {
7247
+ }, Ri = async (e) => {
7248
7248
  let t;
7249
7249
  try {
7250
7250
  if (typeof e.script != "string") throw new Error("Chrome extension worker channel requires config.script to be a string path");
@@ -7254,13 +7254,13 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7254
7254
  }
7255
7255
  const n = await G(e.name, {}, t);
7256
7256
  return n?.remote ?? n;
7257
- }, Ei = (e) => new Zt(e), Ii = (e) => {
7257
+ }, qi = (e) => new Zt(e), Ni = (e) => {
7258
7258
  const t = new Zt(e), n = G(e, {}, t);
7259
7259
  return n?.remote ?? n;
7260
7260
  }, Ms = (e, t) => {
7261
7261
  const n = new Ps(e, t), s = G(e, {}, n);
7262
7262
  return s?.remote ?? s;
7263
- }, Ti = (e, t) => Ms(e, t), Pi = (e = "$host$") => Oe(e ?? "$host$"), Mi = (e, t) => new Es(e, t), As = async (e) => ({
7263
+ }, Oi = (e, t) => Ms(e, t), Di = (e = "$host$") => Oe(e ?? "$host$"), Li = (e, t) => new Es(e, t), As = async (e) => ({
7264
7264
  async request(t, n = []) {
7265
7265
  return new Promise((s, r) => {
7266
7266
  const i = new BroadcastChannel(`${e.name}-sw-channel`), o = h(), a = setTimeout(() => {
@@ -7292,7 +7292,7 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7292
7292
  }
7293
7293
  else n = new Worker(P(e.script), e.options);
7294
7294
  return await G(e.name, {}, n);
7295
- }, Ai = async (e, t) => {
7295
+ }, Bi = async (e, t) => {
7296
7296
  const n = await en(e);
7297
7297
  return new Kt(n, t);
7298
7298
  }, Rs = (e, t, n) => {
@@ -7689,19 +7689,19 @@ var T = /* @__PURE__ */ new Map(), st = !1, Xt = () => {
7689
7689
  function Qe(e) {
7690
7690
  return z || (z = new tn(e)), z;
7691
7691
  }
7692
- function Ri(e) {
7692
+ function Wi(e) {
7693
7693
  return new tn(e);
7694
7694
  }
7695
- function qi() {
7695
+ function $i() {
7696
7696
  z && (z.destroy(), z = null);
7697
7697
  }
7698
- function Ni(e) {
7698
+ function Fi(e) {
7699
7699
  return Qe().sendMessage(e);
7700
7700
  }
7701
- function Oi(e, t) {
7701
+ function Ui(e, t) {
7702
7702
  Qe().registerHandler(e, t);
7703
7703
  }
7704
- function Di(e) {
7704
+ function ji(e) {
7705
7705
  return Qe().getBroadcastChannel(e);
7706
7706
  }
7707
7707
  var nn = class {
@@ -7820,17 +7820,17 @@ var nn = class {
7820
7820
  return this.executionContext;
7821
7821
  }
7822
7822
  };
7823
- function Li(e) {
7823
+ function zi(e) {
7824
7824
  return new nn(e);
7825
7825
  }
7826
7826
  var O = null;
7827
- function Bi(e) {
7827
+ function Hi(e) {
7828
7828
  return O ? e?.channels && O.registerConfigs(e.channels) : O = new nn(e), O;
7829
7829
  }
7830
- function Wi() {
7830
+ function Gi() {
7831
7831
  O && (O.closeAll(), O = null);
7832
7832
  }
7833
- function $i(e, t, n) {
7833
+ function Qi(e, t, n) {
7834
7834
  const s = /* @__PURE__ */ new Map(), r = g(e);
7835
7835
  return (i) => {
7836
7836
  const o = (l) => l.type === "response" && l.reqId ? (u) => {
@@ -7863,7 +7863,7 @@ function $i(e, t, n) {
7863
7863
  }, c;
7864
7864
  };
7865
7865
  }
7866
- var Fi = class {
7866
+ var Vi = class {
7867
7867
  _transport;
7868
7868
  _channelName;
7869
7869
  _pending = /* @__PURE__ */ new Map();
@@ -7912,7 +7912,7 @@ var Fi = class {
7912
7912
  this._cleanup?.(), this._cleanup = null, this._active = !1;
7913
7913
  }
7914
7914
  };
7915
- function Ui(e, t = {}) {
7915
+ function Ki(e, t = {}) {
7916
7916
  return async (n, s) => {
7917
7917
  if (n.type !== "request" || n.channel !== e) return;
7918
7918
  t.onRequest?.(n.payload);
@@ -7924,7 +7924,7 @@ function Ui(e, t = {}) {
7924
7924
  }, r.transfer));
7925
7925
  };
7926
7926
  }
7927
- var ji = class {
7927
+ var Yi = class {
7928
7928
  _channelName;
7929
7929
  _targetChannel;
7930
7930
  _pending = /* @__PURE__ */ new Map();
@@ -7968,10 +7968,10 @@ var ji = class {
7968
7968
  }));
7969
7969
  return this._subscriber.next(r), i;
7970
7970
  }
7971
- }, zi = async (e, t = {}, n = null) => G(e, t, n ?? (typeof self < "u" ? self : null)), Hi = async (e, t, n = {}, s = typeof self < "u" ? self : null) => (await G(e, n?.channelOptions, s))?.doImportModule?.(t, n?.importOptions), Gi = ne, Qi = ns, Vi = ss, Ki = rs, Yi = async (e, t = {}, n = typeof self < "u" ? self : null, s = "$host$") => {
7971
+ }, Ji = async (e, t = {}, n = null) => G(e, t, n ?? (typeof self < "u" ? self : null)), Xi = async (e, t, n = {}, s = typeof self < "u" ? self : null) => (await G(e, n?.channelOptions, s))?.doImportModule?.(t, n?.importOptions), Zi = ne, eo = ns, to = ss, no = rs, so = async (e, t = {}, n = typeof self < "u" ? self : null, s = "$host$") => {
7972
7972
  const r = St(s ?? "$host$");
7973
7973
  return await r?.createRemoteChannel(e, t, n), wt(e, r ?? w?.instance);
7974
- }, Ji = (e, t = {}) => {
7974
+ }, ro = (e, t = {}) => {
7975
7975
  const n = Ne();
7976
7976
  return n !== "chrome-extension" ? {
7977
7977
  async request(s) {
@@ -8006,14 +8006,14 @@ var ji = class {
8006
8006
  };
8007
8007
  };
8008
8008
  export {
8009
- Ar as $createOrUseExistingChannel,
8009
+ Br as $createOrUseExistingChannel,
8010
8010
  Q as $descriptor,
8011
8011
  qn as $requestHandler,
8012
8012
  xs as AbstractTransport,
8013
8013
  F as AtomicsBuffer,
8014
8014
  Ht as AtomicsRingBuffer,
8015
8015
  se as AtomicsTransport,
8016
- fi as AtomicsTransportFactory,
8016
+ wi as AtomicsTransportFactory,
8017
8017
  wn as BidirectionalInvoker,
8018
8018
  is as BroadcastChannelObservable,
8019
8019
  Un as BroadcastChannelTransport,
@@ -8021,18 +8021,18 @@ export {
8021
8021
  Bn as ChannelConnection,
8022
8022
  Nt as ChannelContext,
8023
8023
  An as ChannelHandler,
8024
- Fi as ChannelMessageObservable,
8024
+ Vi as ChannelMessageObservable,
8025
8025
  v as ChannelNativeObservable,
8026
8026
  ln as ChannelObservable,
8027
8027
  Xn as ChannelStorage,
8028
8028
  _ as ChannelSubject,
8029
8029
  Zn as ChannelTransaction,
8030
8030
  Zt as ChromeExtensionBroadcastChannel,
8031
- ki as ChromeExtensionPortChannel,
8031
+ Ai as ChromeExtensionPortChannel,
8032
8032
  Ps as ChromeExtensionTabsChannel,
8033
8033
  Ft as ChromeExternalObservable,
8034
8034
  Qn as ChromeExternalTransport,
8035
- ii as ChromeObservableFactory,
8035
+ di as ChromeObservableFactory,
8036
8036
  Fe as ChromePortObservable,
8037
8037
  Gn as ChromePortTransport,
8038
8038
  We as ChromeRuntimeObservable,
@@ -8041,35 +8041,38 @@ export {
8041
8041
  Hn as ChromeTabsTransport,
8042
8042
  Wn as ConnectionPool,
8043
8043
  yn as DefaultReflect,
8044
- _r as DispatchHandler,
8045
- _r as DispatchProxyHandler,
8046
- Ys as MessageObservable,
8044
+ Cr as DispatchHandler,
8045
+ Cr as DispatchProxyHandler,
8046
+ Gs as MOUNTED_FS_EVENT,
8047
+ Qs as MOUNTED_FS_HTTP_PATH,
8048
+ Vs as MOUNTED_FS_WS_PATH,
8049
+ sr as MessageObservable,
8047
8050
  Ce as MessagePortObservable,
8048
8051
  Fn as MessagePortTransport,
8049
8052
  Yt as MessageQueue,
8050
8053
  Vt as MessageQueueStorage,
8051
8054
  v as Observable,
8052
8055
  An as ObservableChannelHandler,
8053
- ur as ObservableFactory,
8054
- ji as ObservableRequestDispatcher,
8056
+ br as ObservableFactory,
8057
+ Yi as ObservableRequestDispatcher,
8055
8058
  Kt as OptimizedWorkerChannel,
8056
8059
  _t as PROXY_INTERNALS,
8057
8060
  pt as PROXY_MARKER,
8058
8061
  zs as PendingMessageStore,
8059
8062
  Qt as PortPool,
8060
8063
  B as PortTransport,
8061
- mi as PortTransportFactory,
8064
+ xi as PortTransportFactory,
8062
8065
  js as ProtocolReplayGuard,
8063
8066
  Sn as ProxyBuilder,
8064
8067
  Es as QueuedWorkerChannel,
8065
- Rr as READ,
8068
+ Wr as READ,
8066
8069
  je as RTCPeerManager,
8067
8070
  ge as RTCPeerTransport,
8068
- pi as RTCTransportFactory,
8071
+ vi as RTCTransportFactory,
8069
8072
  kt as RemoteChannelHelper,
8070
8073
  ye as RemoteChannels,
8071
8074
  Cn as RemoteProxyHandler,
8072
- Ks as ReplayChannelSubject,
8075
+ nr as ReplayChannelSubject,
8073
8076
  dt as Requestor,
8074
8077
  ft as Responder,
8075
8078
  w as SELF_CHANNEL,
@@ -8083,105 +8086,106 @@ export {
8083
8086
  Vn as ServiceWorkerTransport,
8084
8087
  me as SharedWorkerClient,
8085
8088
  Ue as SharedWorkerHost,
8086
- ui as SharedWorkerObservableFactory,
8089
+ bi as SharedWorkerObservableFactory,
8087
8090
  _e as SocketIOObservable,
8088
- ai as SocketIOObservableFactory,
8091
+ pi as SocketIOObservableFactory,
8089
8092
  fs as SocketIORoomObservable,
8090
8093
  ze as TransferableStorage,
8091
- gi as TransferableStorageFactory,
8094
+ ki as TransferableStorageFactory,
8092
8095
  E as TransportAdapter,
8093
8096
  ls as TransportChromePortObservable,
8094
8097
  as as TransportChromeRuntimeObservable,
8095
8098
  cs as TransportChromeTabsObservable,
8096
- Vs as TransportCoreFactory,
8097
- Nr as TransportFactory,
8099
+ tr as TransportCoreFactory,
8100
+ Fr as TransportFactory,
8098
8101
  I as TransportObservable,
8099
- Vr as TransportObservableFactory,
8102
+ ti as TransportObservableFactory,
8100
8103
  yt as UnifiedChannel,
8101
8104
  tn as UnifiedMessagingManager,
8102
- wi as UnifiedTransportFactory,
8105
+ Ii as UnifiedTransportFactory,
8103
8106
  d as WReflectAction,
8104
- Gs as WStatus,
8105
- Qs as WType,
8107
+ Zs as WStatus,
8108
+ er as WType,
8106
8109
  os as WebSocketObservable,
8107
8110
  jn as WebSocketTransport,
8108
8111
  Te as WindowPortConnector,
8109
8112
  Bt as WorkerContext,
8110
8113
  Ze as WorkerObservable,
8111
8114
  $n as WorkerTransport,
8112
- Ur as addBroadcastChannel,
8113
- Fr as addPortChannel,
8114
- jr as addSelfChannelToDefault,
8115
- $r as addWorkerChannel,
8116
- pr as autoInvoker,
8115
+ Kr as addBroadcastChannel,
8116
+ Vr as addPortChannel,
8117
+ Yr as addSelfChannelToDefault,
8118
+ Qr as addWorkerChannel,
8119
+ vr as autoInvoker,
8117
8120
  Cs as bindServiceWorkerHostBridge,
8118
8121
  Mt as buildResponse,
8119
- Dr as closeAllStorage,
8120
- xr as closeUnifiedChannel,
8121
- Yi as connectToChannelAsModule,
8122
+ jr as closeAllStorage,
8123
+ Mr as closeUnifiedChannel,
8124
+ so as connectToChannelAsModule,
8122
8125
  zt as createAtomicsChannelPair,
8123
8126
  mn as createBidirectionalChannel,
8124
- Kr as createBidirectionalTransport,
8127
+ ni as createBidirectionalTransport,
8125
8128
  Gt as createBroadcastSignaling,
8126
8129
  ht as createBroadcastTransport,
8127
8130
  ne as createChannelContext,
8128
8131
  be as createChannelPair,
8129
- Ui as createChannelRequestHandler,
8132
+ Ki as createChannelRequestHandler,
8130
8133
  ss as createChannelsInContext,
8131
- Ei as createChromeExtensionBroadcast,
8132
- Ii as createChromeExtensionBroadcastChannel,
8133
- Si as createChromeExtensionChannel,
8134
- Ji as createChromeExtensionRuntimeChannel,
8134
+ qi as createChromeExtensionBroadcast,
8135
+ Ni as createChromeExtensionBroadcastChannel,
8136
+ Ri as createChromeExtensionChannel,
8137
+ ro as createChromeExtensionRuntimeChannel,
8135
8138
  Ms as createChromeExtensionTabsChannel,
8136
- Ti as createChromeExtensionTabsMessagingChannel,
8139
+ Oi as createChromeExtensionTabsMessagingChannel,
8137
8140
  cn as createChromeListener,
8138
- ri as createChromeRequestHandler,
8141
+ ui as createChromeRequestHandler,
8139
8142
  ct as createChromeTabsListener,
8140
- Or as createConnectionObserver,
8141
- Gi as createContext,
8142
- Qr as createDefaultChannelPair,
8143
+ Ur as createConnectionObserver,
8144
+ Zi as createContext,
8145
+ ei as createDefaultChannelPair,
8143
8146
  xn as createExposeHandler,
8144
- _i as createFromPort,
8147
+ Ci as createFromPort,
8145
8148
  St as createHostChannel,
8146
- ti as createHostProxy,
8149
+ ci as createHostProxy,
8147
8150
  qe as createInvoker,
8148
8151
  Ve as createInvokerObservable,
8149
- nr as createMessageId,
8150
- xi as createMessageQueue,
8151
- Vi as createMultiChannel,
8152
- Tr as createObservableChannel,
8153
- Ai as createOptimizedWorkerChannel,
8152
+ lr as createMessageId,
8153
+ Mi as createMessageQueue,
8154
+ Ks as createMountedFsId,
8155
+ to as createMultiChannel,
8156
+ Or as createObservableChannel,
8157
+ Bi as createOptimizedWorkerChannel,
8154
8158
  G as createOrUseExistingChannel,
8155
8159
  ws as createPortProxy,
8156
8160
  Pe as createProtocolEnvelope,
8157
8161
  Rs as createQueuedOptimizedWorkerChannel,
8158
- Mi as createQueuedWorkerChannel,
8162
+ Li as createQueuedWorkerChannel,
8159
8163
  hn as createReflectHandler,
8160
8164
  ee as createRemoteProxy,
8161
- dr as createRequestor,
8165
+ yr as createRequestor,
8162
8166
  vn as createResponder,
8163
8167
  kn as createSenderProxy,
8164
- Li as createServiceChannelManager,
8168
+ zi as createServiceChannelManager,
8165
8169
  As as createServiceWorkerChannel,
8166
- yi as createServiceWorkerClient,
8167
- bi as createServiceWorkerHost,
8168
- hi as createSharedWorkerHostObservable,
8169
- li as createSharedWorkerObservable,
8170
- ci as createSocketObservable,
8171
- oi as createSocketRequestHandler,
8170
+ Ei as createServiceWorkerClient,
8171
+ Si as createServiceWorkerHost,
8172
+ gi as createSharedWorkerHostObservable,
8173
+ mi as createSharedWorkerObservable,
8174
+ _i as createSocketObservable,
8175
+ fi as createSocketRequestHandler,
8172
8176
  $ as createTransport,
8173
8177
  m as createTransportListener,
8174
8178
  g as createTransportSender,
8175
8179
  S as createUnifiedChannel,
8176
- wr as createUnifiedChannelPair,
8177
- Ri as createUnifiedMessaging,
8180
+ Ir as createUnifiedChannelPair,
8181
+ Wi as createUnifiedMessaging,
8178
8182
  lt as createWebSocketTransport,
8179
- di as createWorkerAtomicsTransport,
8183
+ yi as createWorkerAtomicsTransport,
8180
8184
  en as createWorkerChannel,
8181
- er as debounce,
8182
- zr as deferChannel,
8185
+ ar as debounce,
8186
+ Jr as deferChannel,
8183
8187
  fn as delay,
8184
- Br as deleteContext,
8188
+ Hr as deleteContext,
8185
8189
  Ye as descMap,
8186
8190
  H as detectContextType,
8187
8191
  Ne as detectExecutionContext,
@@ -8189,34 +8193,34 @@ export {
8189
8193
  Ke as detectTransport,
8190
8194
  Z as detectTransportType,
8191
8195
  Pt as executeAction,
8192
- kr as exposeFromUnified,
8193
- Zr as exposeFromWorker,
8196
+ Ar as exposeFromUnified,
8197
+ oi as exposeFromWorker,
8194
8198
  vs as exposeOverPort,
8195
8199
  ut as filter,
8196
8200
  un as fromEvent,
8197
8201
  dn as fromPromise,
8198
- Di as getBroadcastChannel,
8199
- Gr as getChannelFromDefault,
8202
+ ji as getBroadcastChannel,
8203
+ Zr as getChannelFromDefault,
8200
8204
  Rt as getChannelStorage,
8201
8205
  At as getConnection,
8202
8206
  Le as getConnectionPool,
8203
- Lr as getContext,
8204
- Wr as getContextNames,
8207
+ zr as getContext,
8208
+ Gr as getContextNames,
8205
8209
  Is as getCurrentTabId,
8206
8210
  N as getDefaultContext,
8207
- qr as getHostConnection,
8211
+ $r as getHostConnection,
8208
8212
  Ts as getMessageQueue,
8209
8213
  ns as getOrCreateContext,
8210
- mr as getProxyDescriptor,
8211
- gr as getProxyInternals,
8212
- Bi as getServiceChannelManager,
8213
- Qi as getSharedContext,
8214
+ xr as getProxyDescriptor,
8215
+ kr as getProxyInternals,
8216
+ Hi as getServiceChannelManager,
8217
+ eo as getSharedContext,
8214
8218
  at as getTransportMeta,
8215
8219
  Ss as getTransportRegistry,
8216
- vr as getUnifiedChannel,
8217
- Cr as getUnifiedChannelNames,
8220
+ Tr as getUnifiedChannel,
8221
+ Pr as getUnifiedChannelNames,
8218
8222
  Qe as getUnifiedMessaging,
8219
- vi as getVisibleTabId,
8223
+ Ti as getVisibleTabId,
8220
8224
  te as getWorkerChannel,
8221
8225
  Be as getWorkerContext,
8222
8226
  $t as getWorkerInvoker,
@@ -8225,68 +8229,71 @@ export {
8225
8229
  ue as handMap,
8226
8230
  De as handleRequest,
8227
8231
  Dn as hasNoPath,
8228
- ni as importInHost,
8229
- Ki as importIsolatedModule,
8230
- Hi as importModuleInChannel,
8232
+ li as importInHost,
8233
+ no as importIsolatedModule,
8234
+ Xi as importModuleInChannel,
8231
8235
  rs as importModuleInContext,
8232
8236
  Oe as initChannelHandler,
8233
- Hr as initDeferredChannel,
8234
- Pi as initMainChannel,
8235
- Yr as initWorkerContext,
8237
+ Xr as initDeferredChannel,
8238
+ Di as initMainChannel,
8239
+ si as initWorkerContext,
8236
8240
  pn as interval,
8237
8241
  Pn as isChromeExtensionContext,
8242
+ Ys as isMountedFsRequest,
8243
+ Js as isMountedFsResponse,
8238
8244
  Us as isProtocolEnvelope,
8239
8245
  gt as isRemoteProxy,
8240
8246
  vt as isServiceWorkerContext,
8241
- Mr as loadWorker,
8242
- ir as makeBroadcastInvoker,
8243
- $i as makeChannelMessageHandler,
8244
- ar as makeChromeRuntimeInvoker,
8245
- rr as makeMessagePortInvoker,
8246
- Ir as makeObservableRequestProxy,
8247
+ Lr as loadWorker,
8248
+ dr as makeBroadcastInvoker,
8249
+ Qi as makeChannelMessageHandler,
8250
+ pr as makeChromeRuntimeInvoker,
8251
+ ur as makeMessagePortInvoker,
8252
+ Nr as makeObservableRequestProxy,
8247
8253
  En as makeRequestProxy,
8248
- hr as makeSelfInvoker,
8249
- cr as makeServiceWorkerClientInvoker,
8250
- lr as makeServiceWorkerHostInvoker,
8251
- or as makeWebSocketInvoker,
8252
- sr as makeWorkerInvoker,
8253
- Js as map,
8254
+ gr as makeSelfInvoker,
8255
+ _r as makeServiceWorkerClientInvoker,
8256
+ mr as makeServiceWorkerHostInvoker,
8257
+ fr as makeWebSocketInvoker,
8258
+ hr as makeWorkerInvoker,
8259
+ rr as map,
8254
8260
  _n as merge,
8255
8261
  it as normalizeProtocolEnvelope,
8256
8262
  ve as normalizeRef,
8257
8263
  Rn as objectToRef,
8258
- Xr as onWorkerChannelCreated,
8259
- Jr as onWorkerConnection,
8260
- ei as onWorkerInvocation,
8261
- br as proxyBuilder,
8264
+ ii as onWorkerChannelCreated,
8265
+ ri as onWorkerConnection,
8266
+ ai as onWorkerInvocation,
8267
+ Xs as parseMountedFsMessage,
8268
+ Sr as proxyBuilder,
8262
8269
  L as readByPath,
8263
- Oi as registerHandler,
8264
- Ci as registerWorkerAPI,
8270
+ Ui as registerHandler,
8271
+ Pi as registerWorkerAPI,
8265
8272
  D as registeredInPath,
8266
- Sr as remoteFromUnified,
8273
+ Rr as remoteFromUnified,
8267
8274
  On as removeByData,
8268
8275
  It as removeByPath,
8269
- Wi as resetServiceChannelManager,
8270
- qi as resetUnifiedMessaging,
8276
+ Gi as resetServiceChannelManager,
8277
+ $i as resetUnifiedMessaging,
8271
8278
  P as resolveWorkerSpecifierHref,
8272
- Ni as sendMessage,
8273
- fr as setupInvoker,
8274
- yr as setupUnifiedChannel,
8279
+ Fi as sendMessage,
8280
+ wr as setupInvoker,
8281
+ Er as setupUnifiedChannel,
8275
8282
  X as storedData,
8276
8283
  Mn as supportsDedicatedWorkers,
8277
- zi as sync,
8278
- Xs as take,
8279
- Zs as takeUntil,
8280
- tr as throttle,
8284
+ Ji as sync,
8285
+ ir as take,
8286
+ or as takeUntil,
8287
+ cr as throttle,
8281
8288
  Et as traverseByPath,
8282
8289
  Nn as unwrapDescriptorFromProxy,
8283
8290
  ie as unwrapDescriptorFromProxyRecursive,
8284
8291
  gn as when,
8285
- si as workerContext,
8292
+ hi as workerContext,
8286
8293
  wt as wrapChannel,
8287
8294
  mt as wrapDescriptor,
8288
8295
  de as wrapMap,
8289
- Er as wrapObservableChannel,
8296
+ qr as wrapObservableChannel,
8290
8297
  fe as writeByPath
8291
8298
  };
8292
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidW5pZm9ybS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUHJvbWlzZWQsIFVVSUR2NCwgZGVlcE9wZXJhdGVBbmRDbG9uZSwgaXNDYW5KdXN0UmV0dXJuLCBpc0NhblRyYW5zZmVyLCBpc05vdENvbXBsZXhBcnJheSwgaXNQcmltaXRpdmUgfSBmcm9tIFwiQGZlc3QtbGliL2NvcmVcIjtcblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3R5cGVzL0ludGVyZmFjZS50c1xudmFyIFdTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1N0YXR1cykge1xuXHRXU3RhdHVzW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuXHRXU3RhdHVzW1wiRVJST1JcIl0gPSBcImVycm9yXCI7XG5cdHJldHVybiBXU3RhdHVzO1xufSh7fSk7XG52YXIgV1R5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1R5cGUpIHtcblx0V1R5cGVbXCJQUklNSVRJVkVcIl0gPSBcInByaW1pdGl2ZVwiO1xuXHRXVHlwZVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG5cdFdUeXBlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcblx0V1R5cGVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG5cdFdUeXBlW1wiQklHSU5UXCJdID0gXCJiaWdpbnRcIjtcblx0V1R5cGVbXCJVTkRFRklORURcIl0gPSBcInVuZGVmaW5lZFwiO1xuXHRXVHlwZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcblx0V1R5cGVbXCJPQkpFQ1RcIl0gPSBcIm9iamVjdFwiO1xuXHRXVHlwZVtcIkZVTkNUSU9OXCJdID0gXCJmdW5jdGlvblwiO1xuXHRXVHlwZVtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuXHRXVHlwZVtcIk1BUFwiXSA9IFwibWFwXCI7XG5cdFdUeXBlW1wiU0VUXCJdID0gXCJzZXRcIjtcblx0V1R5cGVbXCJTWU1CT0xcIl0gPSBcInN5bWJvbFwiO1xuXHRXVHlwZVtcIldFQUtfUkVGXCJdID0gXCJ3ZWFrUmVmXCI7XG5cdFdUeXBlW1wiUFJPTUlTRVwiXSA9IFwicHJvbWlzZVwiO1xuXHRXVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcblx0cmV0dXJuIFdUeXBlO1xufSh7fSk7XG52YXIgV1JlZmxlY3RBY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV1JlZmxlY3RBY3Rpb24pIHtcblx0V1JlZmxlY3RBY3Rpb25bXCJHRVRcIl0gPSBcImdldFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIlNFVFwiXSA9IFwic2V0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiQ0FMTFwiXSA9IFwiY2FsbFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkFQUExZXCJdID0gXCJhcHBseVwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkNPTlNUUlVDVFwiXSA9IFwiY29uc3RydWN0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiREVMRVRFXCJdID0gXCJkZWxldGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJERUxFVEVfUFJPUEVSVFlcIl0gPSBcImRlbGV0ZVByb3BlcnR5XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSEFTXCJdID0gXCJoYXNcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJPV05fS0VZU1wiXSA9IFwib3duS2V5c1wiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUlwiXSA9IFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiR0VUX1BST1BFUlRZX0RFU0NSSVBUT1JcIl0gPSBcImdldFByb3BlcnR5RGVzY3JpcHRvclwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVF9QUk9UT1RZUEVfT0ZcIl0gPSBcImdldFByb3RvdHlwZU9mXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiU0VUX1BST1RPVFlQRV9PRlwiXSA9IFwic2V0UHJvdG90eXBlT2ZcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJJU19FWFRFTlNJQkxFXCJdID0gXCJpc0V4dGVuc2libGVcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJQUkVWRU5UX0VYVEVOU0lPTlNcIl0gPSBcInByZXZlbnRFeHRlbnNpb25zXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiVFJBTlNGRVJcIl0gPSBcInRyYW5zZmVyXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiSU1QT1JUXCJdID0gXCJpbXBvcnRcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJESVNQT1NFXCJdID0gXCJkaXNwb3NlXCI7XG5cdHJldHVybiBXUmVmbGVjdEFjdGlvbjtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvY29yZS9UcmFuc3BvcnRDb3JlLnRzXG52YXIgVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyA9IHtcblx0XCJ3c1wiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldFwiOiBcIndlYnNvY2tldFwiLFxuXHRcInNvY2tldGlvXCI6IFwic29ja2V0LWlvXCIsXG5cdFwic2VydmljZVwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic3dcIjogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic2VydmljZS13b3JrZXItaG9zdFwiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwicmluZy1idWZmZXJcIjogXCJhdG9taWNzXCJcbn07XG5mdW5jdGlvbiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KSB7XG5cdGNvbnN0IHJhdyA9IFN0cmluZyh0cmFuc3BvcnQgPz8gXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghcmF3KSByZXR1cm4gXCJpbnRlcm5hbFwiO1xuXHRyZXR1cm4gVFJBTlNQT1JUX1RZUEVfQUxJQVNFU1tyYXddID8/IHJhdztcbn1cbmZ1bmN0aW9uIGRldGVjdFRyYW5zcG9ydFR5cGUkMSh0cmFuc3BvcnQpIHtcblx0aWYgKHR5cGVvZiB0cmFuc3BvcnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXModHJhbnNwb3J0KTtcblx0aWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgV29ya2VyKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSByZXR1cm4gXCJzaGFyZWQtd29ya2VyXCI7XG5cdGlmICh0eXBlb2YgTWVzc2FnZVBvcnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgTWVzc2FnZVBvcnQpIHJldHVybiBcIm1lc3NhZ2UtcG9ydFwiO1xuXHRpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgcmV0dXJuIFwiYnJvYWRjYXN0XCI7XG5cdGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkgcmV0dXJuIFwid2Vic29ja2V0XCI7XG5cdGlmICh0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgUlRDRGF0YUNoYW5uZWwpIHJldHVybiBcInJ0Yy1kYXRhXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCAmJiB0eXBlb2YgdHJhbnNwb3J0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0cmFuc3BvcnQucG9zdE1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0cmFuc3BvcnQub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikgcmV0dXJuIFwiY2hyb21lLXBvcnRcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zcG9ydE1ldGEodHJhbnNwb3J0KSB7XG5cdGNvbnN0IHR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlJDEodHJhbnNwb3J0KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlLFxuXHRcdHN1cHBvcnRzOiB7XG5cdFx0XHRcIndvcmtlclwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNoYXJlZC13b3JrZXJcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlcnZpY2Utd29ya2VyXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IHRydWUsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJicm9hZGNhc3RcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IGZhbHNlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJtZXNzYWdlLXBvcnRcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdFwid2Vic29ja2V0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1ydW50aW1lXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtdGFic1wiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1wb3J0XCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJjaHJvbWUtZXh0ZXJuYWxcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJzb2NrZXQtaW9cIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJydGMtZGF0YVwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJhdG9taWNzXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInNlbGZcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0XCJpbnRlcm5hbFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH1cblx0XHR9W3R5cGVdXG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdHJldHVybiAobXNnLCB0cmFuc2ZlcikgPT4ge1xuXHRcdGNvbnN0IHRyYW5zZmVyYWJsZSA9IHRyYW5zZmVyID8/IG1zZz8udHJhbnNmZXJhYmxlID8/IFtdO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdvcmtlcikge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSB7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5wb3N0TWVzc2FnZShkYXRhLCB7IHRyYW5zZmVyOiB0cmFuc2ZlcmFibGUgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHtcblx0XHRcdHRyYW5zcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuXHRcdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkgdHJhbnNwb3J0LnNlbmQoZGF0YSk7XG5cdFx0XHRcdGVsc2UgdHJhbnNwb3J0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUudGFicykge1xuXHRcdFx0XHRjb25zdCB0YWJJZCA9IG9wdGlvbnM/LnRhYklkID8/IG1zZz8uX3RhYklkO1xuXHRcdFx0XHRpZiAodGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiSWQsIGRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1wb3J0XCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnROYW1lID0gb3B0aW9ucz8ucG9ydE5hbWUgPz8gbXNnPy5fcG9ydE5hbWU7XG5cdFx0XHRcdGlmIChwb3J0TmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhYklkID0gb3B0aW9ucz8udGFiSWQgPz8gbXNnPy5fdGFiSWQ7XG5cdFx0XHRcdFx0KHRhYklkICE9IG51bGwgJiYgY2hyb21lLnRhYnM/LmNvbm5lY3QgPyBjaHJvbWUudGFicy5jb25uZWN0KHRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pKS5wb3N0TWVzc2FnZShkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkID0gb3B0aW9ucz8uZXh0ZXJuYWxJZCA/PyBtc2c/Ll9leHRlcm5hbElkO1xuXHRcdFx0XHRpZiAoZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZXh0ZXJuYWxJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItY2xpZW50XCIpIHtcblx0XHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKHJlZykgPT4ge1xuXHRcdFx0XHRyZWcuYWN0aXZlPy5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcmFibGUpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItaG9zdFwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIGNsaWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0Y29uc3QgY2xpZW50SWQgPSBvcHRpb25zPy5jbGllbnRJZCA/PyBtc2c/Ll9jbGllbnRJZDtcblx0XHRcdFx0aWYgKGNsaWVudElkKSBjbGllbnRzLmdldChjbGllbnRJZCkudGhlbigoYykgPT4gYz8ucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdGVsc2UgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSkudGhlbigoYWxsKSA9PiB7XG5cdFx0XHRcdFx0YWxsLmZvckVhY2goKGMpID0+IGMucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXJhYmxlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcInNlbGZcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIFwicG9zdE1lc3NhZ2VcIiBpbiBzZWxmKSBzZWxmLnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0cmFuc3BvcnQsIG9uTWVzc2FnZSwgb25FcnJvciwgb25DbG9zZSwgb3B0aW9ucykge1xuXHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0ICYmIHR5cGVvZiBlLmRhdGEgPT09IFwic3RyaW5nXCIpIHRyeSB7XG5cdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdG9uRXJyb3I/LihlcnIpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXZWJTb2NrZXQgJiYgZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIG9uTWVzc2FnZShlLmRhdGEpO1xuXHRcdGVsc2Ugb25NZXNzYWdlKGUuZGF0YSk7XG5cdH07XG5cdGNvbnN0IGVyckhhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdG9uRXJyb3I/LihuZXcgRXJyb3IoZS5tZXNzYWdlID8/IFwiVHJhbnNwb3J0IGVycm9yXCIpKTtcblx0fTtcblx0Y29uc3QgY2xvc2VIYW5kbGVyID0gKCkgPT4gb25DbG9zZT8uKCk7XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXb3JrZXIpIHtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0eXBlb2YgU2hhcmVkV29ya2VyICE9PSBcInVuZGVmaW5lZFwiICYmIHRyYW5zcG9ydCBpbnN0YW5jZW9mIFNoYXJlZFdvcmtlcikge1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LnBvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnBvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQuc3RhcnQoKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0KSB7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdFx0dHJhbnNwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xuXHRcdFx0aWYgKHRyYW5zcG9ydC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikgdHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0fTtcblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS10YWJzXCIpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUucnVudGltZSkge1xuXHRcdFx0Y29uc3QgdGFiSWQgPSBvcHRpb25zPy50YWJJZDtcblx0XHRcdGlmICh0YWJJZCAhPSBudWxsKSByZXR1cm4gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCAobXNnKSA9PiBvbk1lc3NhZ2UobXNnKSk7XG5cdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0b25NZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0fVxuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnM/LnBvcnROYW1lO1xuXHRcdFx0aWYgKHBvcnROYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogcG9ydE5hbWUgfSk7XG5cdFx0XHRcdHBvcnQub25NZXNzYWdlLmFkZExpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHRcdHBvcnQub25EaXNjb25uZWN0LmFkZExpc3RlbmVyKGNsb3NlSGFuZGxlcik7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtZXh0ZXJuYWxcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdG9uTWVzc2FnZShtc2cpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIikge1xuXHRcdGlmIChcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpIHtcblx0XHRcdG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcInNlcnZpY2Utd29ya2VyLWhvc3RcIiB8fCB0cmFuc3BvcnQgPT09IFwic2VsZlwiKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBjbGllbnRJZCA9IHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIgPyBlLnNvdXJjZT8uaWQgOiB2b2lkIDA7XG5cdFx0XHRvbk1lc3NhZ2UoY2xpZW50SWQgPyB7XG5cdFx0XHRcdC4uLmUuZGF0YSxcblx0XHRcdFx0X2NsaWVudElkOiBjbGllbnRJZFxuXHRcdFx0fSA6IGUuZGF0YSk7XG5cdFx0fTtcblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuXHR9XG5cdHJldHVybiAoKSA9PiB7fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZUxpc3RlbmVyKG9uTWVzc2FnZSwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IG9uTWVzc2FnZShtZXNzYWdlLCBzZW5kUmVzcG9uc2UsIHNlbmRlcik7XG5cdGlmIChvcHRpb25zPy5leHRlcm5hbCAmJiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbCkge1xuXHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHR9XG5cdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyKHRhYklkLCBvbk1lc3NhZ2UpIHtcblx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm4gKCkgPT4ge307XG5cdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyKSA9PiB7XG5cdFx0aWYgKHNlbmRlci50YWI/LmlkID09PSB0YWJJZCkgb25NZXNzYWdlKG1zZywgc2VuZGVyKTtcblx0fTtcblx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQodXJsLCBvcHRpb25zID0ge30pIHtcblx0bGV0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdGlmIChvcHRpb25zLmJpbmFyeVR5cGUpIHNvY2tldC5iaW5hcnlUeXBlID0gb3B0aW9ucy5iaW5hcnlUeXBlO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXHRsZXQgcmVjb25uZWN0VGltZXIgPSBudWxsO1xuXHRjb25zdCBzZW5kID0gKG1zZywgdHJhbnNmZXIpID0+IHtcblx0XHRpZiAoc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSByZXR1cm47XG5cdFx0aWYgKG1zZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhtc2cpKSBzb2NrZXQuc2VuZChtc2cpO1xuXHRcdGVsc2Ugc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobXNnKSk7XG5cdH07XG5cdGNvbnN0IHJlY29ubmVjdCA9ICgpID0+IHtcblx0XHRpZiAocmVjb25uZWN0QXR0ZW1wdHMgPj0gKG9wdGlvbnMubWF4UmVjb25uZWN0QXR0ZW1wdHMgPz8gNSkpIHJldHVybjtcblx0XHRyZWNvbm5lY3RBdHRlbXB0cysrO1xuXHRcdHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBvcHRpb25zLnByb3RvY29scyk7XG5cdFx0aWYgKG9wdGlvbnMuYmluYXJ5VHlwZSkgc29ja2V0LmJpbmFyeVR5cGUgPSBvcHRpb25zLmJpbmFyeVR5cGU7XG5cdH07XG5cdGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuXHRcdGlmIChyZWNvbm5lY3RUaW1lcikgY2xlYXJUaW1lb3V0KHJlY29ubmVjdFRpbWVyKTtcblx0XHRzb2NrZXQuY2xvc2UoKTtcblx0fTtcblx0aWYgKG9wdGlvbnMucmVjb25uZWN0KSBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IHtcblx0XHRyZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQocmVjb25uZWN0LCBvcHRpb25zLnJlY29ubmVjdEludGVydmFsID8/IDNlMyk7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHNvY2tldCxcblx0XHRzZW5kLFxuXHRcdGxpc3RlbjogKGhhbmRsZXIpID0+IHtcblx0XHRcdGNvbnN0IGggPSAoZSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgdHJ5IHtcblx0XHRcdFx0XHRoYW5kbGVyKEpTT04ucGFyc2UoZS5kYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0ZWxzZSBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHR9O1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoKTtcblx0XHR9LFxuXHRcdHJlY29ubmVjdCxcblx0XHRjbG9zZVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0VHJhbnNwb3J0KGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kOiAobXNnKSA9PiBjaGFubmVsLnBvc3RNZXNzYWdlKG1zZyksXG5cdFx0bGlzdGVuOiAoaGFuZGxlcikgPT4ge1xuXHRcdFx0Y29uc3QgaCA9IChlKSA9PiBoYW5kbGVyKGUuZGF0YSk7XG5cdFx0XHRjaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaCk7XG5cdFx0fSxcblx0XHRjbG9zZTogKCkgPT4gY2hhbm5lbC5jbG9zZSgpXG5cdH07XG59XG52YXIgVHJhbnNwb3J0Q29yZUZhY3RvcnkgPSB7XG5cdGNyZWF0ZVNlbmRlcjogY3JlYXRlVHJhbnNwb3J0U2VuZGVyLFxuXHRjcmVhdGVMaXN0ZW5lcjogY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsXG5cdGRldGVjdFR5cGU6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0Z2V0TWV0YTogZ2V0VHJhbnNwb3J0TWV0YSxcblx0Y2hyb21lOiB7XG5cdFx0Y3JlYXRlTGlzdGVuZXI6IGNyZWF0ZUNocm9tZUxpc3RlbmVyLFxuXHRcdGNyZWF0ZVRhYnNMaXN0ZW5lcjogY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyXG5cdH0sXG5cdHdlYnNvY2tldDogY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LFxuXHRicm9hZGNhc3Q6IGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydFxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvb2JzZXJ2YWJsZS9PYnNlcnZhYmxlLnRzXG52YXIgQmFzZVN1YnNjcmlwdGlvbiA9IGNsYXNzIHtcblx0X3Vuc3Vic2NyaWJlO1xuXHRfY2xvc2VkID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF91bnN1YnNjcmliZSkge1xuXHRcdHRoaXMuX3Vuc3Vic2NyaWJlID0gX3Vuc3Vic2NyaWJlO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHR1bnN1YnNjcmliZSgpIHtcblx0XHRpZiAoIXRoaXMuX2Nsb3NlZCkge1xuXHRcdFx0dGhpcy5fY2xvc2VkID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG59O1xudmFyIE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF9wcm9kdWNlcjtcblx0Y29uc3RydWN0b3IoX3Byb2R1Y2VyKSB7XG5cdFx0dGhpcy5fcHJvZHVjZXIgPSBfcHJvZHVjZXI7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyT3JOZXh0LCBvcHRzKSB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0ID8/IHt9O1xuXHRcdGNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0b3B0cz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gY3RybC5hYm9ydCgpKTtcblx0XHRsZXQgYWN0aXZlID0gdHJ1ZTtcblx0XHRsZXQgY2xlYW51cDtcblx0XHRjb25zdCBkb0NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRhY3RpdmUgPSBmYWxzZTtcblx0XHRcdGN0cmwuYWJvcnQoKTtcblx0XHRcdGNsZWFudXA/LigpO1xuXHRcdH07XG5cdFx0Y29uc3Qgc3Vic2NyaWJlciA9IHtcblx0XHRcdG5leHQ6ICh2KSA9PiBhY3RpdmUgJiYgb2JzZXJ2ZXIubmV4dD8uKHYpLFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGlmIChhY3RpdmUpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5lcnJvcj8uKGUpO1xuXHRcdFx0XHRcdGRvQ2xlYW51cCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0aWYgKGFjdGl2ZSkge1xuXHRcdFx0XHRcdG9ic2VydmVyLmNvbXBsZXRlPy4oKTtcblx0XHRcdFx0XHRkb0NsZWFudXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNpZ25hbDogY3RybC5zaWduYWwsXG5cdFx0XHRnZXQgYWN0aXZlKCkge1xuXHRcdFx0XHRyZXR1cm4gYWN0aXZlICYmICFjdHJsLnNpZ25hbC5hYm9ydGVkO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dHJ5IHtcblx0XHRcdGNsZWFudXAgPSB0aGlzLl9wcm9kdWNlcihzdWJzY3JpYmVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzdWJzY3JpYmVyLmVycm9yKGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IEJhc2VTdWJzY3JpcHRpb24oZG9DbGVhbnVwKTtcblx0fVxuXHRwaXBlKC4uLm9wcykge1xuXHRcdHJldHVybiBvcHMucmVkdWNlKChzLCBvcCkgPT4gb3AocyksIHRoaXMpO1xuXHR9XG59O1xudmFyIENoYW5uZWxTdWJqZWN0ID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X21heEJ1ZmZlcjtcblx0X3JlcGxheTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbWF4QnVmZmVyID0gb3B0aW9ucy5idWZmZXJTaXplID8/IDA7XG5cdFx0dGhpcy5fcmVwbGF5ID0gb3B0aW9ucy5yZXBsYXlPblN1YnNjcmliZSA/PyBmYWxzZTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX21heEJ1ZmZlciA+IDApIHtcblx0XHRcdHRoaXMuX2J1ZmZlci5wdXNoKHZhbHVlKTtcblx0XHRcdGlmICh0aGlzLl9idWZmZXIubGVuZ3RoID4gdGhpcy5fbWF4QnVmZmVyKSB0aGlzLl9idWZmZXIuc2hpZnQoKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRlcnJvcihlcnIpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdH1cblx0Y29tcGxldGUoKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKHRoaXMuX3JlcGxheSkgZm9yIChjb25zdCB2IG9mIHRoaXMuX2J1ZmZlcikgdHJ5IHtcblx0XHRcdG9icy5uZXh0Py4odik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b2JzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXIuYXQoLTEpO1xuXHR9XG5cdGdldEJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2J1ZmZlcl07XG5cdH1cblx0Z2V0IHN1YnNjcmliZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3Vicy5zaXplO1xuXHR9XG59O1xudmFyIFJlcGxheUNoYW5uZWxTdWJqZWN0ID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUgPSAxKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0YnVmZmVyU2l6ZSxcblx0XHRcdHJlcGxheU9uU3Vic2NyaWJlOiB0cnVlXG5cdFx0fSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3NlbmQ7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdG5leHQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQobXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmICghdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGUoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl90cmFuc3BvcnQsIChkKSA9PiB0aGlzLl9oYW5kbGUoZCksIChlKSA9PiB0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuZXJyb3I/LihlKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQpO1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcblx0XHRjb25zdCBvbk1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJzY3JpYmVyLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgcmVzcG9uZCA9IChyZXN1bHQsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRcdHNlbmQoe1xuXHRcdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdFx0XHR9LCB0cmFuc2Zlcik7XG5cdFx0XHR9O1xuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZmxlY3RIYW5kbGVyKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiKSB7XG5cdFx0XHRzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkgcmVzcG9uZChyZXN1bHQucmVzcG9uc2UsIHJlc3VsdC50cmFuc2Zlcik7XG5cdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHR9O1xufVxudmFyIE1lc3NhZ2VPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBDaGFubmVsU3ViamVjdCB7XG5cdGNvbnN0cnVjdG9yKHNvdXJjZSwgbWVzc2FnZVR5cGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHNvdXJjZS5zdWJzY3JpYmUoe1xuXHRcdFx0bmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2VUeXBlIHx8IG1zZy50eXBlID09PSBtZXNzYWdlVHlwZSkgdGhpcy5uZXh0KG1zZyk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB0aGlzLmVycm9yKGUpLFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHRoaXMuY29tcGxldGUoKVxuXHRcdH0pO1xuXHR9XG59O1xudmFyIGZpbHRlciA9IChwcmVkKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gcHJlZCh2KSAmJiBzdWIubmV4dCh2KSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciBtYXAgPSAoZm4pID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiBzdWIubmV4dChmbih2KSksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgdGFrZSA9IChuKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCBjID0gMDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRpZiAoYysrIDwgbikge1xuXHRcdFx0XHRzdWIubmV4dCh2KTtcblx0XHRcdFx0aWYgKGMgPj0gbikgc3ViLmNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciB0YWtlVW50aWwgPSAoc2lnbmFsKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHNzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHN1Yi5uZXh0KHYpLFxuXHRcdGVycm9yOiAoZSkgPT4gc3ViLmVycm9yKGUpLFxuXHRcdGNvbXBsZXRlOiAoKSA9PiBzdWIuY29tcGxldGUoKVxuXHR9KTtcblx0Y29uc3Qgc2lnID0gc2lnbmFsLnN1YnNjcmliZSh7IG5leHQ6ICgpID0+IHN1Yi5jb21wbGV0ZSgpIH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdHNzLnVuc3Vic2NyaWJlKCk7XG5cdFx0c2lnLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciBkZWJvdW5jZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgdDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRjbGVhclRpbWVvdXQodCk7XG5cdFx0XHR0ID0gc2V0VGltZW91dCgoKSA9PiBzdWIubmV4dCh2KSwgbXMpO1xuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0KTtcblx0XHRzLnVuc3Vic2NyaWJlKCk7XG5cdH07XG59KTtcbnZhciB0aHJvdHRsZSA9IChtcykgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbGFzdCA9IDA7XG5cdGNvbnN0IHMgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4ge1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChub3cgLSBsYXN0ID49IG1zKSB7XG5cdFx0XHRcdGxhc3QgPSBub3c7XG5cdFx0XHRcdHN1Yi5uZXh0KHYpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRyZXR1cm4gKCkgPT4gcy51bnN1YnNjcmliZSgpO1xufSk7XG52YXIgZnJvbUV2ZW50ID0gKHRhcmdldCwgZXZlbnQpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgaCA9IChlKSA9PiBzdWIuYWN0aXZlICYmIHN1Yi5uZXh0KGUpO1xuXHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG5cdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaCk7XG59KTtcbnZhciBmcm9tUHJvbWlzZSA9IChwcm9taXNlKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdHByb21pc2UudGhlbigodikgPT4ge1xuXHRcdHN1Yi5uZXh0KHYpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9KS5jYXRjaCgoZSkgPT4gc3ViLmVycm9yKGUpKTtcbn0pO1xudmFyIGRlbGF5ID0gKHZhbHVlLCBtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0c3ViLm5leHQodmFsdWUpO1xuXHRcdHN1Yi5jb21wbGV0ZSgpO1xuXHR9LCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG59KTtcbnZhciBpbnRlcnZhbCA9IChtcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRsZXQgbiA9IDA7XG5cdGNvbnN0IHQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzdWIubmV4dChuKyspLCBtcyk7XG5cdHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHQpO1xufSk7XG52YXIgbWVyZ2UgPSAoLi4uc291cmNlcykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCBzdWJzID0gc291cmNlcy5tYXAoKHMpID0+IHMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gc3ViLm5leHQodiksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSlcblx0fSkpO1xuXHRyZXR1cm4gKCkgPT4gc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xufSk7XG52YXIgY3JlYXRlTWVzc2FnZUlkID0gKCkgPT4gVVVJRHY0KCk7XG52YXIgbWFrZUludm9rZXIgPSAodHJhbnNwb3J0LCBoYW5kbGVyKSA9PiAoc3Vic2NyaWJlcikgPT4ge1xuXHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRyYW5zcG9ydCk7XG5cdGNvbnN0IHJlc3BvbmQgPSAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZChyZXN1bHQsIHRyYW5zZmVyKTtcblx0cmV0dXJuIGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRpZiAoIXN1YnNjcmliZXIuYWN0aXZlKSByZXR1cm47XG5cdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdH0sIChlcnIpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTtcbn07XG52YXIgbWFrZVdvcmtlckludm9rZXIgPSAod29ya2VyLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcih3b3JrZXIsIGhhbmRsZXIpO1xudmFyIG1ha2VNZXNzYWdlUG9ydEludm9rZXIgPSAocG9ydCwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIocG9ydCwgaGFuZGxlcik7XG52YXIgbWFrZUJyb2FkY2FzdEludm9rZXIgPSAobmFtZSwgaGFuZGxlcikgPT4gbWFrZUludm9rZXIobmV3IEJyb2FkY2FzdENoYW5uZWwobmFtZSksIGhhbmRsZXIpO1xudmFyIG1ha2VXZWJTb2NrZXRJbnZva2VyID0gKHVybCwgcHJvdG9jb2xzLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihuZXcgV2ViU29ja2V0KHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIgPyB1cmwgOiB1cmwuaHJlZiwgcHJvdG9jb2xzKSwgaGFuZGxlcik7XG52YXIgbWFrZUNocm9tZVJ1bnRpbWVJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwiY2hyb21lLXJ1bnRpbWVcIiwgaGFuZGxlcik7XG52YXIgbWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwic2VydmljZS13b3JrZXItY2xpZW50XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIgPSAoaGFuZGxlcikgPT4gbWFrZUludm9rZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIGhhbmRsZXIpO1xudmFyIG1ha2VTZWxmSW52b2tlciA9IChoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihcInNlbGZcIiwgaGFuZGxlcik7XG5mdW5jdGlvbiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCh0cmFuc3BvcnQsIGNoYW5uZWxOYW1lLCBoYW5kbGVyKSB7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0Y29uc3QgaW5ib3VuZCA9IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IG1ha2VJbnZva2VyKHRyYW5zcG9ydCwgaGFuZGxlcikoc3ViKSk7XG5cdHJldHVybiB7XG5cdFx0aW5ib3VuZCxcblx0XHRvdXRib3VuZDogeyBuZXh0OiBzZW5kIH0sXG5cdFx0c3Vic2NyaWJlOiAob2JzKSA9PiBpbmJvdW5kLnN1YnNjcmliZShvYnMpLFxuXHRcdHNlbmQ6ICh2YWx1ZSwgdHJhbnNmZXIpID0+IHNlbmQodmFsdWUsIHRyYW5zZmVyKVxuXHR9O1xufVxuZnVuY3Rpb24gd2hlbih0YXJnZXQsIGV2ZW50TmFtZSkge1xuXHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRcdGNvbnN0IGggPSAoZSkgPT4gc3ViLmFjdGl2ZSAmJiBzdWIubmV4dChlKTtcblx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHRcdHJldHVybiAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGgpO1xuXHR9KTtcbn1cbnZhciBPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2hhbm5lbDogKHRyYW5zcG9ydCwgbmFtZSkgPT4gbmV3IENoYW5uZWxPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSksXG5cdGludm9rZXI6ICh0cmFuc3BvcnQsIG5hbWUsIGhhbmRsZXIpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgaGFuZGxlciksXG5cdGhhbmRsZXI6ICh0cmFuc3BvcnQsIG5hbWUpID0+IGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlKHRyYW5zcG9ydCwgbmFtZSwgY3JlYXRlUmVmbGVjdEhhbmRsZXIobmFtZSkpLFxuXHRiaWRpcmVjdGlvbmFsOiBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCxcblx0ZnJvbUV2ZW50LFxuXHRmcm9tUHJvbWlzZSxcblx0ZGVsYXksXG5cdGludGVydmFsLFxuXHRtZXJnZSxcblx0d2hlblxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvSW52b2tlci50c1xuZnVuY3Rpb24gZGV0ZWN0Q29udGV4dFR5cGUoKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5EZW5vICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkZW5vXCI7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUpIHJldHVybiBcIm5vZGVcIjtcblx0Y29uc3Qgc2VydmljZVdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cdGNvbnN0IHNoYXJlZFdvcmtlclNjb3BlID0gZ2xvYmFsVGhpcy5TaGFyZWRXb3JrZXJHbG9iYWxTY29wZTtcblx0Y29uc3QgZGVkaWNhdGVkV29ya2VyU2NvcGUgPSBnbG9iYWxUaGlzLkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlO1xuXHRpZiAoc2VydmljZVdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBzZXJ2aWNlV29ya2VyU2NvcGUpIHJldHVybiBcInNlcnZpY2Utd29ya2VyXCI7XG5cdGlmIChzaGFyZWRXb3JrZXJTY29wZSAmJiBzZWxmIGluc3RhbmNlb2Ygc2hhcmVkV29ya2VyU2NvcGUpIHJldHVybiBcInNoYXJlZC13b3JrZXJcIjtcblx0aWYgKGRlZGljYXRlZFdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBkZWRpY2F0ZWRXb3JrZXJTY29wZSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lPy5pZCkge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lLnJ1bnRpbWUuZ2V0QmFja2dyb3VuZFBhZ2UgPT09IFwiZnVuY3Rpb25cIiB8fCAoY2hyb21lLnJ1bnRpbWUuZ2V0TWFuaWZlc3Q/LigpPy5iYWNrZ3JvdW5kKT8uc2VydmljZV93b3JrZXIpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUuZGV2dG9vbHMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImNocm9tZS1kZXZ0b29sc1wiO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsVGhpcz8ubG9jYXRpb24/LnByb3RvY29sID09PSBcImNocm9tZS1leHRlbnNpb246XCIpIHtcblx0XHRcdGlmICgoY2hyb21lLmV4dGVuc2lvbj8uZ2V0Vmlld3M/Lih7IHR5cGU6IFwicG9wdXBcIiB9KSA/PyBbXSkuaW5jbHVkZXMoZ2xvYmFsVGhpcykpIHJldHVybiBcImNocm9tZS1wb3B1cFwiO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXM/LmxvY2F0aW9uPy5wcm90b2NvbCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uOlwiKSByZXR1cm4gXCJjaHJvbWUtY29udGVudFwiO1xuXHR9XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIndpbmRvd1wiO1xuXHRyZXR1cm4gXCJ1bmtub3duXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSkge1xuXHRpZiAodHlwZW9mIFJUQ0RhdGFDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIHNvdXJjZSBpbnN0YW5jZW9mIFJUQ0RhdGFDaGFubmVsKSByZXR1cm4gXCJydGMtZGF0YVwiO1xuXHRjb25zdCBkZXRlY3RlZCA9IGRldGVjdFRyYW5zcG9ydFR5cGUkMShzb3VyY2UpO1xuXHRpZiAoZGV0ZWN0ZWQgJiYgZGV0ZWN0ZWQgIT09IFwiaW50ZXJuYWxcIikgcmV0dXJuIGRldGVjdGVkO1xuXHRpZiAoc291cmNlID09PSBzZWxmIHx8IHNvdXJjZSA9PT0gZ2xvYmFsVGhpcyB8fCBzb3VyY2UgPT09IFwic2VsZlwiKSByZXR1cm4gXCJzZWxmXCI7XG5cdHJldHVybiBcImludGVybmFsXCI7XG59XG5mdW5jdGlvbiBkZXRlY3RJbmNvbWluZ0NvbnRleHRUeXBlKGRhdGEpIHtcblx0aWYgKCFkYXRhKSByZXR1cm4gXCJ1bmtub3duXCI7XG5cdGlmIChkYXRhLmNvbnRleHRUeXBlKSByZXR1cm4gZGF0YS5jb250ZXh0VHlwZTtcblx0Y29uc3Qgc2VuZGVyID0gZGF0YS5zZW5kZXIgPz8gXCJcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcIndvcmtlclwiKSkgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmIChzZW5kZXIuaW5jbHVkZXMoXCJzd1wiKSB8fCBzZW5kZXIuaW5jbHVkZXMoXCJzZXJ2aWNlXCIpKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRpZiAoc2VuZGVyLmluY2x1ZGVzKFwiY2hyb21lXCIpIHx8IHNlbmRlci5pbmNsdWRlcyhcImNyeFwiKSkgcmV0dXJuIFwiY2hyb21lLWNvbnRlbnRcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcImJhY2tncm91bmRcIikpIHJldHVybiBcImNocm9tZS1iYWNrZ3JvdW5kXCI7XG5cdHJldHVybiBcInVua25vd25cIjtcbn1cbnZhciBEZWZhdWx0UmVmbGVjdCA9IHtcblx0Z2V0OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApLFxuXHRzZXQ6ICh0YXJnZXQsIHByb3AsIHZhbHVlKSA9PiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlKSxcblx0aGFzOiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApLFxuXHRhcHBseTogKHRhcmdldCwgdGhpc0FyZywgYXJncykgPT4gUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0YXJnZXQsIGFyZ3MpID0+IFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJncyksXG5cdGRlbGV0ZVByb3BlcnR5OiAodGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCksXG5cdG93bktleXM6ICh0YXJnZXQpID0+IFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCksXG5cdGdldFByb3RvdHlwZU9mOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksXG5cdHNldFByb3RvdHlwZU9mOiAodGFyZ2V0LCBwcm90bykgPT4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSxcblx0aXNFeHRlbnNpYmxlOiAodGFyZ2V0KSA9PiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpLFxuXHRwcmV2ZW50RXh0ZW5zaW9uczogKHRhcmdldCkgPT4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG59O1xudmFyIFJlcXVlc3RvciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0Z2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3ApIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5nZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuc2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKTtcblx0fVxuXHRjYWxsKHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNhbGwodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmNvbnN0cnVjdCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRpbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGFyZ2V0Q2hhbm5lbCk7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLnByb3h5KHRhcmdldENoYW5uZWwsIGJhc2VQYXRoKTtcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vblJlc3BvbnNlO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFJlc3BvbmRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0VHlwZTtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjb25maWcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpIHtcblx0XHR0aGlzLl9jaGFubmVsLmxpc3Rlbihzb3VyY2UsIG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZShuYW1lLCBvYmopIHtcblx0XHR0aGlzLl9jaGFubmVsLmV4cG9zZShuYW1lLCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldCBvbkludm9jYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwub25JbnZvY2F0aW9uO1xuXHR9XG5cdHN1YnNjcmliZUludm9jYXRpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vbkludm9jYXRpb24uc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIEJpZGlyZWN0aW9uYWxJbnZva2VyID0gY2xhc3Mge1xuXHRyZXF1ZXN0b3I7XG5cdHJlc3BvbmRlcjtcblx0X2NvbnRleHRUeXBlO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNvbmZpZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLnJlcXVlc3RvciA9IG5ldyBSZXF1ZXN0b3IoY29uZmlnKTtcblx0XHR0aGlzLnJlc3BvbmRlciA9IG5ldyBSZXNwb25kZXIoY29uZmlnKTtcblx0fVxuXHRjb25uZWN0KHRhcmdldCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNvbm5lY3QodGFyZ2V0KTtcblx0XHR0aGlzLnJlc3BvbmRlci5saXN0ZW4odGFyZ2V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRleHBvc2UobmFtZSwgb2JqKSB7XG5cdFx0dGhpcy5yZXNwb25kZXIuZXhwb3NlKG5hbWUsIG9iaik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y3JlYXRlUHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCk7XG5cdH1cblx0aW1wb3J0TW9kdWxlKHRhcmdldENoYW5uZWwsIHVybCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Rvci5pbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKTtcblx0fVxuXHRnZXQgY29udGV4dFR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHRUeXBlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMucmVxdWVzdG9yLmNsb3NlKCk7XG5cdFx0dGhpcy5yZXNwb25kZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RvcihjaGFubmVsLCBjb25maWcpIHtcblx0cmV0dXJuIG5ldyBSZXF1ZXN0b3Ioe1xuXHRcdGNoYW5uZWwsXG5cdFx0Li4uY29uZmlnXG5cdH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFJlc3BvbmRlcih7XG5cdFx0Y2hhbm5lbCxcblx0XHQuLi5jb25maWdcblx0fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IEJpZGlyZWN0aW9uYWxJbnZva2VyKHtcblx0XHRjaGFubmVsLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KTtcbn1cbmZ1bmN0aW9uIHNldHVwSW52b2tlcihjaGFubmVsLCB0YXJnZXQsIGNvbmZpZykge1xuXHRyZXR1cm4gY3JlYXRlSW52b2tlcihjaGFubmVsLCBjb25maWcpLmNvbm5lY3QodGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIGF1dG9JbnZva2VyKGNoYW5uZWwsIGNvbmZpZykge1xuXHRjb25zdCBpbnZva2VyID0gY3JlYXRlSW52b2tlcihjaGFubmVsLCB7XG5cdFx0YXV0b0RldGVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fSk7XG5cdHN3aXRjaCAoZGV0ZWN0Q29udGV4dFR5cGUoKSkge1xuXHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRjYXNlIFwic2VydmljZS13b3JrZXJcIjpcblx0XHRjYXNlIFwic2hhcmVkLXdvcmtlclwiOlxuXHRcdFx0aW52b2tlci5jb25uZWN0KHNlbGYpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNocm9tZS1jb250ZW50XCI6XG5cdFx0Y2FzZSBcImNocm9tZS1iYWNrZ3JvdW5kXCI6XG5cdFx0Y2FzZSBcImNocm9tZS1wb3B1cFwiOiBpbnZva2VyLmNvbm5lY3QoXCJjaHJvbWUtcnVudGltZVwiKTtcblx0fVxuXHRyZXR1cm4gaW52b2tlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvcHJveHkvUHJveHkudHNcbnZhciBQUk9YWV9NQVJLRVIgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eVwiKTtcbnZhciBQUk9YWV9JTlRFUk5BTFMgPSBTeW1ib2wuZm9yKFwidW5pZm9ybS5wcm94eS5pbnRlcm5hbHNcIik7XG52YXIgUmVtb3RlUHJveHlIYW5kbGVyID0gY2xhc3Mge1xuXHRfaW52b2tlcjtcblx0X2NvbmZpZztcblx0X2NoaWxkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdHJ1Y3RvcihfaW52b2tlciwgY29uZmlnKSB7XG5cdFx0dGhpcy5faW52b2tlciA9IF9pbnZva2VyO1xuXHRcdHRoaXMuX2NvbmZpZyA9IHtcblx0XHRcdGNoYW5uZWw6IGNvbmZpZy5jaGFubmVsLFxuXHRcdFx0YmFzZVBhdGg6IGNvbmZpZy5iYXNlUGF0aCA/PyBbXSxcblx0XHRcdGludm9rZXI6IF9pbnZva2VyLFxuXHRcdFx0Y2FjaGU6IGNvbmZpZy5jYWNoZSA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gM2U0XG5cdFx0fTtcblx0fVxuXHRnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuXHRcdGNvbnN0IHByb3BTdHIgPSBTdHJpbmcocHJvcCk7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX01BUktFUikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHByb3AgPT09IFBST1hZX0lOVEVSTkFMUykgcmV0dXJuIHRoaXMuX2NvbmZpZztcblx0XHRpZiAocHJvcCA9PT0gJHJlcXVlc3RIYW5kbGVyKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocHJvcCA9PT0gJGRlc2NyaXB0b3IpIHJldHVybiB0aGlzLl9nZXREZXNjcmlwdG9yKCk7XG5cdFx0aWYgKHByb3AgPT09IFwidGhlblwiIHx8IHByb3AgPT09IFwiY2F0Y2hcIiB8fCBwcm9wID09PSBcImZpbmFsbHlcIikgcmV0dXJuIHZvaWQgMDtcblx0XHRpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiB2b2lkIDA7XG5cdFx0aWYgKHByb3AgPT09IFwiJHBhdGhcIikgcmV0dXJuIHRoaXMuX2NvbmZpZy5iYXNlUGF0aDtcblx0XHRpZiAocHJvcCA9PT0gXCIkY2hhbm5lbFwiKSByZXR1cm4gdGhpcy5fY29uZmlnLmNoYW5uZWw7XG5cdFx0aWYgKHByb3AgPT09IFwiJGRlc2NyaXB0b3JcIikgcmV0dXJuIHRoaXMuX2dldERlc2NyaXB0b3IoKTtcblx0XHRpZiAocHJvcCA9PT0gXCIkaW52b2tlXCIpIHJldHVybiB0aGlzLl9pbnZva2VyO1xuXHRcdGNvbnN0IGNoaWxkUGF0aCA9IFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIHByb3BTdHJdO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUgJiYgdGhpcy5fY2hpbGRDYWNoZS5oYXMocHJvcFN0cikpIHJldHVybiB0aGlzLl9jaGlsZENhY2hlLmdldChwcm9wU3RyKTtcblx0XHRjb25zdCBjaGlsZFByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkodGhpcy5faW52b2tlciwge1xuXHRcdFx0Li4udGhpcy5fY29uZmlnLFxuXHRcdFx0YmFzZVBhdGg6IGNoaWxkUGF0aFxuXHRcdH0pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY2FjaGUpIHRoaXMuX2NoaWxkQ2FjaGUuc2V0KHByb3BTdHIsIGNoaWxkUHJveHkpO1xuXHRcdHJldHVybiBjaGlsZFByb3h5O1xuXHR9XG5cdHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0dGhpcy5faW52b2tlcihXUmVmbGVjdEFjdGlvbi5TRVQsIFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIFN0cmluZyhwcm9wKV0sIFt2YWx1ZV0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkFQUExZLCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldCwgYXJncywgbmV3VGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNULCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFthcmdzXSk7XG5cdH1cblx0aGFzKHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLkhBUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbcHJvcF0pO1xuXHR9XG5cdGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCkge1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZLCBbLi4udGhpcy5fY29uZmlnLmJhc2VQYXRoLCBTdHJpbmcocHJvcCldLCBbXSk7XG5cdH1cblx0b3duS2V5cyh0YXJnZXQpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9O1xuXHR9XG5cdGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuXHRcdHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdH1cblx0c2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIHRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgW3Byb3RvXSk7XG5cdH1cblx0aXNFeHRlbnNpYmxlKHRhcmdldCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUywgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbXSk7XG5cdH1cblx0X2dldERlc2NyaXB0b3IoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdGg6IHRoaXMuX2NvbmZpZy5iYXNlUGF0aCxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NvbmZpZy5jaGFubmVsLFxuXHRcdFx0cHJpbWl0aXZlOiBmYWxzZVxuXHRcdH07XG5cdH1cbn07XG52YXIgRGlzcGF0Y2hQcm94eUhhbmRsZXIgPSBjbGFzcyB7XG5cdF9kaXNwYXRjaDtcblx0Y29uc3RydWN0b3IoX2Rpc3BhdGNoKSB7XG5cdFx0dGhpcy5fZGlzcGF0Y2ggPSBfZGlzcGF0Y2g7XG5cdH1cblx0Z2V0KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uR0VULCBhcmdzKTtcblx0fVxuXHRzZXQoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5TRVQsIGFyZ3MpO1xuXHR9XG5cdGhhcyguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkhBUywgYXJncyk7XG5cdH1cblx0ZGVsZXRlUHJvcGVydHkoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5ERUxFVEVfUFJPUEVSVFksIGFyZ3MpO1xuXHR9XG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvciguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUiwgYXJncyk7XG5cdH1cblx0Z2V0UHJvdG90eXBlT2YoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GLCBhcmdzKTtcblx0fVxuXHRzZXRQcm90b3R5cGVPZiguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0YsIGFyZ3MpO1xuXHR9XG5cdGlzRXh0ZW5zaWJsZSguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLklTX0VYVEVOU0lCTEUsIGFyZ3MpO1xuXHR9XG5cdHByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uUFJFVkVOVF9FWFRFTlNJT05TLCBhcmdzKTtcblx0fVxuXHRvd25LZXlzKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVMsIGFyZ3MpID8/IFtdO1xuXHR9XG5cdGFwcGx5KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uQVBQTFksIGFyZ3MpO1xuXHR9XG5cdGNvbnN0cnVjdCguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkNPTlNUUlVDVCwgYXJncyk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCBjb25maWcpIHtcblx0Y29uc3QgZm4gPSBmdW5jdGlvbigpIHt9O1xuXHRjb25zdCBoYW5kbGVyID0gbmV3IFJlbW90ZVByb3h5SGFuZGxlcihpbnZva2VyLCBjb25maWcpO1xuXHRyZXR1cm4gbmV3IFByb3h5KGZuLCBoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwpIHtcblx0aWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0aWYgKGRlc2NyaXB0b3IucHJpbWl0aXZlKSByZXR1cm4gZGVzY3JpcHRvcjtcblx0Y29uc3QgY2FjaGVkID0gZGVzY01hcC5nZXQoZGVzY3JpcHRvcik7XG5cdGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cdGNvbnN0IHByb3h5ID0gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvci5jaGFubmVsID8/IFwidW5rbm93blwiLFxuXHRcdGJhc2VQYXRoOiBkZXNjcmlwdG9yLnBhdGggPz8gW11cblx0fSk7XG5cdGRlc2NNYXAuc2V0KGRlc2NyaXB0b3IsIHByb3h5KTtcblx0d3JhcE1hcC5zZXQocHJveHksIGRlc2NyaXB0b3IpO1xuXHRyZXR1cm4gcHJveHk7XG59XG5mdW5jdGlvbiBpc1JlbW90ZVByb3h5KHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiBSZWZsZWN0LmdldCh2YWx1ZSwgUFJPWFlfTUFSS0VSKSA9PT0gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRQcm94eURlc2NyaXB0b3IodmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB2YWx1ZS4kZGVzY3JpcHRvciA/PyBudWxsO1xufVxuZnVuY3Rpb24gZ2V0UHJveHlJbnRlcm5hbHModmFsdWUpIHtcblx0aWYgKCFpc1JlbW90ZVByb3h5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxzID0gUmVmbGVjdC5nZXQodmFsdWUsIFBST1hZX0lOVEVSTkFMUyk7XG5cdFx0aWYgKCFpbnRlcm5hbHMgfHwgdHlwZW9mIGludGVybmFscyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIGludGVybmFscztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUV4cG9zZUhhbmRsZXIodGFyZ2V0LCByZWZsZWN0KSB7XG5cdHJldHVybiBjcmVhdGVPYmplY3RIYW5kbGVyKHRhcmdldCwgcmVmbGVjdCk7XG59XG5mdW5jdGlvbiBjcmVhdGVTZW5kZXJQcm94eShzZW5kZXIsIGJhc2VQYXRoID0gW10pIHtcblx0Y29uc3QgaW52b2tlciA9IChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRyZXR1cm4gc2VuZGVyLnJlcXVlc3Qoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLmNoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBzZW5kZXIuc2VuZGVySWQgPz8gXCJwcm94eVwiLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YXJnc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXHRyZXR1cm4gY3JlYXRlUmVtb3RlUHJveHkoaW52b2tlciwge1xuXHRcdGNoYW5uZWw6IHNlbmRlci5jaGFubmVsTmFtZSxcblx0XHRiYXNlUGF0aFxuXHR9KTtcbn1cbnZhciBQcm94eUJ1aWxkZXIgPSBjbGFzcyB7XG5cdF9jb25maWcgPSB7fTtcblx0X2ludm9rZXIgPSBudWxsO1xuXHRjaGFubmVsKG5hbWUpIHtcblx0XHR0aGlzLl9jb25maWcuY2hhbm5lbCA9IG5hbWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0cGF0aChiYXNlUGF0aCkge1xuXHRcdHRoaXMuX2NvbmZpZy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGludm9rZXIoZm4pIHtcblx0XHR0aGlzLl9pbnZva2VyID0gZm47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGltZW91dChtcykge1xuXHRcdHRoaXMuX2NvbmZpZy50aW1lb3V0ID0gbXM7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y2FjaGUoZW5hYmxlZCkge1xuXHRcdHRoaXMuX2NvbmZpZy5jYWNoZSA9IGVuYWJsZWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YnVpbGQoKSB7XG5cdFx0aWYgKCF0aGlzLl9pbnZva2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZva2VyIGlzIHJlcXVpcmVkLiBDYWxsIC5pbnZva2VyKCkgYmVmb3JlIC5idWlsZCgpXCIpO1xuXHRcdGlmICghdGhpcy5fY29uZmlnLmNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihcIkNoYW5uZWwgaXMgcmVxdWlyZWQuIENhbGwgLmNoYW5uZWwoKSBiZWZvcmUgLmJ1aWxkKClcIik7XG5cdFx0cmV0dXJuIGNyZWF0ZVJlbW90ZVByb3h5KHRoaXMuX2ludm9rZXIsIHRoaXMuX2NvbmZpZyk7XG5cdH1cbn07XG5mdW5jdGlvbiBwcm94eUJ1aWxkZXIoKSB7XG5cdHJldHVybiBuZXcgUHJveHlCdWlsZGVyKCk7XG59XG52YXIgbWFrZVJlcXVlc3RQcm94eSA9IHdyYXBEZXNjcmlwdG9yO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL2ludGVybmFsL0Nvbm5lY3Rpb25Nb2RlbC50c1xuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpIHtcblx0cmV0dXJuIFtcblx0XHRwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdHBhcmFtcy5zZW5kZXIsXG5cdFx0cGFyYW1zLnRyYW5zcG9ydFR5cGUsXG5cdFx0cGFyYW1zLmRpcmVjdGlvblxuXHRdLmpvaW4oXCI6OlwiKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Q29ubmVjdGlvbnMoY29ubmVjdGlvbnMsIHF1ZXJ5ID0ge30pIHtcblx0Y29uc3QgaW5jbHVkZUNsb3NlZCA9IHF1ZXJ5LmluY2x1ZGVDbG9zZWQgPz8gZmFsc2U7XG5cdGNvbnN0IGRlc2lyZWRTdGF0dXMgPSBxdWVyeS5zdGF0dXMgPz8gKGluY2x1ZGVDbG9zZWQgPyB2b2lkIDAgOiBcImFjdGl2ZVwiKTtcblx0cmV0dXJuIFsuLi5jb25uZWN0aW9uc10uZmlsdGVyKChjb25uZWN0aW9uKSA9PiB7XG5cdFx0aWYgKGRlc2lyZWRTdGF0dXMgJiYgY29ubmVjdGlvbi5zdGF0dXMgIT09IGRlc2lyZWRTdGF0dXMpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gcXVlcnkuY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LmNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkubG9jYWxDaGFubmVsICYmIGNvbm5lY3Rpb24ubG9jYWxDaGFubmVsICE9PSBxdWVyeS5sb2NhbENoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IHF1ZXJ5LnJlbW90ZUNoYW5uZWwpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuc2VuZGVyICYmIGNvbm5lY3Rpb24uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBjb25uZWN0aW9uLnRyYW5zcG9ydFR5cGUgIT09IHF1ZXJ5LnRyYW5zcG9ydFR5cGUpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocXVlcnkuZGlyZWN0aW9uICYmIGNvbm5lY3Rpb24uZGlyZWN0aW9uICE9PSBxdWVyeS5kaXJlY3Rpb24pIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkuc29ydCgoYSwgYikgPT4gYi51cGRhdGVkQXQgLSBhLnVwZGF0ZWRBdCk7XG59XG52YXIgQ29ubmVjdGlvblJlZ2lzdHJ5ID0gY2xhc3Mge1xuXHRfY3JlYXRlSWQ7XG5cdF9lbWl0RXZlbnQ7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0cnVjdG9yKF9jcmVhdGVJZCwgX2VtaXRFdmVudCkge1xuXHRcdHRoaXMuX2NyZWF0ZUlkID0gX2NyZWF0ZUlkO1xuXHRcdHRoaXMuX2VtaXRFdmVudCA9IF9lbWl0RXZlbnQ7XG5cdH1cblx0cmVnaXN0ZXIocGFyYW1zKSB7XG5cdFx0Y29uc3Qga2V5ID0gY3JlYXRlQ29ubmVjdGlvbktleShwYXJhbXMpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLl9jb25uZWN0aW9ucy5nZXQoa2V5KTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGV4aXN0aW5nLnVwZGF0ZWRBdCA9IG5vdztcblx0XHRcdGV4aXN0aW5nLnN0YXR1cyA9IFwiYWN0aXZlXCI7XG5cdFx0XHRleGlzdGluZy5tZXRhZGF0YSA9IHtcblx0XHRcdFx0Li4uZXhpc3RpbmcubWV0YWRhdGEsXG5cdFx0XHRcdC4uLnBhcmFtcy5tZXRhZGF0YVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBleGlzdGluZztcblx0XHR9XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiB0aGlzLl9jcmVhdGVJZCgpLFxuXHRcdFx0bG9jYWxDaGFubmVsOiBwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogcGFyYW1zLnJlbW90ZUNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHBhcmFtcy5zZW5kZXIsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBwYXJhbXMudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogcGFyYW1zLmRpcmVjdGlvbixcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGNyZWF0ZWRBdDogbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRtZXRhZGF0YTogcGFyYW1zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9ucy5zZXQoa2V5LCBjb25uZWN0aW9uKTtcblx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y29ubmVjdGlvbixcblx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbm5lY3Rpb247XG5cdH1cblx0bWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBheWxvYWQpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbm5lY3Rpb24ubGFzdE5vdGlmeUF0ID0gbm93O1xuXHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdHRoaXMuX2VtaXRFdmVudD8uKHtcblx0XHRcdHR5cGU6IFwibm90aWZpZWRcIixcblx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHR0aW1lc3RhbXA6IG5vdyxcblx0XHRcdHBheWxvYWRcblx0XHR9KTtcblx0fVxuXHRjbG9zZUJ5Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcblx0XHRcdGlmIChjb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCAhPT0gY2hhbm5lbCAmJiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwgIT09IGNoYW5uZWwpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGNvbm5lY3Rpb24uc3RhdHVzID09PSBcImNsb3NlZFwiKSBjb250aW51ZTtcblx0XHRcdGNvbm5lY3Rpb24uc3RhdHVzID0gXCJjbG9zZWRcIjtcblx0XHRcdGNvbm5lY3Rpb24udXBkYXRlZEF0ID0gbm93O1xuXHRcdFx0dGhpcy5fZW1pdEV2ZW50Py4oe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjb25uZWN0aW9uLFxuXHRcdFx0XHR0aW1lc3RhbXA6IG5vd1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlQWxsKCkge1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG5cdFx0XHRpZiAoY29ubmVjdGlvbi5zdGF0dXMgPT09IFwiY2xvc2VkXCIpIGNvbnRpbnVlO1xuXHRcdFx0Y29ubmVjdGlvbi5zdGF0dXMgPSBcImNsb3NlZFwiO1xuXHRcdFx0Y29ubmVjdGlvbi51cGRhdGVkQXQgPSBub3c7XG5cdFx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiBxdWVyeUNvbm5lY3Rpb25zKHRoaXMuX2Nvbm5lY3Rpb25zLnZhbHVlcygpLCBxdWVyeSk7XG5cdH1cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCldO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmNsZWFyKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvVW5pZmllZENoYW5uZWwudHNcbnZhciBVbmlmaWVkQ2hhbm5lbCA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF9jb250ZXh0VHlwZTtcblx0X2NvbmZpZztcblx0X3RyYW5zcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdF9jb25uZWN0aW9uRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMjAwIH0pO1xuXHRfY29ubmVjdGlvblJlZ2lzdHJ5ID0gbmV3IENvbm5lY3Rpb25SZWdpc3RyeSgoKSA9PiBVVUlEdjQoKSwgKGV2ZW50KSA9PiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLm5leHQoZXZlbnQpKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRfaW5ib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X291dGJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfaW52b2NhdGlvbnMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9yZXNwb25zZXMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9leHBvc2VkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3Byb3h5Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcblx0X19nZXRQcml2YXRlKGtleSkge1xuXHRcdHJldHVybiB0aGlzW2tleV07XG5cdH1cblx0X19zZXRQcml2YXRlKGtleSwgdmFsdWUpIHtcblx0XHR0aGlzW2tleV0gPSB2YWx1ZTtcblx0fVxuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHRjb25zdCBjZmcgPSB0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBjb25maWcgfSA6IGNvbmZpZztcblx0XHR0aGlzLl9uYW1lID0gY2ZnLm5hbWU7XG5cdFx0dGhpcy5fY29udGV4dFR5cGUgPSBjZmcuYXV0b0RldGVjdCAhPT0gZmFsc2UgPyBkZXRlY3RDb250ZXh0VHlwZSgpIDogXCJ1bmtub3duXCI7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY2ZnLm5hbWUsXG5cdFx0XHRhdXRvRGV0ZWN0OiBjZmcuYXV0b0RldGVjdCA/PyB0cnVlLFxuXHRcdFx0dGltZW91dDogY2ZnLnRpbWVvdXQgPz8gM2U0LFxuXHRcdFx0cmVmbGVjdDogY2ZnLnJlZmxlY3QgPz8gRGVmYXVsdFJlZmxlY3QsXG5cdFx0XHRidWZmZXJTaXplOiBjZmcuYnVmZmVyU2l6ZSA/PyAxMDAsXG5cdFx0XHRhdXRvTGlzdGVuOiBjZmcuYXV0b0xpc3RlbiA/PyB0cnVlXG5cdFx0fTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9MaXN0ZW4gJiYgdGhpcy5faXNXb3JrZXJDb250ZXh0KCkpIHRoaXMubGlzdGVuKHNlbGYpO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGV0ZWN0VHJhbnNwb3J0VHlwZSh0YXJnZXQpO1xuXHRcdGNvbnN0IHRhcmdldENoYW5uZWwgPSBvcHRpb25zLnRhcmdldENoYW5uZWwgPz8gdGhpcy5faW5mZXJUYXJnZXRDaGFubmVsKHRhcmdldCwgdHJhbnNwb3J0VHlwZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX2NyZWF0ZVRyYW5zcG9ydEJpbmRpbmcodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCB0YXJnZXRDaGFubmVsLCBvcHRpb25zKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLnNldCh0YXJnZXRDaGFubmVsLCBiaW5kaW5nKTtcblx0XHRpZiAoIXRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQgPSBiaW5kaW5nO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImNvbm5lY3RcIiB9XG5cdFx0fSk7XG5cdFx0dGhpcy5fZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgXCJjb25uZWN0XCIsIHtcblx0XHRcdGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGxpc3Rlbihzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlKHNvdXJjZSk7XG5cdFx0Y29uc3Qgc291cmNlQ2hhbm5lbCA9IG9wdGlvbnMudGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9pbmZlclRhcmdldENoYW5uZWwoc291cmNlLCB0cmFuc3BvcnRUeXBlKTtcblx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogc291cmNlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogc291cmNlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIixcblx0XHRcdG1ldGFkYXRhOiB7IHBoYXNlOiBcImxpc3RlblwiIH1cblx0XHR9KTtcblx0XHRzd2l0Y2ggKHRyYW5zcG9ydFR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRcdGNhc2UgXCJtZXNzYWdlLXBvcnRcIjpcblx0XHRcdGNhc2UgXCJicm9hZGNhc3RcIjpcblx0XHRcdFx0aWYgKG9wdGlvbnMuYXV0b1N0YXJ0ICE9PSBmYWxzZSAmJiBzb3VyY2Uuc3RhcnQpIHNvdXJjZS5zdGFydCgpO1xuXHRcdFx0XHRzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCAoKGUpID0+IGhhbmRsZXIoZS5kYXRhKSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ3ZWJzb2NrZXRcIjpcblx0XHRcdFx0c291cmNlLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgKChlKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGhhbmRsZXIoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXJ1bnRpbWVcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXRhYnNcIjpcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtc2csIHNlbmRlcikgPT4ge1xuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRhYklkICE9IG51bGwgJiYgc2VuZGVyPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXBvcnRcIjpcblx0XHRcdFx0c291cmNlPy5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1zZykgPT4ge1xuXHRcdFx0XHRcdGhhbmRsZXIobXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LigobXNnKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZlwiOlxuXHRcdFx0XHRhZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsICgoZSkgPT4gaGFuZGxlcihlLmRhdGEpKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYgKG9wdGlvbnMub25NZXNzYWdlKSBvcHRpb25zLm9uTWVzc2FnZShoYW5kbGVyKTtcblx0XHR9XG5cdFx0dGhpcy5fc2VuZFNpZ25hbFRvVGFyZ2V0KHNvdXJjZSwgdHJhbnNwb3J0VHlwZSwge1xuXHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0ZnJvbTogdGhpcy5fbmFtZSxcblx0XHRcdHRvOiBzb3VyY2VDaGFubmVsLFxuXHRcdFx0dGFiSWQ6IG9wdGlvbnMudGFiSWQsXG5cdFx0XHRleHRlcm5hbElkOiBvcHRpb25zLmV4dGVybmFsSWRcblx0XHR9LCBcIm5vdGlmeVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhdHRhY2godGFyZ2V0LCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0KHRhcmdldCwgb3B0aW9ucyk7XG5cdH1cblx0ZXhwb3NlKG5hbWUsIG9iaikge1xuXHRcdGNvbnN0IHBhdGggPSBbbmFtZV07XG5cdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHR0aGlzLl9leHBvc2VkLnNldChuYW1lLCB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0b2JqLFxuXHRcdFx0cGF0aFxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZUFsbChlbnRyaWVzKSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkgdGhpcy5leHBvc2UobmFtZSwgb2JqKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRhc3luYyBpbXBvcnQodXJsLCB0YXJnZXRDaGFubmVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFtdLCBbdXJsXSk7XG5cdH1cblx0aW52b2tlKHRhcmdldENoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0Y29uc3QgaWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChpZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMoaWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7YWN0aW9ufSBvbiAke3BhdGguam9pbihcIi5cIil9YCkpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0KTtcblx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0aWQsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLl9zZW5kKHRhcmdldENoYW5uZWwsIG1lc3NhZ2UpO1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHJlc29sdmVycy5wcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcblx0fVxuXHRnZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5HRVQsIHBhdGgsIFtwcm9wXSk7XG5cdH1cblx0c2V0KHRhcmdldENoYW5uZWwsIHBhdGgsIHByb3AsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwsIFdSZWZsZWN0QWN0aW9uLlNFVCwgcGF0aCwgW3Byb3AsIHZhbHVlXSk7XG5cdH1cblx0Y2FsbCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzID0gW10pIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgV1JlZmxlY3RBY3Rpb24uQVBQTFksIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0Y29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1QsIHBhdGgsIFthcmdzXSk7XG5cdH1cblx0cHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGggPSBbXSkge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRhcmdldENoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpO1xuXHRcdHJldHVybiB0aGlzLl9jcmVhdGVQcm94eSh0YXJnZXQsIGJhc2VQYXRoKTtcblx0fVxuXHRyZW1vdGUobW9kdWxlTmFtZSwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdHJldHVybiB0aGlzLnByb3h5KHRhcmdldENoYW5uZWwsIFttb2R1bGVOYW1lXSk7XG5cdH1cblx0d3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gdGFyZ2V0Q2hhbm5lbCA/PyBkZXNjcmlwdG9yPy5jaGFubmVsID8/IHRoaXMuX2dldERlZmF1bHRUYXJnZXQoKTtcblx0XHRcdHJldHVybiB0aGlzLmludm9rZShjaGFubmVsLCBhY3Rpb24sIHBhdGgsIGFyZ3MpO1xuXHRcdH07XG5cdFx0cmV0dXJuIHdyYXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGludm9rZXIsIHRhcmdldENoYW5uZWwgPz8gZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyB0aGlzLl9nZXREZWZhdWx0VGFyZ2V0KCkpO1xuXHR9XG5cdHN1YnNjcmliZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdG5leHQobWVzc2FnZSkge1xuXHRcdHRoaXMuX3NlbmQobWVzc2FnZS5jaGFubmVsLCBtZXNzYWdlKTtcblx0XHR0aGlzLl9vdXRib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGVtaXQodGFyZ2V0Q2hhbm5lbCwgZXZlbnRUeXBlLCBkYXRhKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH07XG5cdFx0dGhpcy5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdG5vdGlmeSh0YXJnZXRDaGFubmVsLCBwYXlsb2FkID0ge30sIHR5cGUgPSBcIm5vdGlmeVwiKSB7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KHRhcmdldENoYW5uZWwpO1xuXHRcdGlmICghYmluZGluZykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHR5cGUsIHtcblx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdC4uLnBheWxvYWRcblx0XHR9KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRnZXQgb25NZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmJvdW5kO1xuXHR9XG5cdGdldCBvbk91dGJvdW5kKCkge1xuXHRcdHJldHVybiB0aGlzLl9vdXRib3VuZDtcblx0fVxuXHRnZXQgb25JbnZvY2F0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnZvY2F0aW9ucztcblx0fVxuXHRnZXQgb25SZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVzcG9uc2VzO1xuXHR9XG5cdGdldCBvbkNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHM7XG5cdH1cblx0c3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLnN1YnNjcmliZShoYW5kbGVyKTtcblx0fVxuXHRxdWVyeUNvbm5lY3Rpb25zKHF1ZXJ5ID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnF1ZXJ5KHF1ZXJ5KTtcblx0fVxuXHRub3RpZnlDb25uZWN0aW9ucyhwYXlsb2FkID0ge30sIHF1ZXJ5ID0ge30pIHtcblx0XHRsZXQgc2VudCA9IDA7XG5cdFx0Y29uc3QgdGFyZ2V0cyA9IHRoaXMucXVlcnlDb25uZWN0aW9ucyh7XG5cdFx0XHQuLi5xdWVyeSxcblx0XHRcdHN0YXR1czogXCJhY3RpdmVcIixcblx0XHRcdGluY2x1ZGVDbG9zZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRhcmdldHMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLl90cmFuc3BvcnRzLmdldChjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwpO1xuXHRcdFx0aWYgKCFiaW5kaW5nKSBjb250aW51ZTtcblx0XHRcdHRoaXMuX2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIFwibm90aWZ5XCIsIHtcblx0XHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogY29ubmVjdGlvbi5yZW1vdGVDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9KTtcblx0XHRcdHNlbnQrKztcblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IGNvbnRleHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0VHlwZTtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fdHJhbnNwb3J0cy5rZXlzKCldO1xuXHR9XG5cdGdldCBleHBvc2VkTW9kdWxlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2V4cG9zZWQua2V5cygpXTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9tYXJrQWxsQ29ubmVjdGlvbnNDbG9zZWQoKTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgdGhpcy5fdHJhbnNwb3J0cy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YmluZGluZy5jbGVhbnVwPy4oKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdGlmIChiaW5kaW5nLnRyYW5zcG9ydFR5cGUgPT09IFwibWVzc2FnZS1wb3J0XCIgfHwgYmluZGluZy50cmFuc3BvcnRUeXBlID09PSBcImJyb2FkY2FzdFwiKSB0cnkge1xuXHRcdFx0XHRiaW5kaW5nLnRhcmdldD8uY2xvc2U/LigpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVmYXVsdFRyYW5zcG9ydCA9IG51bGw7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9yZXNwb25zZXMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmNvbXBsZXRlKCk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyZXF1ZXN0XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwgPT09IHRoaXMuX25hbWUpIHRoaXMuX2hhbmRsZVJlcXVlc3QoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlc3BvbnNlXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVJlc3BvbnNlKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJldmVudFwiOiBicmVhaztcblx0XHRcdGNhc2UgXCJzaWduYWxcIjogdGhpcy5faGFuZGxlU2lnbmFsKGRhdGEpO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlUmVzcG9uc2UoZGF0YSkge1xuXHRcdGNvbnN0IGlkID0gZGF0YS5yZXFJZCA/PyBkYXRhLmlkO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IHRoaXMuX3BlbmRpbmcuZ2V0KGlkKTtcblx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShpZCk7XG5cdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gZGF0YS5wYXlsb2FkPy5yZXN1bHQ7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3I7XG5cdFx0XHRcdGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDApIHJlc29sdmVycy5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdGVsc2UgaWYgKGRlc2NyaXB0b3IpIHJlc29sdmVycy5yZXNvbHZlKHRoaXMud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGF0YS5zZW5kZXIpKTtcblx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZSh2b2lkIDApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcmVzcG9uc2VzLm5leHQoe1xuXHRcdFx0XHRpZCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRyZXN1bHQ6IGRhdGEucGF5bG9hZD8ucmVzdWx0LFxuXHRcdFx0XHRkZXNjcmlwdG9yOiBkYXRhLnBheWxvYWQ/LmRlc2NyaXB0b3IsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIF9oYW5kbGVSZXF1ZXN0KGRhdGEpIHtcblx0XHRjb25zdCBwYXlsb2FkID0gZGF0YS5wYXlsb2FkO1xuXHRcdGlmICghcGF5bG9hZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBwYXRoLCBhcmdzLCBzZW5kZXIgfSA9IHBheWxvYWQ7XG5cdFx0Y29uc3QgcmVxSWQgPSBkYXRhLnJlcUlkID8/IGRhdGEuaWQ7XG5cdFx0dGhpcy5faW52b2NhdGlvbnMubmV4dCh7XG5cdFx0XHRpZDogcmVxSWQsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0cGF0aCxcblx0XHRcdGFyZ3M6IGFyZ3MgPz8gW10sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRjb250ZXh0VHlwZTogZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZShkYXRhKVxuXHRcdH0pO1xuXHRcdGNvbnN0IHsgcmVzdWx0LCB0b1RyYW5zZmVyLCBuZXdQYXRoIH0gPSBhd2FpdCB0aGlzLl9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSwgc2VuZGVyKTtcblx0XHRhd2FpdCB0aGlzLl9zZW5kUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgc2VuZGVyLCBuZXdQYXRoLCByZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHR9XG5cdGFzeW5jIF9leGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncywgc2VuZGVyKSB7XG5cdFx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0XHRjaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVmbGVjdDogdGhpcy5fY29uZmlnLnJlZmxlY3Rcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzdWx0OiBhd2FpdCByZXN1bHQsXG5cdFx0XHR0b1RyYW5zZmVyLFxuXHRcdFx0bmV3UGF0aFxuXHRcdH07XG5cdH1cblx0YXN5bmMgX3NlbmRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBzZW5kZXIsIHBhdGgsIHJhd1Jlc3VsdCwgdG9UcmFuc2Zlcikge1xuXHRcdGNvbnN0IHsgcmVzcG9uc2U6IGNvcmVSZXNwb25zZSwgdHJhbnNmZXIgfSA9IGF3YWl0IGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgdGhpcy5fbmFtZSwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0ge1xuXHRcdFx0aWQ6IHJlcUlkLFxuXHRcdFx0Li4uY29yZVJlc3BvbnNlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH07XG5cdFx0dGhpcy5fc2VuZChzZW5kZXIsIHJlc3BvbnNlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2hhbmRsZVNpZ25hbChkYXRhKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IGRhdGE/LnBheWxvYWQgPz8ge307XG5cdFx0Y29uc3QgcmVtb3RlQ2hhbm5lbCA9IHBheWxvYWQuZnJvbSA/PyBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIjtcblx0XHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZGF0YS50cmFuc3BvcnRUeXBlID8/IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KGRhdGEuY2hhbm5lbCk/LnRyYW5zcG9ydFR5cGUgPz8gXCJpbnRlcm5hbFwiO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gcmVtb3RlQ2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRkaXJlY3Rpb246IFwiaW5jb21pbmdcIlxuXHRcdH0pO1xuXHRcdHRoaXMuX21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X3JlZ2lzdGVyQ29ubmVjdGlvbihwYXJhbXMpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHBhcmFtcyk7XG5cdH1cblx0X21hcmtDb25uZWN0aW9uTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5tYXJrTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCk7XG5cdH1cblx0X2VtaXRDb25uZWN0aW9uU2lnbmFsKGJpbmRpbmcsIHNpZ25hbFR5cGUsIHBheWxvYWQgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0Y2hhbm5lbDogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogYmluZGluZy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHR0bzogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlKTtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fcmVnaXN0ZXJDb25uZWN0aW9uKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fbmFtZSxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGJpbmRpbmcudGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IGJpbmRpbmcudHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJvdXRnb2luZ1wiXG5cdFx0fSk7XG5cdFx0dGhpcy5fbWFya0Nvbm5lY3Rpb25Ob3RpZmllZChjb25uZWN0aW9uLCBtZXNzYWdlLnBheWxvYWQpO1xuXHR9XG5cdF9zZW5kU2lnbmFsVG9UYXJnZXQodGFyZ2V0LCB0cmFuc3BvcnRUeXBlLCBwYXlsb2FkLCBzaWduYWxUeXBlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRjaGFubmVsOiBwYXlsb2FkLnRvID8/IHRoaXMuX25hbWUsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBzaWduYWxUeXBlLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwid2Vic29ja2V0XCIpIHtcblx0XHRcdFx0dGFyZ2V0Py5zZW5kPy4oSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtcnVudGltZVwiKSB7XG5cdFx0XHRcdGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtdGFic1wiKSB7XG5cdFx0XHRcdGNvbnN0IHRhYklkID0gcGF5bG9hZC50YWJJZDtcblx0XHRcdFx0aWYgKHRhYklkICE9IG51bGwpIGNocm9tZS50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYklkLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdFx0XHR0YXJnZXQ/LnBvc3RNZXNzYWdlPy4obWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0XHRcdGlmIChwYXlsb2FkLmV4dGVybmFsSWQpIGNocm9tZS5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKHBheWxvYWQuZXh0ZXJuYWxJZCwgbWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhcmdldD8ucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB7IHRyYW5zZmVyOiBbXSB9KTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0X21hcmtBbGxDb25uZWN0aW9uc0Nsb3NlZCgpIHtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VBbGwoKTtcblx0fVxuXHRfY3JlYXRlVHJhbnNwb3J0QmluZGluZyh0YXJnZXQsIHRyYW5zcG9ydFR5cGUsIHRhcmdldENoYW5uZWwsIG9wdGlvbnMpIHtcblx0XHRsZXQgc2VuZGVyO1xuXHRcdGxldCBjbGVhbnVwO1xuXHRcdHN3aXRjaCAodHJhbnNwb3J0VHlwZSkge1xuXHRcdFx0Y2FzZSBcIndvcmtlclwiOlxuXHRcdFx0Y2FzZSBcIm1lc3NhZ2UtcG9ydFwiOlxuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRpZiAob3B0aW9ucy5hdXRvU3RhcnQgIT09IGZhbHNlICYmIHRhcmdldC5zdGFydCkgdGFyZ2V0LnN0YXJ0KCk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiB0YXJnZXQucG9zdE1lc3NhZ2UobXNnLCB7IHRyYW5zZmVyIH0pO1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAoKGUpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGUuZGF0YSkpO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIndlYnNvY2tldFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB0YXJnZXQuc2VuZChKU09OLnN0cmluZ2lmeShtc2cpKTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhKU09OLnBhcnNlKGUuZGF0YSkpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1ydW50aW1lXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtdGFic1wiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnM/LnNlbmRNZXNzYWdlPy4ob3B0aW9ucy50YWJJZCwgbXNnKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZywgc2VuZGVyTWV0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCAmJiBzZW5kZXJNZXRhPy50YWI/LmlkICE9PSBvcHRpb25zLnRhYklkKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1wb3J0XCI6XG5cdFx0XHRcdGlmICh0YXJnZXQ/LnBvc3RNZXNzYWdlICYmIHRhcmdldD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikge1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldC5wb3N0TWVzc2FnZShtc2cpO1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKTtcblx0XHRcdFx0XHR0YXJnZXQub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuZGlzY29ubmVjdD8uKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwb3J0TmFtZSA9IG9wdGlvbnMucG9ydE5hbWUgPz8gdGFyZ2V0Q2hhbm5lbDtcblx0XHRcdFx0XHRjb25zdCBwb3J0ID0gb3B0aW9ucy50YWJJZCAhPSBudWxsICYmIGNocm9tZS50YWJzPy5jb25uZWN0ID8gY2hyb21lLnRhYnMuY29ubmVjdChvcHRpb25zLnRhYklkLCB7IG5hbWU6IHBvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHBvcnROYW1lIH0pO1xuXHRcdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHBvcnQucG9zdE1lc3NhZ2UobXNnKTtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0cG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0Lm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRwb3J0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS1leHRlcm5hbFwiOlxuXHRcdFx0XHRzZW5kZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMuZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uob3B0aW9ucy5leHRlcm5hbElkLCBtc2cpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxmXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2csIHRyYW5zZmVyKSA9PiBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlPy4obXNnLCB7IHRyYW5zZmVyOiB0cmFuc2ZlciA/PyBbXSB9KTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKChlKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhlLmRhdGEpKTtcblx0XHRcdFx0XHRnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG9wdGlvbnMub25NZXNzYWdlKSBjbGVhbnVwID0gb3B0aW9ucy5vbk1lc3NhZ2UoKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKSk7XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldD8ucG9zdE1lc3NhZ2U/Lihtc2cpO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0dGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRjbGVhbnVwLFxuXHRcdFx0cG9zdE1lc3NhZ2U6IChtZXNzYWdlLCBvcHRpb25zKSA9PiBzZW5kZXI/LihtZXNzYWdlLCBvcHRpb25zKSxcblx0XHRcdHN0YXJ0OiAoKSA9PiB0YXJnZXQ/LnN0YXJ0Py4oKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0YXJnZXQ/LmNsb3NlPy4oKVxuXHRcdH07XG5cdH1cblx0X3NlbmQodGFyZ2V0Q2hhbm5lbCwgbWVzc2FnZSwgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5fdHJhbnNwb3J0cy5nZXQodGFyZ2V0Q2hhbm5lbCkgPz8gdGhpcy5fZGVmYXVsdFRyYW5zcG9ydDtcblx0XHQoYmluZGluZz8uc2VuZGVyID8/IGJpbmRpbmc/LnBvc3RNZXNzYWdlKT8uY2FsbChiaW5kaW5nLCBtZXNzYWdlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2dldERlZmF1bHRUYXJnZXQoKSB7XG5cdFx0aWYgKHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQpIHJldHVybiB0aGlzLl9kZWZhdWx0VHJhbnNwb3J0LnRhcmdldENoYW5uZWw7XG5cdFx0cmV0dXJuIFwid29ya2VyXCI7XG5cdH1cblx0X2luZmVyVGFyZ2V0Q2hhbm5lbCh0YXJnZXQsIHRyYW5zcG9ydFR5cGUpIHtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJ3b3JrZXJcIikgcmV0dXJuIFwid29ya2VyXCI7XG5cdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiYnJvYWRjYXN0XCIgJiYgdGFyZ2V0Lm5hbWUpIHJldHVybiB0YXJnZXQubmFtZTtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJzZWxmXCIpIHJldHVybiBcInNlbGZcIjtcblx0XHRyZXR1cm4gYCR7dHJhbnNwb3J0VHlwZX0tJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gO1xuXHR9XG5cdF9jcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCkge1xuXHRcdGNvbnN0IGludm9rZXIgPSAoYWN0aW9uLCBwYXRoLCBhcmdzKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0XHR9O1xuXHRcdHJldHVybiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCB7XG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRjYWNoZTogdHJ1ZSxcblx0XHRcdHRpbWVvdXQ6IHRoaXMuX2NvbmZpZy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0X2lzV29ya2VyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyh0aGlzLl9jb250ZXh0VHlwZSk7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkQ2hhbm5lbChjb25maWcpO1xufVxuZnVuY3Rpb24gc2V0dXBVbmlmaWVkQ2hhbm5lbChuYW1lLCB0YXJnZXQsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRuYW1lLFxuXHRcdC4uLm9wdGlvbnNcblx0fSkuYXR0YWNoKHRhcmdldCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKSB7XG5cdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdG1jLnBvcnQyLnN0YXJ0KCk7XG5cdHJldHVybiB7XG5cdFx0Y2hhbm5lbDE6IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0YXV0b0xpc3RlbjogZmFsc2UsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSkuYXR0YWNoKG1jLnBvcnQxLCB7IHRhcmdldENoYW5uZWw6IG5hbWUyIH0pLFxuXHRcdGNoYW5uZWwyOiBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBuYW1lMixcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pLmF0dGFjaChtYy5wb3J0MiwgeyB0YXJnZXRDaGFubmVsOiBuYW1lMSB9KSxcblx0XHRtZXNzYWdlQ2hhbm5lbDogbWNcblx0fTtcbn1cbnZhciBDSEFOTkVMX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldFVuaWZpZWRDaGFubmVsKG5hbWUsIGNvbmZpZykge1xuXHRpZiAoIUNIQU5ORUxfUkVHSVNUUlkuaGFzKG5hbWUpKSBDSEFOTkVMX1JFR0lTVFJZLnNldChuYW1lLCBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0bmFtZSxcblx0XHQuLi5jb25maWdcblx0fSkpO1xuXHRyZXR1cm4gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG59XG5mdW5jdGlvbiBnZXRVbmlmaWVkQ2hhbm5lbE5hbWVzKCkge1xuXHRyZXR1cm4gWy4uLkNIQU5ORUxfUkVHSVNUUlkua2V5cygpXTtcbn1cbmZ1bmN0aW9uIGNsb3NlVW5pZmllZENoYW5uZWwobmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gQ0hBTk5FTF9SRUdJU1RSWS5nZXQobmFtZSk7XG5cdGlmIChjaGFubmVsKSB7XG5cdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdHJldHVybiBDSEFOTkVMX1JFR0lTVFJZLmRlbGV0ZShuYW1lKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG52YXIgV09SS0VSX0NIQU5ORUwgPSBudWxsO1xuZnVuY3Rpb24gZ2V0V29ya2VyQ2hhbm5lbCgpIHtcblx0aWYgKCFXT1JLRVJfQ0hBTk5FTCkge1xuXHRcdGNvbnN0IGNvbnRleHRUeXBlID0gZGV0ZWN0Q29udGV4dFR5cGUoKTtcblx0XHRpZiAoW1xuXHRcdFx0XCJ3b3JrZXJcIixcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiLFxuXHRcdFx0XCJzZXJ2aWNlLXdvcmtlclwiXG5cdFx0XS5pbmNsdWRlcyhjb250ZXh0VHlwZSkpIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJ3b3JrZXJcIixcblx0XHRcdGF1dG9MaXN0ZW46IHRydWVcblx0XHR9KTtcblx0XHRlbHNlIFdPUktFUl9DSEFOTkVMID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogXCJob3N0XCIsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBXT1JLRVJfQ0hBTk5FTDtcbn1cbmZ1bmN0aW9uIGV4cG9zZUZyb21VbmlmaWVkKG5hbWUsIG9iaikge1xuXHRnZXRXb3JrZXJDaGFubmVsKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiByZW1vdGVGcm9tVW5pZmllZChtb2R1bGVOYW1lLCB0YXJnZXRDaGFubmVsKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkucmVtb3RlKG1vZHVsZU5hbWUsIHRhcmdldENoYW5uZWwpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9wcm94eS9SZXF1ZXN0UHJveHkudHNcbnZhciB3cmFwQ2hhbm5lbCA9IChjb25uZWN0Q2hhbm5lbCwgaG9zdCA9IG51bGwpID0+IHtcblx0cmV0dXJuIGdldFdvcmtlckNoYW5uZWwoKS5wcm94eShjb25uZWN0Q2hhbm5lbCk7XG59O1xudmFyIHdyYXBPYnNlcnZhYmxlQ2hhbm5lbCA9IChjaGFubmVsT2JzLCBjb25uZWN0Q2hhbm5lbCwgb3B0aW9ucyA9IHt9KSA9PiB3cmFwQ2hhbm5lbChjb25uZWN0Q2hhbm5lbCwgbnVsbCk7XG52YXIgbWFrZU9ic2VydmFibGVSZXF1ZXN0UHJveHkgPSAoZGVzY3JpcHRvciwgY2hhbm5lbE9icywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdHJldHVybiBnZXRXb3JrZXJDaGFubmVsKCkud3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgZGVzY3JpcHRvcj8uY2hhbm5lbCA/PyBvcHRpb25zPy5jb25uZWN0Q2hhbm5lbCk7XG59O1xuZnVuY3Rpb24gY3JlYXRlT2JzZXJ2YWJsZUNoYW5uZWwodHJhbnNwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdG5hbWU6IGNoYW5uZWxOYW1lLFxuXHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdH0pO1xuXHRjaGFubmVsLmNvbm5lY3QodHJhbnNwb3J0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWxOYW1lIH0pO1xuXHRyZXR1cm4ge1xuXHRcdG9ic2VydmFibGU6IGNoYW5uZWwsXG5cdFx0d3JhcDogKGNvbm5lY3RDaGFubmVsLCBvcHRzKSA9PiBjaGFubmVsLnByb3h5KGNvbm5lY3RDaGFubmVsKSxcblx0XHRzdWJzY3JpYmU6IChvYnMpID0+IGNoYW5uZWwuc3Vic2NyaWJlKG9icyksXG5cdFx0c2VuZDogKG1zZykgPT4gY2hhbm5lbC5uZXh0KG1zZyksXG5cdFx0cmVxdWVzdDogKG1zZykgPT4gY2hhbm5lbC5pbnZva2UoY2hhbm5lbE5hbWUsIFdSZWZsZWN0QWN0aW9uLkNBTEwsIFtdLCBbbXNnXSlcblx0fTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvQWxpYXMudHNcbnZhciBUUyA9IHtcblx0cmpiOiBcInJlamVjdEJ5XCIsXG5cdHJ2YjogXCJyZXNvbHZlQnlcIixcblx0cmo6IFwicmVqZWN0XCIsXG5cdHJ2OiBcInJlc29sdmVcIixcblx0Y3I6IFwiY3JlYXRlXCIsXG5cdGNzOiBcImNyZWF0ZVN5bmNcIixcblx0YTogXCJhcnJheVwiLFxuXHR0YTogXCJ0eXBlZGFycmF5XCIsXG5cdHVkZjogXCJ1bmRlZmluZWRcIlxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvVXNlZnVsLnRzXG52YXIgVHJhbnNmZXJhYmxlID0gW1xuXHR0eXBlb2YgQXJyYXlCdWZmZXIgIT0gVFMudWRmID8gQXJyYXlCdWZmZXIgOiBudWxsLFxuXHR0eXBlb2YgTWVzc2FnZVBvcnQgIT0gVFMudWRmID8gTWVzc2FnZVBvcnQgOiBudWxsLFxuXHR0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT0gVFMudWRmID8gUmVhZGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV3JpdGFibGVTdHJlYW0gIT0gVFMudWRmID8gV3JpdGFibGVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgVHJhbnNmb3JtU3RyZWFtICE9IFRTLnVkZiA/IFRyYW5zZm9ybVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBXZWJUcmFuc3BvcnRSZWNlaXZlU3RyZWFtICE9IFRTLnVkZiA/IFdlYlRyYW5zcG9ydFJlY2VpdmVTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgV2ViVHJhbnNwb3J0U2VuZFN0cmVhbSAhPSBUUy51ZGYgPyBXZWJUcmFuc3BvcnRTZW5kU3RyZWFtIDogbnVsbCxcblx0dHlwZW9mIEF1ZGlvRGF0YSAhPSBUUy51ZGYgPyBBdWRpb0RhdGEgOiBudWxsLFxuXHR0eXBlb2YgSW1hZ2VCaXRtYXAgIT0gVFMudWRmID8gSW1hZ2VCaXRtYXAgOiBudWxsLFxuXHR0eXBlb2YgVmlkZW9GcmFtZSAhPSBUUy51ZGYgPyBWaWRlb0ZyYW1lIDogbnVsbCxcblx0dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPSBUUy51ZGYgPyBPZmZzY3JlZW5DYW52YXMgOiBudWxsLFxuXHR0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT0gVFMudWRmID8gUlRDRGF0YUNoYW5uZWwgOiBudWxsXG5dLmZpbHRlcigoRSkgPT4gRSAhPSBudWxsKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvRW52LnRzXG52YXIgaXNTZXJ2aWNlV29ya2VyQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBTV0dTID0gZ2xvYmFsVGhpcz8uU2VydmljZVdvcmtlckdsb2JhbFNjb3BlO1xuXHRcdHJldHVybiB0eXBlb2YgU1dHUyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWxUaGlzIGluc3RhbmNlb2YgU1dHUztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGlzQ2hyb21lRXh0ZW5zaW9uQ29udGV4dCA9ICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIWNocm9tZT8ucnVudGltZT8uaWQ7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBkZXRlY3RFeGVjdXRpb25Db250ZXh0ID0gKCkgPT4ge1xuXHRpZiAoaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0KCkpIHJldHVybiBcImNocm9tZS1leHRlbnNpb25cIjtcblx0aWYgKGlzU2VydmljZVdvcmtlckNvbnRleHQoKSkgcmV0dXJuIFwic2VydmljZS13b3JrZXJcIjtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJtYWluXCI7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwidW5rbm93blwiO1xufTtcbnZhciBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMgPSAoKSA9PiB7XG5cdGlmIChpc1NlcnZpY2VXb3JrZXJDb250ZXh0KCkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIjtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuZnVuY3Rpb24gZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgaHJlZiA9IGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWY7XG5cdFx0aWYgKHR5cGVvZiBocmVmID09PSBcInN0cmluZ1wiICYmIGhyZWYubGVuZ3RoID4gMCkgcmV0dXJuIGhyZWY7XG5cdH0gY2F0Y2gge31cblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudC5iYXNlVVJJID09PSBcInN0cmluZ1wiICYmIGRvY3VtZW50LmJhc2VVUkkubGVuZ3RoID4gMCkgcmV0dXJuIGRvY3VtZW50LmJhc2VVUkk7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiByZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihzcGVjKSB7XG5cdGNvbnN0IGJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xuXHRpZiAoIWJhc2UubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiW3VuaWZvcm1dIE5vIGJhc2UgVVJMIGZvciB3b3JrZXIgcmVzb2x1dGlvbiAobWlzc2luZyBsb2NhdGlvbiAvIGRvY3VtZW50LmJhc2VVUkkpXCIpO1xuXHRjb25zdCBub3JtYWxpemVkID0gc3BlYy5zdGFydHNXaXRoKFwiL1wiKSA/IHNwZWMucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikgOiBzcGVjO1xuXHRyZXR1cm4gbmV3IFVSTChub3JtYWxpemVkLCBiYXNlKS5ocmVmO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0NoYW5uZWxzLnRzXG52YXIgUmVtb3RlQ2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIFNFTEZfQ0hBTk5FTCA9IHtcblx0bmFtZTogXCJ1bmtub3duXCIsXG5cdGluc3RhbmNlOiBudWxsXG59O1xudmFyIENIQU5ORUxfTUFQID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBpc1JlZmxlY3RBY3Rpb24kMSA9IChhY3Rpb24pID0+IFsuLi5PYmplY3QudmFsdWVzKFdSZWZsZWN0QWN0aW9uKV0uaW5jbHVkZXMoYWN0aW9uKTtcbnZhciBsb2FkV29ya2VyID0gKFdYKSA9PiB7XG5cdGlmIChXWCBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIFdYO1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBVUkwpIHJldHVybiBuZXcgV29ya2VyKFdYLmhyZWYsIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0aWYgKHR5cGVvZiBXWCA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdHJldHVybiBuZXcgV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmICh0eXBlb2YgV1ggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoV1guc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYLnJlcGxhY2UoL15cXC8vLCBcIi4vXCIpKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmIChVUkwuY2FuUGFyc2UoV1gpIHx8IFdYLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoV1gpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbV1hdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmIChXWCBpbnN0YW5jZW9mIEJsb2IgfHwgV1ggaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRyZXR1cm4gV1ggPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xufTtcbnZhciBSZW1vdGVDaGFubmVsSGVscGVyID0gY2xhc3Mge1xuXHRjaGFubmVsTmFtZTtcblx0b3B0aW9ucztcblx0X2NoYW5uZWw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl9jaGFubmVsID0gZ2V0V29ya2VyQ2hhbm5lbCgpO1xuXHR9XG5cdHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHBhdGggPSBbcGF0aF07XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uKSAmJiBpc1JlZmxlY3RBY3Rpb24kMShwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW52b2tlKHRoaXMuY2hhbm5lbE5hbWUsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdH1cblx0ZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuaW1wb3J0KHVybCwgdGhpcy5jaGFubmVsTmFtZSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIgPSBjbGFzcyB7XG5cdGNoYW5uZWw7XG5cdG9wdGlvbnM7XG5cdF91bmlmaWVkO1xuXHRicm9hZGNhc3RzID0ge307XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLl91bmlmaWVkID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogY2hhbm5lbCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdFx0U0VMRl9DSEFOTkVMLm5hbWUgPSBjaGFubmVsO1xuXHRcdFNFTEZfQ0hBTk5FTC5pbnN0YW5jZSA9IHRoaXM7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGlmIChicm9hZGNhc3QpIHtcblx0XHRcdHRoaXMuX3VuaWZpZWQuYXR0YWNoKGJyb2FkY2FzdCwgeyB0YXJnZXRDaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdFx0dGhpcy5icm9hZGNhc3RzW2NoYW5uZWxdID0gYnJvYWRjYXN0O1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKTtcblx0fVxuXHRnZXRDaGFubmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWw7XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikgcGF0aCA9IFtwYXRoXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbiQxKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRhcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdHBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuaW52b2tlKHRvQ2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRyZXNvbHZlUmVzcG9uc2UocmVxSWQsIHJlc3VsdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbmRSZXNwb25zZShyZXF1ZXN0LCByZXFJZCwgcmVzcG9uc2VGbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QocmVxdWVzdCwgcmVxSWQsIHRoaXMuY2hhbm5lbCk7XG5cdFx0aWYgKCFyZXN1bHQpIHJldHVybjtcblx0XHRyZXNwb25zZUZuPy4ocmVzdWx0LnJlc3BvbnNlLCByZXN1bHQudHJhbnNmZXIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxufTtcbnZhciBpbml0Q2hhbm5lbEhhbmRsZXIgPSAoY2hhbm5lbCA9IFwiJGhvc3QkXCIpID0+IHtcblx0aWYgKFNFTEZfQ0hBTk5FTD8uaW5zdGFuY2UgJiYgY2hhbm5lbCA9PT0gXCIkaG9zdCRcIikgcmV0dXJuIFNFTEZfQ0hBTk5FTC5pbnN0YW5jZTtcblx0aWYgKENIQU5ORUxfTUFQLmhhcyhjaGFubmVsKSkgcmV0dXJuIENIQU5ORUxfTUFQLmdldChjaGFubmVsKSA/PyBudWxsO1xuXHRjb25zdCAkY2hhbm5lbCA9IG5ldyBDaGFubmVsSGFuZGxlcihjaGFubmVsKTtcblx0aWYgKGNoYW5uZWwgPT09IFwiJGhvc3QkXCIpIHtcblx0XHRTRUxGX0NIQU5ORUwubmFtZSA9IGNoYW5uZWw7XG5cdFx0U0VMRl9DSEFOTkVMLmluc3RhbmNlID0gJGNoYW5uZWw7XG5cdH1cblx0Q0hBTk5FTF9NQVAuc2V0KGNoYW5uZWwsICRjaGFubmVsKTtcblx0cmV0dXJuICRjaGFubmVsO1xufTtcbnZhciBjcmVhdGVIb3N0Q2hhbm5lbCA9IChjaGFubmVsID0gXCIkaG9zdCRcIikgPT4gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWwpO1xudmFyIGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsID0gKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCkgPT4ge1xuXHRjb25zdCAkaG9zdCA9IGNyZWF0ZUhvc3RDaGFubmVsKGNoYW5uZWwgPz8gXCIkaG9zdCRcIik7XG5cdHJldHVybiAkaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbD8uKGNoYW5uZWwsIG9wdGlvbnMsIGJyb2FkY2FzdCkgPz8gJGhvc3Q7XG59O1xudmFyICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCA9IChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkgPT4ge1xuXHRpZiAoY2hhbm5lbCA9PSBudWxsIHx8IGJyb2FkY2FzdCkgcmV0dXJuO1xuXHRpZiAoUmVtb3RlQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSByZXR1cm4gUmVtb3RlQ2hhbm5lbHMuZ2V0KGNoYW5uZWwpO1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0Y2hhbm5lbCxcblx0XHRpbnN0YW5jZTogU0VMRl9DSEFOTkVMLmluc3RhbmNlLFxuXHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyKGNoYW5uZWwsIG9wdGlvbnMpKVxuXHR9O1xuXHRSZW1vdGVDaGFubmVscy5zZXQoY2hhbm5lbCwgcmVzdWx0KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvRGF0YUJhc2UudHNcbnZhciBoYW5kTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgd3JhcE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIGRlc2NNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBSRUFEID0gKHRhcmdldCwga2V5KSA9PiB7XG5cdHJldHVybiBoYW5kTWFwLmdldCh0YXJnZXQpPy5ba2V5XTtcbn07XG52YXIgb2JqZWN0VG9SZWYgPSAob2JqLCBjaGFubmVsID0gU0VMRl9DSEFOTkVMPy5uYW1lLCB0b1RyYW5zZmVyKSA9PiB7XG5cdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9IG51bGwgfHwgdHlwZW9mIG9iaiA9PSBcImZ1bmN0aW9uXCIgJiYgb2JqICE9IG51bGwpIHtcblx0XHRpZiAod3JhcE1hcC5oYXMob2JqKSkgcmV0dXJuIHdyYXBNYXAuZ2V0KG9iaik7XG5cdFx0aWYgKGhhbmRNYXAuaGFzKG9iaikpIHJldHVybiBoYW5kTWFwLmdldChvYmopO1xuXHRcdGlmIChpc05vdENvbXBsZXhBcnJheShvYmopKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0b1RyYW5zZmVyPy5pbmNsdWRlcz8uKG9iaikpIHJldHVybiBvYmo7XG5cdFx0aWYgKGNoYW5uZWwgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSByZXR1cm4gb2JqO1xuXHRcdHJldHVybiB7XG5cdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0cGF0aDogcmVnaXN0ZXJlZEluUGF0aC5nZXQob2JqKSA/PyAoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gW1VVSUR2NCgpXTtcblx0XHRcdFx0d3JpdGVCeVBhdGgocGF0aCwgb2JqKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9KSgpLFxuXHRcdFx0b3duZXI6IFNFTEZfQ0hBTk5FTD8ubmFtZSxcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRwcmltaXRpdmU6IGlzUHJpbWl0aXZlKG9iaiksXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlzQ2FuSnVzdFJldHVybihvYmopID8gb2JqIDogbnVsbDtcbn07XG52YXIgJHJlcXVlc3RIYW5kbGVyID0gU3ltYm9sLmZvcihcIkByZXF1ZXN0SGFuZGxlclwiKTtcbnZhciAkZGVzY3JpcHRvciA9IFN5bWJvbC5mb3IoXCJAZGVzY3JpcHRvclwiKTtcbnZhciBub3JtYWxpemVSZWYgPSAodikgPT4ge1xuXHRpZiAoaXNDYW5KdXN0UmV0dXJuKHYpKSByZXR1cm4gdjtcblx0aWYgKHY/LlskZGVzY3JpcHRvcl0pIHJldHVybiB2O1xuXHRpZiAodj8uJGlzRGVzY3JpcHRvcikgcmV0dXJuIG1ha2VSZXF1ZXN0UHJveHkodiwgYXN5bmMgKCkgPT4gdm9pZCAwKTtcblx0aWYgKGlzTm90Q29tcGxleEFycmF5KHYpKSByZXR1cm4gdjtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHkgPSAodGFyZ2V0KSA9PiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdHJldHVybiB3cmFwTWFwLmdldCh0YXJnZXQpID8/IGhhbmRNYXAuZ2V0KHRhcmdldCkgPz8gdGFyZ2V0O1xufTtcbnZhciB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlID0gKHRhcmdldCkgPT4ge1xuXHRpZiAodHlwZW9mIHRhcmdldCAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB0YXJnZXQgIT0gXCJmdW5jdGlvblwiIHx8IHRhcmdldCA9PSBudWxsKSByZXR1cm4gdGFyZ2V0O1xuXHR0YXJnZXQgPSB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5KHRhcmdldCk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHJldHVybiB0YXJnZXQubWFwKHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUpO1xuXHRpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSByZXR1cm4gbmV3IE1hcChBcnJheS5mcm9tKHRhcmdldC5lbnRyaWVzKCkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKHZhbHVlKV0pKTtcblx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbSh0YXJnZXQudmFsdWVzKCkpLm1hcCh1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKSk7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09IFwib2JqZWN0XCIpIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHRhcmdldFtrZXldID0gdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eVJlY3Vyc2l2ZSh0YXJnZXRba2V5XSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xudmFyIHN0b3JlZERhdGEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJlZ2lzdGVyZWRJblBhdGggPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciB0cmF2ZXJzZUJ5UGF0aCA9IChvYmosIHBhdGgpID0+IHtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gb2JqO1xuXHRjb25zdCAkZGVzYyA9IG9iaj8uWyRkZXNjcmlwdG9yXSA/PyAob2JqPy4kaXNEZXNjcmlwdG9yID8gb2JqIDogbnVsbCk7XG5cdGlmICgkZGVzYyAmJiAkZGVzYz8ub3duZXIgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSBvYmogPSByZWFkQnlQYXRoKCRkZXNjPy5wYXRoKSA/PyBvYmo7XG5cdGlmIChpc1ByaW1pdGl2ZShvYmopKSByZXR1cm4gb2JqO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG5cdFx0b2JqID0gb2JqPy5ba2V5XTtcblx0XHRpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG5cdH1cblx0cmV0dXJuIG9iajtcbn07XG52YXIgcmVhZEJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdHJldHVybiByb290ICE9IG51bGwgPyB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEpKSA6IG51bGw7XG59O1xudmFyIHdyaXRlQnlQYXRoID0gKHBhdGgsIGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHJvb3QgPSBzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGw7XG5cdGlmIChwYXRoPy5sZW5ndGggPiAxKSB0cmF2ZXJzZUJ5UGF0aChyb290LCBwYXRoPy5zbGljZT8uKDEsIC0xKSlbcGF0aD8uW3BhdGg/Lmxlbmd0aCAtIDFdXSA9IGRhdGE7XG5cdGVsc2Ugc3RvcmVkRGF0YT8uc2V0Py4ocGF0aD8uWzBdLCBkYXRhKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5zZXQ/LihkYXRhLCBwYXRoKTtcblx0cmV0dXJuIGRhdGE7XG59O1xudmFyIHJlbW92ZUJ5UGF0aCA9IChwYXRoKSA9PiB7XG5cdGlmIChwYXRoICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGF0aCkpIHBhdGggPSBbcGF0aF07XG5cdGlmIChwYXRoID09IG51bGwgfHwgcGF0aD8ubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIShzdG9yZWREYXRhPy5nZXQ/LihwYXRoPy5bMF0pID8/IG51bGwpICYmIHBhdGg/Lmxlbmd0aCA8PSAxKSB7XG5cdFx0c3RvcmVkRGF0YT8uZGVsZXRlPy4ocGF0aD8uWzBdKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHJldHVybiBmYWxzZTtcbn07XG52YXIgcmVtb3ZlQnlEYXRhID0gKGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRpZiAoJGRlc2MgJiYgJGRlc2M/Lm93bmVyID09IFNFTEZfQ0hBTk5FTD8ubmFtZSkgZGF0YSA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IGRhdGE7XG5cdGNvbnN0IHBhdGggPSByZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aDtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG5cdHJlbW92ZUJ5UGF0aChwYXRoKTtcblx0aWYgKHR5cGVvZiBkYXRhID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEgPT0gXCJmdW5jdGlvblwiKSByZWdpc3RlcmVkSW5QYXRoPy5kZWxldGU/LihkYXRhKTtcblx0cmV0dXJuIHRydWU7XG59O1xudmFyIGhhc05vUGF0aCA9IChkYXRhKSA9PiB7XG5cdGNvbnN0ICRkZXNjID0gZGF0YT8uWyRkZXNjcmlwdG9yXSA/PyAoZGF0YT8uJGlzRGVzY3JpcHRvciA/IGRhdGEgOiBudWxsKTtcblx0cmV0dXJuIChyZWdpc3RlcmVkSW5QYXRoPy5nZXQ/LihkYXRhKSA/PyAkZGVzYz8ucGF0aCkgPT0gbnVsbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9jb3JlL1JlcXVlc3RIYW5kbGVyLnRzXG52YXIgaXNPYmplY3QgPSAob2JqKSA9PiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpICYmIG9iaiAhPSBudWxsO1xudmFyIGRlZmF1bHRSZWZsZWN0ID0ge1xuXHRnZXQ6ICh0LCBwKSA9PiB0Py5bcF0sXG5cdHNldDogKHQsIHAsIHYpID0+IHtcblx0XHR0W3BdID0gdjtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblx0aGFzOiAodCwgcCkgPT4gcCBpbiB0LFxuXHRhcHBseTogKHQsIGN0eCwgYXJncykgPT4gdC5hcHBseShjdHgsIGFyZ3MpLFxuXHRjb25zdHJ1Y3Q6ICh0LCBhcmdzKSA9PiBuZXcgdCguLi5hcmdzKSxcblx0ZGVsZXRlUHJvcGVydHk6ICh0LCBwKSA9PiBkZWxldGUgdFtwXSxcblx0b3duS2V5czogKHQpID0+IE9iamVjdC5rZXlzKHQpLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICh0LCBwKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHApLFxuXHRnZXRQcm90b3R5cGVPZjogKHQpID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSxcblx0c2V0UHJvdG90eXBlT2Y6ICh0LCBwKSA9PiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgcCksXG5cdGlzRXh0ZW5zaWJsZTogKHQpID0+IE9iamVjdC5pc0V4dGVuc2libGUodCksXG5cdHByZXZlbnRFeHRlbnNpb25zOiAodCkgPT4gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHQpXG59O1xuZnVuY3Rpb24gZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCB7IGNoYW5uZWwgPSBcIlwiLCBzZW5kZXIgPSBcIlwiLCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QgfSA9IG9wdGlvbnM7XG5cdGNvbnN0IG9iaiA9IG9wdGlvbnMudGFyZ2V0ID8/IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHRvVHJhbnNmZXIgPSBbXTtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGxldCBuZXdQYXRoID0gcGF0aDtcblx0c3dpdGNoIChTdHJpbmcoYWN0aW9uKS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSBcImltcG9ydFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSU1QT1JUOlxuXHRcdFx0cmVzdWx0ID0gaW1wb3J0KFxuXHRcdFx0XHQvKiBAdml0ZS1pZ25vcmUgKi9cblx0XHRcdFx0YXJncz8uWzBdXG4pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRyYW5zZmVyXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5UUkFOU0ZFUjpcblx0XHRcdGlmIChpc0NhblRyYW5zZmVyKG9iaikgJiYgY2hhbm5lbCAhPT0gc2VuZGVyKSB0b1RyYW5zZmVyLnB1c2gob2JqKTtcblx0XHRcdHJlc3VsdCA9IG9iajtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVDoge1xuXHRcdFx0Y29uc3QgcHJvcCA9IGFyZ3M/LlswXTtcblx0XHRcdGNvbnN0IGdvdCA9IHJlZmxlY3QuZ2V0Py4ob2JqLCBwcm9wKSA/PyBvYmo/Lltwcm9wXTtcblx0XHRcdHJlc3VsdCA9IHR5cGVvZiBnb3QgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmogIT0gbnVsbCA/IGdvdC5iaW5kKG9iaikgOiBnb3Q7XG5cdFx0XHRuZXdQYXRoID0gWy4uLnBhdGgsIFN0cmluZyhwcm9wKV07XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y2FzZSBcInNldFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOiB7XG5cdFx0XHRjb25zdCBbcHJvcCwgdmFsdWVdID0gYXJncztcblx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUodmFsdWUsIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHJlc3VsdCA9IHJlZmxlY3Quc2V0Py4ob2JqLCBwcm9wLCBub3JtYWxpemVkVmFsdWUpID8/IChvYmpbcHJvcF0gPSBub3JtYWxpemVkVmFsdWUsIHRydWUpO1xuXHRcdFx0ZWxzZSByZXN1bHQgPSByZWZsZWN0LnNldD8uKG9iaiwgcHJvcCwgbm9ybWFsaXplZFZhbHVlKSA/PyB3cml0ZUJ5UGF0aChbLi4ucGF0aCwgU3RyaW5nKHByb3ApXSwgbm9ybWFsaXplZFZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5DQUxMOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBjdHggPSBvcHRpb25zLmNvbnRleHQgPz8gKG9wdGlvbnMudGFyZ2V0ID8gdm9pZCAwIDogcmVhZEJ5UGF0aChwYXRoLnNsaWNlKDAsIC0xKSkpO1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuYXBwbHk/LihvYmosIGN0eCwgbm9ybWFsaXplZEFyZ3MpID8/IG9iai5hcHBseShjdHgsIG5vcm1hbGl6ZWRBcmdzKTtcblx0XHRcdFx0aWYgKGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiBwYXRoPy5hdCgtMSkgPT09IFwidHJhbnNmZXJcIiAmJiBjaGFubmVsICE9PSBzZW5kZXIpIHRvVHJhbnNmZXIucHVzaChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbnN0cnVjdFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0aWYgKHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBub3JtYWxpemVkQXJncyA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUoYXJncz8uWzBdID8/IGFyZ3MgPz8gW10sIG5vcm1hbGl6ZVJlZik7XG5cdFx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuY29uc3RydWN0Py4ob2JqLCBub3JtYWxpemVkQXJncykgPz8gbmV3IG9iaiguLi5ub3JtYWxpemVkQXJncyk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0Y2FzZSBcImRlbGV0ZXByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImRpc3Bvc2VcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRFTEVURV9QUk9QRVJUWTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkRJU1BPU0U6XG5cdFx0XHRpZiAob3B0aW9ucy50YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5kZWxldGVQcm9wZXJ0eT8uKG9iaiwgcHJvcCkgPz8gZGVsZXRlIG9ialtwcm9wXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHBhdGg/Lmxlbmd0aCA+IDAgPyByZW1vdmVCeVBhdGgocGF0aCkgOiByZW1vdmVCeURhdGEob2JqKTtcblx0XHRcdFx0aWYgKHJlc3VsdCkgbmV3UGF0aCA9IHJlZ2lzdGVyZWRJblBhdGguZ2V0KG9iaikgPz8gW107XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaGFzXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5IQVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lmhhcz8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IGFyZ3M/LlswXSBpbiBvYmogOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwib3dua2V5c1wiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVM6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0Lm93bktleXM/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmtleXMob2JqKSA6IFtdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJnZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcIjpcblx0XHRjYXNlIFwiZ2V0cHJvcGVydHlkZXNjcmlwdG9yXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfT1dOX1BST1BFUlRZX0RFU0NSSVBUT1I6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPUEVSVFlfREVTQ1JJUFRPUjpcblx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPy4ob2JqLCBhcmdzPy5bMF0gPz8gcGF0aD8uYXQoLTEpID8/IFwiXCIpID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGFyZ3M/LlswXSA/PyBwYXRoPy5hdCgtMSkgPz8gXCJcIikgOiB2b2lkIDApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImdldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5nZXRQcm90b3R5cGVPZj8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA6IG51bGwpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNldHByb3RvdHlwZW9mXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5TRVRfUFJPVE9UWVBFX09GOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5zZXRQcm90b3R5cGVPZj8uKG9iaiwgYXJncz8uWzBdKSA/PyAoaXNPYmplY3Qob2JqKSA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmosIGFyZ3M/LlswXSkgOiBmYWxzZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaXNleHRlbnNpYmxlXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5JU19FWFRFTlNJQkxFOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5pc0V4dGVuc2libGU/LihvYmopID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopIDogdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicHJldmVudGV4dGVuc2lvbnNcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLlBSRVZFTlRfRVhURU5TSU9OUzogcmVzdWx0ID0gcmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QucHJldmVudEV4dGVuc2lvbnMob2JqKSA6IGZhbHNlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlc3VsdCxcblx0XHR0b1RyYW5zZmVyLFxuXHRcdHBhdGg6IG5ld1BhdGhcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbCwgc2VuZGVyLCBwYXRoLCByYXdSZXN1bHQsIHRvVHJhbnNmZXIpIHtcblx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcmF3UmVzdWx0O1xuXHRjb25zdCBjYW5CZVJldHVybiA9IGlzQ2FuVHJhbnNmZXIocmVzdWx0KSAmJiB0b1RyYW5zZmVyLmluY2x1ZGVzKHJlc3VsdCkgfHwgaXNDYW5KdXN0UmV0dXJuKHJlc3VsdCk7XG5cdGxldCBmaW5hbFBhdGggPSBwYXRoO1xuXHRpZiAoIWNhbkJlUmV0dXJuICYmIGFjdGlvbiAhPT0gXCJnZXRcIiAmJiBhY3Rpb24gIT09IFdSZWZsZWN0QWN0aW9uLkdFVCAmJiAodHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCIpKSB7XG5cdFx0aWYgKGhhc05vUGF0aChyZXN1bHQpKSB7XG5cdFx0XHRmaW5hbFBhdGggPSBbVVVJRHY0KCldO1xuXHRcdFx0d3JpdGVCeVBhdGgoZmluYWxQYXRoLCByZXN1bHQpO1xuXHRcdH0gZWxzZSBmaW5hbFBhdGggPSByZWdpc3RlcmVkSW5QYXRoLmdldChyZXN1bHQpID8/IFtdO1xuXHR9XG5cdGNvbnN0IGN0eCA9IHJlYWRCeVBhdGgoZmluYWxQYXRoKTtcblx0Y29uc3QgY3R4S2V5ID0gYWN0aW9uID09PSBcImdldFwiIHx8IGFjdGlvbiA9PT0gV1JlZmxlY3RBY3Rpb24uR0VUID8gZmluYWxQYXRoPy5hdCgtMSkgOiB2b2lkIDA7XG5cdGNvbnN0IG9iaiA9IHJlYWRCeVBhdGgocGF0aCk7XG5cdGNvbnN0IHBheWxvYWQgPSBkZWVwT3BlcmF0ZUFuZENsb25lKHJlc3VsdCwgKGVsKSA9PiBvYmplY3RUb1JlZihlbCwgY2hhbm5lbCwgdG9UcmFuc2ZlcikpID8/IHJlc3VsdDtcblx0cmV0dXJuIHtcblx0XHRyZXNwb25zZToge1xuXHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiBjaGFubmVsLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHJlc3VsdDogY2FuQmVSZXR1cm4gPyBwYXlsb2FkIDogbnVsbCxcblx0XHRcdFx0dHlwZTogdHlwZW9mIHJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWwsXG5cdFx0XHRcdGRlc2NyaXB0b3I6IHtcblx0XHRcdFx0XHQkaXNEZXNjcmlwdG9yOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGg6IGZpbmFsUGF0aCxcblx0XHRcdFx0XHRvd25lcjogY2hhbm5lbCxcblx0XHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRcdHByaW1pdGl2ZTogaXNQcmltaXRpdmUocmVzdWx0KSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRhcmd1bWVudENvdW50OiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9iai5sZW5ndGggOiAtMSxcblx0XHRcdFx0XHQuLi5pc09iamVjdChjdHgpICYmIGN0eEtleSAhPSBudWxsID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGN0eEtleSkgOiB7fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmFuc2ZlcjogdG9UcmFuc2ZlclxuXHR9O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChyZXF1ZXN0LCByZXFJZCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcblx0Y29uc3QgeyBjaGFubmVsLCBzZW5kZXIsIHBhdGgsIGFjdGlvbiwgYXJncyB9ID0gcmVxdWVzdDtcblx0aWYgKGNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIHBhdGg6IG5ld1BhdGggfSA9IGV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCB7XG5cdFx0Y2hhbm5lbCxcblx0XHRzZW5kZXIsXG5cdFx0Li4ub3B0aW9uc1xuXHR9KTtcblx0cmV0dXJuIGJ1aWxkUmVzcG9uc2UocmVxSWQsIGFjdGlvbiwgY2hhbm5lbE5hbWUsIHNlbmRlciwgbmV3UGF0aCwgcmVzdWx0LCB0b1RyYW5zZmVyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdEhhbmRsZXIodGFyZ2V0LCByZWZsZWN0ID0gZGVmYXVsdFJlZmxlY3QpIHtcblx0cmV0dXJuIGFzeW5jIChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRsZXQgcGFyZW50ID0gdGFyZ2V0O1xuXHRcdGxldCBjdXJyZW50ID0gdGFyZ2V0O1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuXHRcdFx0cGFyZW50ID0gY3VycmVudDtcblx0XHRcdGN1cnJlbnQgPSBjdXJyZW50Py5bcGF0aFtpXV07XG5cdFx0XHRpZiAoY3VycmVudCA9PT0gdm9pZCAwICYmIGkgPCBwYXRoLmxlbmd0aCAtIDEpIHRocm93IG5ldyBFcnJvcihgUGF0aCBzZWdtZW50ICcke3BhdGhbaV19JyBub3QgZm91bmRgKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblx0XHRzd2l0Y2ggKFN0cmluZyhhY3Rpb24pLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdGNhc2UgXCJnZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uR0VUOiByZXR1cm4gY3VycmVudDtcblx0XHRcdGNhc2UgXCJzZXRcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uU0VUOlxuXHRcdFx0XHRwYXJlbnRbcHJvcF0gPSBhcmdzWzBdO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHRjYXNlIFwiYXBwbHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQVBQTFk6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkNBTEw6XG5cdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbEFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3M7XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGN1cnJlbnQuYXBwbHkocGFyZW50LCBjYWxsQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcblx0XHRcdGNhc2UgXCJjb25zdHJ1Y3RcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNUOlxuXHRcdFx0XHRpZiAodHlwZW9mIGN1cnJlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdGNvbnN0IGN0b3JBcmdzID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuXHRcdFx0XHRcdHJldHVybiBuZXcgY3VycmVudCguLi5jdG9yQXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wfScgaXMgbm90IGEgY29uc3RydWN0b3JgKTtcblx0XHRcdGNhc2UgXCJoYXNcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uSEFTOiByZXR1cm4gcHJvcCBpbiBwYXJlbnQ7XG5cdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRjYXNlIFwiZGVsZXRlcHJvcGVydHlcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZOiByZXR1cm4gZGVsZXRlIHBhcmVudFtwcm9wXTtcblx0XHRcdGNhc2UgXCJvd25rZXlzXCI6XG5cdFx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLk9XTl9LRVlTOiByZXR1cm4gT2JqZWN0LmtleXMoY3VycmVudCA/PyBwYXJlbnQpO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIGN1cnJlbnQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0Nvbm5lY3Rpb24udHNcbnZhciBDaGFubmVsQ29ubmVjdGlvbiA9IGNsYXNzIHtcblx0X25hbWU7XG5cdF90cmFuc3BvcnRUeXBlO1xuXHRfaWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gXCJkaXNjb25uZWN0ZWRcIjtcblx0X2luYm91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxZTMgfSk7XG5cdF9vdXRib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDFlMyB9KTtcblx0X3N0YXRlQ2hhbmdlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IFtdO1xuXHRfc3RhdHMgPSB7XG5cdFx0bWVzc2FnZXNTZW50OiAwLFxuXHRcdG1lc3NhZ2VzUmVjZWl2ZWQ6IDAsXG5cdFx0Ynl0ZXNUcmFuc2ZlcnJlZDogMCxcblx0XHRsYXRlbmN5TXM6IDAsXG5cdFx0dXB0aW1lOiAwLFxuXHRcdHJlY29ubmVjdENvdW50OiAwXG5cdH07XG5cdF9zdGFydFRpbWUgPSAwO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9idWZmZXIgPSBbXTtcblx0X29wdHM7XG5cdGNvbnN0cnVjdG9yKF9uYW1lLCBfdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX3RyYW5zcG9ydFR5cGUgPSBfdHJhbnNwb3J0VHlwZTtcblx0XHR0aGlzLl9vcHRzID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0YXV0b1JlY29ubmVjdDogdHJ1ZSxcblx0XHRcdHJlY29ubmVjdEludGVydmFsOiAxZTMsXG5cdFx0XHRtYXhSZWNvbm5lY3RBdHRlbXB0czogNSxcblx0XHRcdGJ1ZmZlck1lc3NhZ2VzOiB0cnVlLFxuXHRcdFx0YnVmZmVyU2l6ZTogMWUzLFxuXHRcdFx0bWV0YWRhdGE6IHt9LFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBTdWJzY3JpcHRpb25zKCk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyLCBmcm9tQ2hhbm5lbCkge1xuXHRcdHJldHVybiAoZnJvbUNoYW5uZWwgPyBmaWx0ZXIoKG0pID0+IG0uc2VuZGVyID09PSBmcm9tQ2hhbm5lbCkodGhpcy5faW5ib3VuZCkgOiB0aGlzLl9pbmJvdW5kKS5zdWJzY3JpYmUodHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcik7XG5cdH1cblx0bmV4dChtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBcImNvbm5lY3RlZFwiKSB7XG5cdFx0XHRpZiAodGhpcy5fb3B0cy5idWZmZXJNZXNzYWdlcyAmJiB0aGlzLl9idWZmZXIubGVuZ3RoIDwgdGhpcy5fb3B0cy5idWZmZXJTaXplKSB0aGlzLl9idWZmZXIucHVzaChtZXNzYWdlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fb3V0Ym91bmQubmV4dChtZXNzYWdlKTtcblx0XHR0aGlzLl9zdGF0cy5tZXNzYWdlc1NlbnQrKztcblx0fVxuXHRhc3luYyByZXF1ZXN0KHRvQ2hhbm5lbCwgcGF5bG9hZCwgb3B0cyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwgcmVzb2x2ZXJzKTtcblx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXRgKSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0cy50aW1lb3V0ID8/IHRoaXMuX29wdHMudGltZW91dCk7XG5cdFx0dGhpcy5uZXh0KHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRvQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLnBheWxvYWQsXG5cdFx0XHRcdGFjdGlvbjogb3B0cy5hY3Rpb24sXG5cdFx0XHRcdHBhdGg6IG9wdHMucGF0aFxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXNvbHZlcnMucHJvbWlzZS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG5cdH1cblx0cmVzcG9uZChvcmlnaW5hbCwgcGF5bG9hZCkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBvcmlnaW5hbC5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogb3JpZ2luYWwucmVxSWQsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0ZW1pdCh0b0NoYW5uZWwsIGV2ZW50VHlwZSwgZGF0YSkge1xuXHRcdHRoaXMubmV4dCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiB0b0NoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZU91dGJvdW5kKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSh0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyKTtcblx0fVxuXHRwdXNoSW5ib3VuZChtZXNzYWdlKSB7XG5cdFx0dGhpcy5fc3RhdHMubWVzc2FnZXNSZWNlaXZlZCsrO1xuXHRcdGlmIChtZXNzYWdlLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtZXNzYWdlLnJlcUlkKSB7XG5cdFx0XHRjb25zdCByID0gdGhpcy5fcGVuZGluZy5nZXQobWVzc2FnZS5yZXFJZCk7XG5cdFx0XHRpZiAocikge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShtZXNzYWdlLnJlcUlkKTtcblx0XHRcdFx0ci5yZXNvbHZlKG1lc3NhZ2UucGF5bG9hZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlID09PSBcImNvbm5lY3RlZFwiKSByZXR1cm47XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0aW5nXCIpO1xuXHRcdHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjb25uZWN0ZWRcIik7XG5cdFx0dGhpcy5fZmx1c2hCdWZmZXIoKTtcblx0fVxuXHRkaXNjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl9zdGF0ZSA9PT0gXCJkaXNjb25uZWN0ZWRcIiB8fCB0aGlzLl9zdGF0ZSA9PT0gXCJjbG9zZWRcIikgcmV0dXJuO1xuXHRcdHRoaXMuX3NldFN0YXRlKFwiZGlzY29ubmVjdGVkXCIpO1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9zdWJzID0gW107XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJjbG9zZWRcIik7XG5cdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX291dGJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG5cdH1cblx0bWFya0Nvbm5lY3RlZCgpIHtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNvbm5lY3RlZFwiKTtcblx0XHR0aGlzLl9mbHVzaEJ1ZmZlcigpO1xuXHR9XG5cdG1hcmtEaXNjb25uZWN0ZWQoKSB7XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0X3NldFN0YXRlKHN0YXRlKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlICE9PSBzdGF0ZSkge1xuXHRcdFx0dGhpcy5fc3RhdGUgPSBzdGF0ZTtcblx0XHRcdHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHN0YXRlKTtcblx0XHR9XG5cdH1cblx0X2ZsdXNoQnVmZmVyKCkge1xuXHRcdGZvciAoY29uc3QgbXNnIG9mIHRoaXMuX2J1ZmZlcikgdGhpcy5fb3V0Ym91bmQubmV4dChtc2cpO1xuXHRcdHRoaXMuX2J1ZmZlciA9IFtdO1xuXHR9XG5cdF9zZXR1cFN1YnNjcmlwdGlvbnMoKSB7XG5cdFx0dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2luYm91bmQuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0aWYgKG1zZy50eXBlID09PSBcInNpZ25hbFwiICYmIG1zZy5wYXlsb2FkPy50eXBlID09PSBcImNvbm5lY3RcIikgdGhpcy5fY29ubmVjdGVkUGVlcnMuc2V0KG1zZy5zZW5kZXIsIHtcblx0XHRcdFx0bmFtZTogbXNnLnNlbmRlcixcblx0XHRcdFx0c3RhdGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdGlzSG9zdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH0gfSkpO1xuXHR9XG5cdGdldCBpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faWQ7XG5cdH1cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgdHJhbnNwb3J0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNwb3J0VHlwZTtcblx0fVxuXHRnZXQgc3RhdHMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX3N0YXRzLFxuXHRcdFx0dXB0aW1lOiB0aGlzLl9zdGFydFRpbWUgPyBEYXRlLm5vdygpIC0gdGhpcy5fc3RhcnRUaW1lIDogMFxuXHRcdH07XG5cdH1cblx0Z2V0IHN0YXRlQ2hhbmdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGVDaGFuZ2VzO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzLmtleXMoKV07XG5cdH1cblx0Z2V0IG1ldGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLl9pZCxcblx0XHRcdG5hbWU6IHRoaXMuX25hbWUsXG5cdFx0XHRzdGF0ZTogdGhpcy5fc3RhdGUsXG5cdFx0XHRpc0hvc3Q6IGZhbHNlLFxuXHRcdFx0Y29ubmVjdGVkQ2hhbm5lbHM6IG5ldyBTZXQodGhpcy5fY29ubmVjdGVkUGVlcnMua2V5cygpKVxuXHRcdH07XG5cdH1cbn07XG52YXIgQ29ubmVjdGlvblBvb2wgPSBjbGFzcyBDb25uZWN0aW9uUG9vbCB7XG5cdF9jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsO1xuXHRzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG5cdFx0aWYgKCFDb25uZWN0aW9uUG9vbC5faW5zdGFuY2UpIENvbm5lY3Rpb25Qb29sLl9pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uUG9vbCgpO1xuXHRcdHJldHVybiBDb25uZWN0aW9uUG9vbC5faW5zdGFuY2U7XG5cdH1cblx0Z2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSA9IFwiaW50ZXJuYWxcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKCF0aGlzLl9jb25uZWN0aW9ucy5oYXMobmFtZSkpIHRoaXMuX2Nvbm5lY3Rpb25zLnNldChuYW1lLCBuZXcgQ2hhbm5lbENvbm5lY3Rpb24obmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucykpO1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5nZXQobmFtZSk7XG5cdH1cblx0Z2V0KG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuXHR9XG5cdGhhcyhuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLmhhcyhuYW1lKTtcblx0fVxuXHRkZWxldGUobmFtZSkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmdldChuYW1lKT8uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLmZvckVhY2goKGMpID0+IGMuY2xvc2UoKSk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuY2xlYXIoKTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuc2l6ZTtcblx0fVxuXHRnZXQgbmFtZXMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9jb25uZWN0aW9ucy5rZXlzKCldO1xuXHR9XG59O1xudmFyIGdldENvbm5lY3Rpb25Qb29sID0gKCkgPT4gQ29ubmVjdGlvblBvb2wuZ2V0SW5zdGFuY2UoKTtcbnZhciBnZXRDb25uZWN0aW9uID0gKG5hbWUsIHRyYW5zcG9ydFR5cGUsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUobmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucyk7XG52YXIgZ2V0SG9zdENvbm5lY3Rpb24gPSAobmFtZSA9IFwiJGhvc3QkXCIsIG9wdGlvbnMpID0+IGdldENvbm5lY3Rpb24obmFtZSwgXCJpbnRlcm5hbFwiLCB7XG5cdC4uLm9wdGlvbnMsXG5cdG1ldGFkYXRhOiB7XG5cdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0aXNIb3N0OiB0cnVlXG5cdH1cbn0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVHJhbnNwb3J0LnRzXG52YXIgVHJhbnNwb3J0QWRhcHRlciA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfdHJhbnNwb3J0VHlwZTtcblx0X29wdGlvbnM7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pc0F0dGFjaGVkID0gZmFsc2U7XG5cdF9pbmJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfb3V0Ym91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogNTAgfSk7XG5cdF9hY2NlcHRDYWxsYmFjayA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX3RyYW5zcG9ydFR5cGUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl90cmFuc3BvcnRUeXBlID0gX3RyYW5zcG9ydFR5cGU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQoe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0dHJhbnNmZXJhYmxlOiB0cmFuc2ZlclxuXHRcdH0pO1xuXHR9XG5cdGdldCBvbkluY29taW5nQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRzdWJzY3JpYmVJbmNvbWluZyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHNldEFjY2VwdENhbGxiYWNrKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5fYWNjZXB0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblx0fVxuXHRfZW1pdEluY29taW5nQ29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHR9XG5cdGFzeW5jIF9zaG91bGRBY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcblx0XHRpZiAoIXRoaXMuX2FjY2VwdENhbGxiYWNrKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcy5fYWNjZXB0Q2FsbGJhY2soY29ubmVjdGlvbik7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNBdHRhY2hlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNBdHRhY2hlZDtcblx0fVxuXHRnZXQgaW5ib3VuZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZDtcblx0fVxuXHRnZXQgb3V0Ym91bmQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kO1xuXHR9XG59O1xudmFyIFdvcmtlclRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF93b3JrZXJTb3VyY2U7XG5cdF93b3JrZXIgPSBudWxsO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9vd25Xb3JrZXIgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF93b3JrZXJTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcIndvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl93b3JrZXJTb3VyY2UgPSBfd29ya2VyU291cmNlO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX3dvcmtlciA9IHRoaXMuX3Jlc29sdmVXb3JrZXIoKTtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3dvcmtlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpLCAoZXJyKSA9PiB0aGlzLl9pbmJvdW5kLmVycm9yKGVycikpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdGlmICh0aGlzLl9vd25Xb3JrZXIgJiYgdGhpcy5fd29ya2VyKSB0aGlzLl93b3JrZXIudGVybWluYXRlKCk7XG5cdFx0dGhpcy5fd29ya2VyID0gbnVsbDtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRyZXF1ZXN0Q2hhbm5lbChjaGFubmVsLCBzZW5kZXIsIG9wdGlvbnMsIHBvcnQpIHtcblx0XHRjb25zdCB0cmFuc2ZlciA9IHBvcnQgPyBbcG9ydF0gOiBbXTtcblx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRtZXNzYWdlUG9ydDogcG9ydCxcblx0XHRcdHJlcUlkOiBVVUlEdjQoKVxuXHRcdH0sIHsgdHJhbnNmZXIgfSk7XG5cdH1cblx0Y29ubmVjdENoYW5uZWwoY2hhbm5lbCwgc2VuZGVyLCBwb3J0LCBvcHRpb25zKSB7XG5cdFx0Y29uc3QgdHJhbnNmZXIgPSBwb3J0ID8gW3BvcnRdIDogW107XG5cdFx0dGhpcy5fd29ya2VyPy5wb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RDaGFubmVsXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cG9ydCxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRyZXFJZDogVVVJRHY0KClcblx0XHR9LCB7IHRyYW5zZmVyIH0pO1xuXHR9XG5cdGxpc3RDaGFubmVscygpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gVVVJRHY0KCk7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gbXNnO1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSBcImNoYW5uZWxMaXN0XCIgJiYgZGF0YS5yZXFJZCA9PT0gcmVxSWQpIHtcblx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKGRhdGEuY2hhbm5lbHMgPz8gW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3ViID0gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdFx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJsaXN0Q2hhbm5lbHNcIixcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHRyZXNvbHZlKFtdKTtcblx0XHRcdH0sIDVlMyk7XG5cdFx0fSk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsQ3JlYXRlZFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiY2hhbm5lbENvbm5lY3RlZFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcIndvcmtlclwiLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIixcblx0XHRcdGRhdGEsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0X3Jlc29sdmVXb3JrZXIoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlclNvdXJjZSBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIHRoaXMuX3dvcmtlclNvdXJjZTtcblx0XHR0aGlzLl9vd25Xb3JrZXIgPSB0cnVlO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLl93b3JrZXJTb3VyY2UoKTtcblx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcih0aGlzLl93b3JrZXJTb3VyY2UuaHJlZiwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fd29ya2VyU291cmNlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZih0aGlzLl93b3JrZXJTb3VyY2UucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0XHRpZiAoVVJMLmNhblBhcnNlKHRoaXMuX3dvcmtlclNvdXJjZSkgfHwgdGhpcy5fd29ya2VyU291cmNlLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYodGhpcy5fd29ya2VyU291cmNlKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGhpcy5fd29ya2VyU291cmNlXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB3b3JrZXIgc291cmNlXCIpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0O1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwibWVzc2FnZS1wb3J0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3BvcnQgPSBfcG9ydDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3BvcnQpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnLCBtc2cudHJhbnNmZXJhYmxlKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9wb3J0LmNsb3NlKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9iY05hbWU7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRfY29ubmVjdGVkUGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2JjTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwiYnJvYWRjYXN0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX2JjTmFtZSA9IF9iY05hbWU7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0dGhpcy5fY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHRoaXMuX2JjTmFtZSA/PyB0aGlzLl9jaGFubmVsTmFtZSk7XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhPy5zZW5kZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKTtcblx0XHR9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuX2Fubm91bmNlUHJlc2VuY2UoKTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImFubm91bmNlXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSAhdGhpcy5fY29ubmVjdGVkUGVlcnMuaGFzKHNlbmRlcik7XG5cdFx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5hZGQoc2VuZGVyKTtcblx0XHRcdGlmIChpc05ldykge1xuXHRcdFx0XHR0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwgPz8gdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyLFxuXHRcdFx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCIsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiYW5ub3VuY2VcIikgdGhpcy5fY2hhbm5lbD8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdHR5cGU6IFwiYW5ub3VuY2UtYWNrXCIsXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdF9hbm5vdW5jZVByZXNlbmNlKCkge1xuXHRcdHRoaXMuX2NoYW5uZWw/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiYW5ub3VuY2VcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRQZWVycygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZFBlZXJzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2hhbm5lbD8uY2xvc2UoKTtcblx0XHR0aGlzLl9jaGFubmVsID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0ZWRQZWVycy5jbGVhcigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIFdlYlNvY2tldFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BlbmRpbmcgPSBbXTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jb25uZWN0ZWRDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdXJsLCBfcHJvdG9jb2xzLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJ3ZWJzb2NrZXRcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fdXJsID0gX3VybDtcblx0XHR0aGlzLl9wcm90b2NvbHMgPSBfcHJvdG9jb2xzO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHVybCA9IHR5cGVvZiB0aGlzLl91cmwgPT09IFwic3RyaW5nXCIgPyB0aGlzLl91cmwgOiB0aGlzLl91cmwuaHJlZjtcblx0XHR0aGlzLl93cyA9IG5ldyBXZWJTb2NrZXQodXJsLCB0aGlzLl9wcm90b2NvbHMpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0XHRcdHRoaXMuX3dzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0fSBlbHNlIHRoaXMuX3BlbmRpbmcucHVzaChtc2cpO1xuXHRcdH07XG5cdFx0dGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcihcIm9wZW5cIiwgKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcIm9wZW5cIik7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLmZvckVhY2goKG0pID0+IHNlbmQobSkpO1xuXHRcdFx0dGhpcy5fcGVuZGluZyA9IFtdO1xuXHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogXCJzZXJ2ZXJcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkYXRhKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKSwgKGVycikgPT4gdGhpcy5faW5ib3VuZC5lcnJvcihlcnIpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5faW5ib3VuZC5jb21wbGV0ZSgpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsLWNvbm5lY3RcIiB8fCBkYXRhPy50eXBlID09PSBcInBlZXItY29ubmVjdFwiIHx8IGRhdGE/LnR5cGUgPT09IFwiam9pblwiKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gZGF0YS5jaGFubmVsID8/IGRhdGEucm9vbSA/PyB0aGlzLl9jaGFubmVsTmFtZTtcblx0XHRcdGlmICghdGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuaGFzKGNoYW5uZWwpKSB7XG5cdFx0XHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRcdFx0dGhpcy5fZW1pdEluY29taW5nQ29ubmVjdGlvbih7XG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IGRhdGEucGVlcklkID8/IFwicmVtb3RlXCIsXG5cdFx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdGpvaW5DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJqb2luXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGxlYXZlQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuZGVsZXRlKGNoYW5uZWwpO1xuXHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImxlYXZlXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGdldCBjb25uZWN0ZWRDaGFubmVscygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzXTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fd3M/LmNsb3NlKCk7XG5cdFx0dGhpcy5fd3MgPSBudWxsO1xuXHRcdHRoaXMuX2Nvbm5lY3RlZENoYW5uZWxzLmNsZWFyKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cblx0Z2V0IHdzKCkge1xuXHRcdHJldHVybiB0aGlzLl93cztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcnVudGltZVwiLCBvcHRpb25zKTtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwiY2hyb21lLXJ1bnRpbWVcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwiY2hyb21lLXJ1bnRpbWVcIiwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSwgdm9pZCAwKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBDaHJvbWVUYWJzVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfdGFiSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS10YWJzXCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUudGFicykgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdGFiSWQgIT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdFx0XHRjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0aGlzLl90YWJJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRzZXRUYWJJZCh0YWJJZCkge1xuXHRcdHRoaXMuX3RhYklkID0gdGFiSWQ7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydFRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0ID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9wb3J0TmFtZSwgX3RhYklkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtcG9ydFwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9wb3J0TmFtZSA9IF9wb3J0TmFtZTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHR0aGlzLl9wb3J0ID0gdGhpcy5fdGFiSWQgIT0gbnVsbCAmJiBjaHJvbWUudGFicz8uY29ubmVjdCA/IGNocm9tZS50YWJzLmNvbm5lY3QodGhpcy5fdGFiSWQsIHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSk7XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IHRoaXMuX3BvcnQ/LnBvc3RNZXNzYWdlKG1zZyk7XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKG1zZykgPT4gdGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIob25NZXNzYWdlKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5fcG9ydD8ub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKG9uTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9wb3J0Py5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHR0aGlzLl9wb3J0ID0gbnVsbDtcblx0XHR9O1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2V4dGVybmFsSWQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9leHRlcm5hbElkLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJjaHJvbWUtZXh0ZXJuYWxcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fZXh0ZXJuYWxJZCA9IF9leHRlcm5hbElkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSAobXNnKSA9PiBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh0aGlzLl9leHRlcm5hbElkLCBtc2cpO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4ge1xuXHRcdFx0dGhpcy5faW5ib3VuZC5uZXh0KG1zZyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbD8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5yZW1vdmVMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2lzSG9zdDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2lzSG9zdCA9IGZhbHNlLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJzZXJ2aWNlLXdvcmtlclwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9pc0hvc3QgPSBfaXNIb3N0O1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMuX2lzSG9zdCA/IFwic2VydmljZS13b3JrZXItaG9zdFwiIDogXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRhcmdldCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRhcmdldCwgKGRhdGEpID0+IHRoaXMuX2luYm91bmQubmV4dChkYXRhKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZywgbXNnLnRyYW5zZmVyYWJsZSkpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgU2VsZlRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcInNlbGZcIiwgb3B0aW9ucyk7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlbGZcIik7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwic2VsZlwiLCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZGF0YSkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0X2hhbmRsZUluY29taW5nKGRhdGEpIHtcblx0XHRpZiAoZGF0YT8udHlwZSA9PT0gXCJjcmVhdGVDaGFubmVsXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjb25uZWN0Q2hhbm5lbFwiKSB0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cG9ydDogZGF0YS5tZXNzYWdlUG9ydCA/PyBkYXRhLnBvcnQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0dGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpO1xuXHR9XG5cdG5vdGlmeUNoYW5uZWxDcmVhdGVkKGNoYW5uZWwsIHNlbmRlciwgcmVxSWQpIHtcblx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNoYW5uZWxDcmVhdGVkXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0d29ya2VyOiAobmFtZSwgc291cmNlLCBvcHRzKSA9PiBuZXcgV29ya2VyVHJhbnNwb3J0KG5hbWUsIHNvdXJjZSwgb3B0cyksXG5cdG1lc3NhZ2VQb3J0OiAobmFtZSwgcG9ydCwgb3B0cykgPT4gbmV3IE1lc3NhZ2VQb3J0VHJhbnNwb3J0KG5hbWUsIHBvcnQsIG9wdHMpLFxuXHRicm9hZGNhc3Q6IChuYW1lLCBiY05hbWUsIG9wdHMpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0KG5hbWUsIGJjTmFtZSwgb3B0cyksXG5cdHdlYnNvY2tldDogKG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSA9PiBuZXcgV2ViU29ja2V0VHJhbnNwb3J0KG5hbWUsIHVybCwgcHJvdG9jb2xzLCBvcHRzKSxcblx0Y2hyb21lUnVudGltZTogKG5hbWUsIG9wdHMpID0+IG5ldyBDaHJvbWVSdW50aW1lVHJhbnNwb3J0KG5hbWUsIG9wdHMpLFxuXHRjaHJvbWVUYWJzOiAobmFtZSwgdGFiSWQsIG9wdHMpID0+IG5ldyBDaHJvbWVUYWJzVHJhbnNwb3J0KG5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lUG9ydDogKG5hbWUsIHBvcnROYW1lLCB0YWJJZCwgb3B0cykgPT4gbmV3IENocm9tZVBvcnRUcmFuc3BvcnQobmFtZSwgcG9ydE5hbWUsIHRhYklkLCBvcHRzKSxcblx0Y2hyb21lRXh0ZXJuYWw6IChuYW1lLCBleHRlcm5hbElkLCBvcHRzKSA9PiBuZXcgQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQobmFtZSwgZXh0ZXJuYWxJZCwgb3B0cyksXG5cdHNlcnZpY2VXb3JrZXI6IChuYW1lLCBpc0hvc3QsIG9wdHMpID0+IG5ldyBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0KG5hbWUsIGlzSG9zdCwgb3B0cyksXG5cdHNlbGY6IChuYW1lLCBvcHRzKSA9PiBuZXcgU2VsZlRyYW5zcG9ydChuYW1lLCBvcHRzKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb25PYnNlcnZlcih0cmFuc3BvcnRzKSB7XG5cdGNvbnN0IGNvbm5lY3Rpb25zID0gW107XG5cdGNvbnN0IHN1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHRyYW5zcG9ydC5zdWJzY3JpYmVJbmNvbWluZygoY29ubikgPT4ge1xuXHRcdGNvbm5lY3Rpb25zLnB1c2goY29ubik7XG5cdFx0c3ViamVjdC5uZXh0KGNvbm4pO1xuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRzdWJzY3JpYmU6IChoYW5kbGVyKSA9PiBzdWJqZWN0LnN1YnNjcmliZShoYW5kbGVyKSxcblx0XHRnZXRDb25uZWN0aW9uczogKCkgPT4gWy4uLmNvbm5lY3Rpb25zXVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9zdG9yYWdlL1N0b3JhZ2UudHNcbnZhciBEQl9OQU1FID0gXCJ1bmlmb3JtX2NoYW5uZWxzXCI7XG52YXIgREJfVkVSU0lPTiA9IDE7XG52YXIgU1RPUkVTID0ge1xuXHRNRVNTQUdFUzogXCJtZXNzYWdlc1wiLFxuXHRNQUlMQk9YOiBcIm1haWxib3hcIixcblx0UEVORElORzogXCJwZW5kaW5nXCIsXG5cdEVYQ0hBTkdFOiBcImV4Y2hhbmdlXCIsXG5cdFRSQU5TQUNUSU9OUzogXCJ0cmFuc2FjdGlvbnNcIlxufTtcbnZhciBDaGFubmVsU3RvcmFnZSA9IGNsYXNzIHtcblx0X2RiID0gbnVsbDtcblx0X2lzT3BlbiA9IGZhbHNlO1xuXHRfb3BlblByb21pc2UgPSBudWxsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9tZXNzYWdlVXBkYXRlcyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfZXhjaGFuZ2VVcGRhdGVzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBvcGVuKCkge1xuXHRcdGlmICh0aGlzLl9kYiAmJiB0aGlzLl9pc09wZW4pIHJldHVybiB0aGlzLl9kYjtcblx0XHRpZiAodGhpcy5fb3BlblByb21pc2UpIHJldHVybiB0aGlzLl9vcGVuUHJvbWlzZTtcblx0XHR0aGlzLl9vcGVuUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCBEQl9WRVJTSU9OKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fb3BlblByb21pc2UgPSBudWxsO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBvcGVuIEluZGV4ZWREQlwiKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX2lzT3BlbiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX29wZW5Qcm9taXNlID0gbnVsbDtcblx0XHRcdFx0cmVzb2x2ZSh0aGlzLl9kYik7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXHRcdFx0XHR0aGlzLl9jcmVhdGVTdG9yZXMoZGIpO1xuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5fb3BlblByb21pc2U7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2RiKSB7XG5cdFx0XHR0aGlzLl9kYi5jbG9zZSgpO1xuXHRcdFx0dGhpcy5fZGIgPSBudWxsO1xuXHRcdFx0dGhpcy5faXNPcGVuID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdF9jcmVhdGVTdG9yZXMoZGIpIHtcblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLk1FU1NBR0VTKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcInN0YXR1c1wiLCBcInN0YXR1c1wiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwicmVjaXBpZW50XCIsIFwicmVjaXBpZW50XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcImNoYW5uZWxfc3RhdHVzXCIsIFtcImNoYW5uZWxcIiwgXCJzdGF0dXNcIl0sIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHR9XG5cdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFUy5NQUlMQk9YKSkge1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gsIHsga2V5UGF0aDogXCJpZFwiIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbFwiLCBcImNoYW5uZWxcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWFpbGJveFN0b3JlLmNyZWF0ZUluZGV4KFwicHJpb3JpdHlcIiwgXCJwcmlvcml0eVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuY3JlYXRlSW5kZXgoXCJleHBpcmVzQXRcIiwgXCJleHBpcmVzQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlBFTkRJTkcpKSB7XG5cdFx0XHRjb25zdCBwZW5kaW5nU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShTVE9SRVMuUEVORElORywgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjaGFubmVsXCIsIFwiY2hhbm5lbFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRwZW5kaW5nU3RvcmUuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLkVYQ0hBTkdFKSkge1xuXHRcdFx0Y29uc3QgZXhjaGFuZ2VTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSwgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRleGNoYW5nZVN0b3JlLmNyZWF0ZUluZGV4KFwia2V5XCIsIFwia2V5XCIsIHsgdW5pcXVlOiB0cnVlIH0pO1xuXHRcdFx0ZXhjaGFuZ2VTdG9yZS5jcmVhdGVJbmRleChcIm93bmVyXCIsIFwib3duZXJcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLlRSQU5TQUNUSU9OUykpIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5UUkFOU0FDVElPTlMsIHsga2V5UGF0aDogXCJpZFwiIH0pLmNyZWF0ZUluZGV4KFwiY3JlYXRlZEF0XCIsIFwiY3JlYXRlZEF0XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0fVxuXHRhc3luYyBkZWZlcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlZE1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IG1lc3NhZ2Uuc2VuZGVyID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cmVjaXBpZW50OiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiBtZXNzYWdlLnBheWxvYWQsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJpb3JpdHk6IG9wdGlvbnMucHJpb3JpdHkgPz8gMCxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGV4cGlyZXNBdDogb3B0aW9ucy5leHBpcmVzSW4gPyBEYXRlLm5vdygpICsgb3B0aW9ucy5leHBpcmVzSW4gOiBudWxsLFxuXHRcdFx0cmV0cnlDb3VudDogMCxcblx0XHRcdG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyAzLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGFcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFtTVE9SRVMuTUVTU0FHRVMsIFNUT1JFUy5NQUlMQk9YXSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1N0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IG1haWxib3hTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuYWRkKHN0b3JlZE1lc3NhZ2UpO1xuXHRcdFx0bWFpbGJveFN0b3JlLmFkZChzdG9yZWRNZXNzYWdlKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQoc3RvcmVkTWVzc2FnZSk7XG5cdFx0XHRcdHJlc29sdmUoc3RvcmVkTWVzc2FnZS5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlZmVyIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldERlZmVycmVkTWVzc2FnZXMoY2hhbm5lbCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IGluZGV4ID0gb3B0aW9ucy5zdGF0dXMgPyBzdG9yZS5pbmRleChcImNoYW5uZWxfc3RhdHVzXCIpIDogc3RvcmUuaW5kZXgoXCJjaGFubmVsXCIpO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBvcHRpb25zLnN0YXR1cyA/IElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIG9wdGlvbnMuc3RhdHVzXSkgOiBJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpO1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4LmdldEFsbChxdWVyeSwgb3B0aW9ucy5saW1pdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdHMgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKG9wdGlvbnMub2Zmc2V0KSByZXN1bHRzID0gcmVzdWx0cy5zbGljZShvcHRpb25zLm9mZnNldCk7XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0cyk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGRlZmVycmVkIG1lc3NhZ2VzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwcm9jZXNzTmV4dFBlbmRpbmcoY2hhbm5lbCkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUykuaW5kZXgoXCJjaGFubmVsX3N0YXR1c1wiKS5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoW2NoYW5uZWwsIFwicGVuZGluZ1wiXSkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRjdXJzb3IudXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdHRoaXMuX21lc3NhZ2VVcGRhdGVzLm5leHQobWVzc2FnZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlKTtcblx0XHRcdFx0fSBlbHNlIHJlc29sdmUobnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcHJvY2VzcyBwZW5kaW5nIG1lc3NhZ2VcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIG1hcmtEZWxpdmVyZWQobWVzc2FnZUlkKSB7XG5cdFx0YXdhaXQgdGhpcy5fdXBkYXRlTWVzc2FnZVN0YXR1cyhtZXNzYWdlSWQsIFwiZGVsaXZlcmVkXCIpO1xuXHR9XG5cdGFzeW5jIG1hcmtGYWlsZWQobWVzc2FnZUlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZS5yZXRyeUNvdW50Kys7XG5cdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UucmV0cnlDb3VudCA8IG1lc3NhZ2UubWF4UmV0cmllcykgbWVzc2FnZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRcdFx0ZWxzZSBtZXNzYWdlLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0XHRcdHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0cmVzb2x2ZShtZXNzYWdlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIG1hcmsgbWVzc2FnZSBhcyBmYWlsZWRcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF91cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VJZCwgc3RhdHVzKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUVTU0FHRVMsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KG1lc3NhZ2VJZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0XHRcdG1lc3NhZ2UudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRzdG9yZS5wdXQobWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2Ugc3RhdHVzXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRNYWlsYm94KGNoYW5uZWwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZShTVE9SRVMuTUFJTEJPWCkuaW5kZXgoXCJjaGFubmVsXCIpLmdldEFsbChJREJLZXlSYW5nZS5vbmx5KGNoYW5uZWwpLCBvcHRpb25zLmxpbWl0KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAob3B0aW9ucy5zb3J0QnkgPT09IFwicHJpb3JpdHlcIikgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSk7XG5cdFx0XHRcdGVsc2UgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdCAtIGEuY3JlYXRlZEF0KTtcblx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbWFpbGJveFwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0TWFpbGJveFN0YXRzKGNoYW5uZWwpIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0RGVmZXJyZWRNZXNzYWdlcyhjaGFubmVsKTtcblx0XHRjb25zdCBzdGF0cyA9IHtcblx0XHRcdHRvdGFsOiBtZXNzYWdlcy5sZW5ndGgsXG5cdFx0XHRwZW5kaW5nOiAwLFxuXHRcdFx0cHJvY2Vzc2luZzogMCxcblx0XHRcdGRlbGl2ZXJlZDogMCxcblx0XHRcdGZhaWxlZDogMCxcblx0XHRcdGV4cGlyZWQ6IDBcblx0XHR9O1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Zm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPCBub3cpIHN0YXRzLmV4cGlyZWQrKztcblx0XHRlbHNlIHN0YXRzW21zZy5zdGF0dXNdKys7XG5cdFx0cmV0dXJuIHN0YXRzO1xuXHR9XG5cdGFzeW5jIGNsZWFyTWFpbGJveChjaGFubmVsKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuTUFJTEJPWCwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBpbmRleCA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKS5pbmRleChcImNoYW5uZWxcIik7XG5cdFx0XHRsZXQgZGVsZXRlZENvdW50ID0gMDtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleC5vcGVuQ3Vyc29yKElEQktleVJhbmdlLm9ubHkoY2hhbm5lbCkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoY3Vyc29yKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGRlbGV0ZWRDb3VudCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhciBtYWlsYm94XCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyByZWdpc3RlclBlbmRpbmcob3BlcmF0aW9uKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRjb25zdCBwZW5kaW5nID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBvcGVyYXRpb24udHlwZSxcblx0XHRcdGRhdGE6IG9wZXJhdGlvbi5kYXRhLFxuXHRcdFx0bWV0YWRhdGE6IG9wZXJhdGlvbi5tZXRhZGF0YSxcblx0XHRcdGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdHN0YXR1czogXCJwZW5kaW5nXCJcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5hZGQocGVuZGluZyk7XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZShwZW5kaW5nLmlkKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWdpc3RlciBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ09wZXJhdGlvbnMoKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5pbmRleChcImNoYW5uZWxcIikuZ2V0QWxsKElEQktleVJhbmdlLm9ubHkodGhpcy5fY2hhbm5lbE5hbWUpKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgcGVuZGluZyBvcGVyYXRpb25zXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBjb21wbGV0ZVBlbmRpbmcob3BlcmF0aW9uSWQpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5kZWxldGUob3BlcmF0aW9uSWQpO1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjb21wbGV0ZSBwZW5kaW5nIG9wZXJhdGlvblwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgYXdhaXRQZW5kaW5nKG9wZXJhdGlvbklkLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDNlNDtcblx0XHRjb25zdCBwb2xsSW50ZXJ2YWwgPSBvcHRpb25zLnBvbGxJbnRlcnZhbCA/PyAxMDA7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblx0XHR3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXQpIHtcblx0XHRcdGNvbnN0IHBlbmRpbmcgPSBhd2FpdCB0aGlzLl9nZXRQZW5kaW5nQnlJZChvcGVyYXRpb25JZCk7XG5cdFx0XHRpZiAoIXBlbmRpbmcpIHJldHVybiBudWxsO1xuXHRcdFx0aWYgKHBlbmRpbmcuc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29tcGxldGVQZW5kaW5nKG9wZXJhdGlvbklkKTtcblx0XHRcdFx0cmV0dXJuIHBlbmRpbmcucmVzdWx0O1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgcG9sbEludGVydmFsKSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcihgUGVuZGluZyBvcGVyYXRpb24gJHtvcGVyYXRpb25JZH0gdGltZWQgb3V0YCk7XG5cdH1cblx0YXN5bmMgX2dldFBlbmRpbmdCeUlkKGlkKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5QRU5ESU5HLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HKS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0ID8/IG51bGwpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHBlbmRpbmcgb3BlcmF0aW9uXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVB1dChrZXksIHZhbHVlLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGtleSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0b3duZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2hhcmVkV2l0aDogb3B0aW9ucy5zaGFyZWRXaXRoID8/IFtcIipcIl0sXG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0Y3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0dXBkYXRlZEF0OiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuRVhDSEFOR0UsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuRVhDSEFOR0UpO1xuXHRcdFx0Y29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmluZGV4KFwia2V5XCIpLmdldChrZXkpO1xuXHRcdFx0Z2V0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0XHRcdHJlY29yZC5pZCA9IGV4aXN0aW5nLmlkO1xuXHRcdFx0XHRcdHJlY29yZC52ZXJzaW9uID0gZXhpc3RpbmcudmVyc2lvbiArIDE7XG5cdFx0XHRcdFx0cmVjb3JkLmNyZWF0ZWRBdCA9IGV4aXN0aW5nLmNyZWF0ZWRBdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9leGNoYW5nZVVwZGF0ZXMubmV4dChyZWNvcmQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlY29yZC5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHB1dCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUdldChrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSkuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl9jYW5BY2Nlc3NFeGNoYW5nZShyZWNvcmQpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShudWxsKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZShyZWNvcmQudmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZURlbGV0ZShrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCBnZXRSZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gZ2V0UmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQub3duZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3JlLmRlbGV0ZShyZWNvcmQuaWQpO1xuXHRcdFx0fTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGRlbGV0ZSBleGNoYW5nZSBkYXRhXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZUxvY2soa2V5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gM2U0O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghcmVjb3JkKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWNvcmQubG9jayAmJiByZWNvcmQubG9jay5ob2xkZXIgIT09IHRoaXMuX2NoYW5uZWxOYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHJlY29yZC5sb2NrLmV4cGlyZXNBdCA+IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZWNvcmQubG9jayA9IHtcblx0XHRcdFx0XHRob2xkZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdGFjcXVpcmVkQXQ6IERhdGUubm93KCksXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdGltZW91dFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZWNvcmQudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYWNxdWlyZSBsb2NrXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBleGNoYW5nZVVubG9jayhrZXkpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQgJiYgcmVjb3JkLmxvY2s/LmhvbGRlciA9PT0gdGhpcy5fY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0XHRkZWxldGUgcmVjb3JkLmxvY2s7XG5cdFx0XHRcdFx0cmVjb3JkLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG5cdFx0XHRcdFx0c3RvcmUucHV0KHJlY29yZCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbGVhc2UgbG9ja1wiKSk7XG5cdFx0fSk7XG5cdH1cblx0X2NhbkFjY2Vzc0V4Y2hhbmdlKHJlY29yZCkge1xuXHRcdGlmIChyZWNvcmQub3duZXIgPT09IHRoaXMuX2NoYW5uZWxOYW1lKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXMoXCIqXCIpKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gcmVjb3JkLnNoYXJlZFdpdGguaW5jbHVkZXModGhpcy5fY2hhbm5lbE5hbWUpO1xuXHR9XG5cdGFzeW5jIGJlZ2luVHJhbnNhY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBDaGFubmVsVHJhbnNhY3Rpb24odGhpcyk7XG5cdH1cblx0YXN5bmMgZXhlY3V0ZVRyYW5zYWN0aW9uKG9wZXJhdGlvbnMpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHN0b3JlTmFtZXMgPSBuZXcgU2V0KG9wZXJhdGlvbnMubWFwKChvcCkgPT4gb3Auc3RvcmUpKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihBcnJheS5mcm9tKHN0b3JlTmFtZXMpLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGZvciAoY29uc3Qgb3Agb2Ygb3BlcmF0aW9ucykge1xuXHRcdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKG9wLnN0b3JlKTtcblx0XHRcdFx0c3dpdGNoIChvcC50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcInB1dFwiOlxuXHRcdFx0XHRcdFx0aWYgKG9wLnZhbHVlICE9PSB2b2lkIDApIHN0b3JlLnB1dChvcC52YWx1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiZGVsZXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAob3Aua2V5ICE9PSB2b2lkIDApIHN0b3JlLmRlbGV0ZShvcC5rZXkpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInVwZGF0ZVwiOiBpZiAob3Aua2V5ICE9PSB2b2lkIDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGdldFJlcSA9IHN0b3JlLmdldChvcC5rZXkpO1xuXHRcdFx0XHRcdFx0Z2V0UmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGdldFJlcS5yZXN1bHQgJiYgb3AudmFsdWUpIHN0b3JlLnB1dCh7XG5cdFx0XHRcdFx0XHRcdFx0Li4uZ2V0UmVxLnJlc3VsdCxcblx0XHRcdFx0XHRcdFx0XHQuLi5vcC52YWx1ZVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gZmFpbGVkXCIpKTtcblx0XHR9KTtcblx0fVxuXHRvbk1lc3NhZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9tZXNzYWdlVXBkYXRlcy5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVyIH0pO1xuXHR9XG5cdG9uRXhjaGFuZ2VVcGRhdGUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9leGNoYW5nZVVwZGF0ZXMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRhc3luYyBjbGVhbnVwRXhwaXJlZCgpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oW1NUT1JFUy5NRVNTQUdFUywgU1RPUkVTLk1BSUxCT1hdLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzU3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuTUVTU0FHRVMpO1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gpO1xuXHRcdFx0bGV0IGRlbGV0ZWRDb3VudCA9IDA7XG5cdFx0XHRjb25zdCBtc2dSZXF1ZXN0ID0gbWVzc2FnZXNTdG9yZS5vcGVuQ3Vyc29yKCk7XG5cdFx0XHRtc2dSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY3Vyc29yID0gbXNnUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWFpbFJlcXVlc3QgPSBtYWlsYm94U3RvcmUub3BlbkN1cnNvcigpO1xuXHRcdFx0bWFpbFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSBtYWlsUmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtc2cgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykge1xuXHRcdFx0XHRcdFx0Y3Vyc29yLmRlbGV0ZSgpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoZGVsZXRlZENvdW50KTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBjbGVhbnVwIGV4cGlyZWRcIikpO1xuXHRcdH0pO1xuXHR9XG59O1xudmFyIENoYW5uZWxUcmFuc2FjdGlvbiA9IGNsYXNzIHtcblx0X3N0b3JhZ2U7XG5cdF9vcGVyYXRpb25zID0gW107XG5cdF9pc0NvbW1pdHRlZCA9IGZhbHNlO1xuXHRfaXNSb2xsZWRCYWNrID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF9zdG9yYWdlKSB7XG5cdFx0dGhpcy5fc3RvcmFnZSA9IF9zdG9yYWdlO1xuXHR9XG5cdHB1dChzdG9yZSwgdmFsdWUpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicHV0XCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZGVsZXRlKHN0b3JlLCBrZXkpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiZGVsZXRlXCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdGtleSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHVwZGF0ZShzdG9yZSwga2V5LCB1cGRhdGVzKSB7XG5cdFx0dGhpcy5fY2hlY2tTdGF0ZSgpO1xuXHRcdHRoaXMuX29wZXJhdGlvbnMucHVzaCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcInVwZGF0ZVwiLFxuXHRcdFx0c3RvcmUsXG5cdFx0XHRrZXksXG5cdFx0XHR2YWx1ZTogdXBkYXRlcyxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGFzeW5jIGNvbW1pdCgpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0aWYgKHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9pc0NvbW1pdHRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuZXhlY3V0ZVRyYW5zYWN0aW9uKHRoaXMuX29wZXJhdGlvbnMpO1xuXHRcdHRoaXMuX2lzQ29tbWl0dGVkID0gdHJ1ZTtcblx0fVxuXHRyb2xsYmFjaygpIHtcblx0XHR0aGlzLl9vcGVyYXRpb25zID0gW107XG5cdFx0dGhpcy5faXNSb2xsZWRCYWNrID0gdHJ1ZTtcblx0fVxuXHRnZXQgb3BlcmF0aW9uQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoO1xuXHR9XG5cdF9jaGVja1N0YXRlKCkge1xuXHRcdGlmICh0aGlzLl9pc0NvbW1pdHRlZCkgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSBjb21taXR0ZWRcIik7XG5cdFx0aWYgKHRoaXMuX2lzUm9sbGVkQmFjaykgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNhY3Rpb24gYWxyZWFkeSByb2xsZWQgYmFja1wiKTtcblx0fVxufTtcbnZhciBfc3RvcmFnZUluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRDaGFubmVsU3RvcmFnZShjaGFubmVsTmFtZSkge1xuXHRpZiAoIV9zdG9yYWdlSW5zdGFuY2VzLmhhcyhjaGFubmVsTmFtZSkpIF9zdG9yYWdlSW5zdGFuY2VzLnNldChjaGFubmVsTmFtZSwgbmV3IENoYW5uZWxTdG9yYWdlKGNoYW5uZWxOYW1lKSk7XG5cdHJldHVybiBfc3RvcmFnZUluc3RhbmNlcy5nZXQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gY2xvc2VBbGxTdG9yYWdlKCkge1xuXHRmb3IgKGNvbnN0IHN0b3JhZ2Ugb2YgX3N0b3JhZ2VJbnN0YW5jZXMudmFsdWVzKCkpIHN0b3JhZ2UuY2xvc2UoKTtcblx0X3N0b3JhZ2VJbnN0YW5jZXMuY2xlYXIoKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvY2hhbm5lbC9DaGFubmVsQ29udGV4dC50c1xudmFyIHdvcmtlckJhc2UgPSBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpO1xudmFyIHdvcmtlckNvZGUgPSB3b3JrZXJCYXNlLmxlbmd0aCA+IDAgPyBuZXcgVVJMKFwiLi4vdHJhbnNwb3J0L1dvcmtlci50c1wiLCB3b3JrZXJCYXNlKSA6IFwiXCI7XG52YXIgUmVtb3RlQ2hhbm5lbEhlbHBlciQxID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHQ7XG5cdF9vcHRpb25zO1xuXHRfY29ubmVjdGlvbjtcblx0X3N0b3JhZ2U7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsLCBfY29udGV4dCwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBfY2hhbm5lbDtcblx0XHR0aGlzLl9jb250ZXh0ID0gX2NvbnRleHQ7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKF9jaGFubmVsKTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UoX2NoYW5uZWwpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QocGF0aCwgYWN0aW9uLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0XHRsZXQgbm9ybWFsaXplZFBhdGggPSB0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiA/IFtwYXRoXSA6IHBhdGg7XG5cdFx0bGV0IG5vcm1hbGl6ZWRBY3Rpb24gPSBhY3Rpb247XG5cdFx0bGV0IG5vcm1hbGl6ZWRBcmdzID0gYXJncztcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbihwYXRoKSkge1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdG5vcm1hbGl6ZWRBY3Rpb24gPSBwYXRoO1xuXHRcdFx0bm9ybWFsaXplZFBhdGggPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuZ2V0SG9zdCgpPy5yZXF1ZXN0KG5vcm1hbGl6ZWRQYXRoLCBub3JtYWxpemVkQWN0aW9uLCBub3JtYWxpemVkQXJncywgb3B0aW9ucywgdGhpcy5fY2hhbm5lbCk7XG5cdH1cblx0YXN5bmMgZG9JbXBvcnRNb2R1bGUodXJsLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KFtdLCBXUmVmbGVjdEFjdGlvbi5JTVBPUlQsIFt1cmxdLCBvcHRpb25zKTtcblx0fVxuXHRhc3luYyBkZWZlck1lc3NhZ2UocGF5bG9hZCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmZXIoe1xuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fY29udGV4dC5ob3N0TmFtZSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0cGF5bG9hZFxuXHRcdH0sIG9wdGlvbnMpO1xuXHR9XG5cdGFzeW5jIGdldFBlbmRpbmdNZXNzYWdlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcmFnZS5nZXREZWZlcnJlZE1lc3NhZ2VzKHRoaXMuX2NoYW5uZWwsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0fVxuXHRnZXQgY29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbjtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdH1cbn07XG52YXIgQ2hhbm5lbEhhbmRsZXIkMSA9IGNsYXNzIHtcblx0X2NoYW5uZWw7XG5cdF9jb250ZXh0O1xuXHRfb3B0aW9ucztcblx0X2Nvbm5lY3Rpb247XG5cdF91bmlmaWVkO1xuXHRnZXQgX2ZvclJlc29sdmVzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLl9fZ2V0UHJpdmF0ZShcIl9wZW5kaW5nXCIpO1xuXHR9XG5cdGdldCBfc3Vic2NyaXB0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5fX2dldFByaXZhdGUoXCJfc3Vic2NyaXB0aW9uc1wiKTtcblx0fVxuXHRnZXQgX2Jyb2FkY2FzdHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuX19nZXRQcml2YXRlKFwiX3RyYW5zcG9ydHNcIik7XG5cdH1cblx0Y29uc3RydWN0b3IoX2NoYW5uZWwsIF9jb250ZXh0LCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IF9jaGFubmVsO1xuXHRcdHRoaXMuX2NvbnRleHQgPSBfY29udGV4dDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5fY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb25Qb29sKCkuZ2V0T3JDcmVhdGUoX2NoYW5uZWwsIFwiaW50ZXJuYWxcIiwgX29wdGlvbnMpO1xuXHRcdHRoaXMuX3VuaWZpZWQgPSBuZXcgVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogX2NoYW5uZWwsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IF9vcHRpb25zPy50aW1lb3V0XG5cdFx0fSk7XG5cdH1cblx0Y3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5vcm1hbGl6ZVRyYW5zcG9ydEJpbmRpbmcoYnJvYWRjYXN0ID8/IHRoaXMuX2NvbnRleHQuJGNyZWF0ZU9yVXNlRXhpc3RpbmdSZW1vdGUoY2hhbm5lbCwgb3B0aW9ucywgYnJvYWRjYXN0ID8/IG51bGwpPy5tZXNzYWdlQ2hhbm5lbD8ucG9ydDEpO1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBnZXREeW5hbWljVHJhbnNwb3J0VHlwZSh0cmFuc3BvcnQ/LnRhcmdldCA/PyB0cmFuc3BvcnQpO1xuXHRcdHRoaXMuX3VuaWZpZWQubGlzdGVuKHRyYW5zcG9ydD8udGFyZ2V0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWwgfSk7XG5cdFx0aWYgKHRyYW5zcG9ydCkge1xuXHRcdFx0dGhpcy5fYnJvYWRjYXN0cz8uc2V0Py4oY2hhbm5lbCwgdHJhbnNwb3J0KTtcblx0XHRcdGlmICghKHRyYW5zcG9ydFR5cGUgPT09IFwic2VsZlwiICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PT0gXCJ1bmRlZmluZWRcIikpIHRoaXMuX3VuaWZpZWQuY29ubmVjdCh0cmFuc3BvcnQsIHsgdGFyZ2V0Q2hhbm5lbDogY2hhbm5lbCB9KTtcblx0XHRcdHRoaXMuX2NvbnRleHQuJHJlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRcdGxvY2FsQ2hhbm5lbDogdGhpcy5fY2hhbm5lbCxcblx0XHRcdFx0cmVtb3RlQ2hhbm5lbDogY2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsLFxuXHRcdFx0XHRkaXJlY3Rpb246IFwib3V0Z29pbmdcIixcblx0XHRcdFx0dHJhbnNwb3J0VHlwZVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm5vdGlmeUNoYW5uZWwoY2hhbm5lbCwge1xuXHRcdFx0XHRjb250ZXh0SWQ6IHRoaXMuX2NvbnRleHQuaWQsXG5cdFx0XHRcdGNvbnRleHROYW1lOiB0aGlzLl9jb250ZXh0Lmhvc3ROYW1lXG5cdFx0XHR9LCBcImNvbm5lY3RcIik7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGNoYW5uZWwsIHRoaXMuX2NvbnRleHQsIG9wdGlvbnMpO1xuXHR9XG5cdGdldENoYW5uZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWw7XG5cdH1cblx0Z2V0IGNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb247XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSwgdG9DaGFubmVsID0gXCJ3b3JrZXJcIikge1xuXHRcdGxldCBub3JtYWxpemVkUGF0aCA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gW3BhdGhdIDogcGF0aDtcblx0XHRsZXQgbm9ybWFsaXplZEFyZ3MgPSBhcmdzO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFjdGlvbikgJiYgaXNSZWZsZWN0QWN0aW9uKHBhdGgpKSB7XG5cdFx0XHR0b0NoYW5uZWwgPSBvcHRpb25zO1xuXHRcdFx0b3B0aW9ucyA9IGFyZ3M7XG5cdFx0XHRub3JtYWxpemVkQXJncyA9IGFjdGlvbjtcblx0XHRcdGFjdGlvbiA9IHBhdGg7XG5cdFx0XHRub3JtYWxpemVkUGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5pbnZva2UodG9DaGFubmVsLCBhY3Rpb24sIG5vcm1hbGl6ZWRQYXRoID8/IFtdLCBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRBcmdzKSA/IG5vcm1hbGl6ZWRBcmdzIDogW25vcm1hbGl6ZWRBcmdzXSk7XG5cdH1cblx0cmVzb2x2ZVJlc3BvbnNlKHJlcUlkLCByZXN1bHQpIHtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5nZXQocmVxSWQpPy5yZXNvbHZlPy4ocmVzdWx0KTtcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5fZm9yUmVzb2x2ZXMuZ2V0KHJlcUlkKT8ucHJvbWlzZTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5kZWxldGUocmVxSWQpO1xuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cdGFzeW5jIGhhbmRsZUFuZFJlc3BvbnNlKHJlcXVlc3QsIHJlcUlkLCByZXNwb25zZUZuKSB7fVxuXHRub3RpZnlDaGFubmVsKHRhcmdldENoYW5uZWwsIHBheWxvYWQgPSB7fSwgdHlwZSA9IFwibm90aWZ5XCIpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5ub3RpZnkodGFyZ2V0Q2hhbm5lbCwge1xuXHRcdFx0Li4ucGF5bG9hZCxcblx0XHRcdGZyb206IHRoaXMuX2NoYW5uZWwsXG5cdFx0XHR0bzogdGFyZ2V0Q2hhbm5lbFxuXHRcdH0sIHR5cGUpO1xuXHR9XG5cdGdldENvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLmNvbm5lY3RlZENoYW5uZWxzO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9mb3JSZXNvbHZlcy5jbGVhcigpO1xuXHRcdHRoaXMuX2Jyb2FkY2FzdHM/LnZhbHVlcz8uKCk/LmZvckVhY2goKHRyYW5zcG9ydCkgPT4gdHJhbnNwb3J0LmNsb3NlPy4oKSk7XG5cdFx0dGhpcy5fYnJvYWRjYXN0cz8uY2xlYXI/LigpO1xuXHRcdHRoaXMuX3VuaWZpZWQuY2xvc2UoKTtcblx0fVxuXHRnZXQgdW5pZmllZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZDtcblx0fVxufTtcbnZhciBDaGFubmVsQ29udGV4dCA9IGNsYXNzIHtcblx0X29wdGlvbnM7XG5cdF9pZCA9IFVVSUR2NCgpO1xuXHRfaG9zdE5hbWU7XG5cdF9ob3N0ID0gbnVsbDtcblx0X2VuZHBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF91bmlmaWVkQnlDaGFubmVsID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3VuaWZpZWRDb25uZWN0aW9uU3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9yZW1vdGVDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9kZWZlcnJlZENoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2Nvbm5lY3Rpb25FdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAyMDAgfSk7XG5cdF9jb25uZWN0aW9uUmVnaXN0cnkgPSBuZXcgQ29ubmVjdGlvblJlZ2lzdHJ5KCgpID0+IFVVSUR2NCgpLCAoZXZlbnQpID0+IHRoaXMuX2VtaXRDb25uZWN0aW9uRXZlbnQoZXZlbnQpKTtcblx0X2Nsb3NlZCA9IGZhbHNlO1xuXHRfZ2xvYmFsU2VsZiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBfb3B0aW9ucy5uYW1lID8/IGBjdHgtJHt0aGlzLl9pZC5zbGljZSgwLCA4KX1gO1xuXHRcdGlmIChfb3B0aW9ucy51c2VHbG9iYWxTZWxmICE9PSBmYWxzZSkgdGhpcy5fZ2xvYmFsU2VsZiA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGw7XG5cdH1cblx0aW5pdEhvc3QobmFtZSkge1xuXHRcdGlmICh0aGlzLl9ob3N0ICYmICFuYW1lKSByZXR1cm4gdGhpcy5faG9zdDtcblx0XHRjb25zdCBob3N0TmFtZSA9IG5hbWUgPz8gdGhpcy5faG9zdE5hbWU7XG5cdFx0dGhpcy5faG9zdE5hbWUgPSBob3N0TmFtZTtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhob3N0TmFtZSkpIHtcblx0XHRcdHRoaXMuX2hvc3QgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KGhvc3ROYW1lKS5oYW5kbGVyO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2hvc3Q7XG5cdFx0fVxuXHRcdHRoaXMuX2hvc3QgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShob3N0TmFtZSwgdGhpcywgdGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lOiBob3N0TmFtZSxcblx0XHRcdGhhbmRsZXI6IHRoaXMuX2hvc3QsXG5cdFx0XHRjb25uZWN0aW9uOiB0aGlzLl9ob3N0LmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUobnVsbCksXG5cdFx0XHR1bmlmaWVkOiB0aGlzLl9ob3N0LnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQoaG9zdE5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKGhvc3ROYW1lLCB0aGlzLl9ob3N0LnVuaWZpZWQpO1xuXHRcdHJldHVybiB0aGlzLl9ob3N0O1xuXHR9XG5cdGdldEhvc3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QgPz8gdGhpcy5pbml0SG9zdCgpO1xuXHR9XG5cdGdldCBob3N0TmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faG9zdE5hbWU7XG5cdH1cblx0Z2V0IGlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pZDtcblx0fVxuXHRnZXQgb25Db25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzO1xuXHR9XG5cdHN1YnNjcmliZUNvbm5lY3Rpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkV2ZW50cy5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0bm90aWZ5Q29ubmVjdGlvbnMocGF5bG9hZCA9IHt9LCBxdWVyeSA9IHt9KSB7XG5cdFx0bGV0IHNlbnQgPSAwO1xuXHRcdGZvciAoY29uc3QgZW5kcG9pbnQgb2YgdGhpcy5fZW5kcG9pbnRzLnZhbHVlcygpKSB7XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRUYXJnZXRzID0gZW5kcG9pbnQuaGFuZGxlci5nZXRDb25uZWN0ZWRDaGFubmVscygpO1xuXHRcdFx0Zm9yIChjb25zdCByZW1vdGVDaGFubmVsIG9mIGNvbm5lY3RlZFRhcmdldHMpIHtcblx0XHRcdFx0aWYgKHF1ZXJ5LmxvY2FsQ2hhbm5lbCAmJiBxdWVyeS5sb2NhbENoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkucmVtb3RlQ2hhbm5lbCAmJiBxdWVyeS5yZW1vdGVDaGFubmVsICE9PSByZW1vdGVDaGFubmVsKSBjb250aW51ZTtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLnF1ZXJ5Q29ubmVjdGlvbnMoe1xuXHRcdFx0XHRcdGxvY2FsQ2hhbm5lbDogZW5kcG9pbnQubmFtZSxcblx0XHRcdFx0XHRyZW1vdGVDaGFubmVsLFxuXHRcdFx0XHRcdHN0YXR1czogXCJhY3RpdmVcIlxuXHRcdFx0XHR9KVswXTtcblx0XHRcdFx0aWYgKHF1ZXJ5LnNlbmRlciAmJiBleGlzdGluZz8uc2VuZGVyICE9PSBxdWVyeS5zZW5kZXIpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocXVlcnkudHJhbnNwb3J0VHlwZSAmJiBleGlzdGluZz8udHJhbnNwb3J0VHlwZSAhPT0gcXVlcnkudHJhbnNwb3J0VHlwZSkgY29udGludWU7XG5cdFx0XHRcdGlmIChxdWVyeS5jaGFubmVsICYmIHF1ZXJ5LmNoYW5uZWwgIT09IGVuZHBvaW50Lm5hbWUgJiYgcXVlcnkuY2hhbm5lbCAhPT0gcmVtb3RlQ2hhbm5lbCkgY29udGludWU7XG5cdFx0XHRcdGlmIChlbmRwb2ludC5oYW5kbGVyLm5vdGlmeUNoYW5uZWwocmVtb3RlQ2hhbm5lbCwgcGF5bG9hZCwgXCJub3RpZnlcIikpIHNlbnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNlbnQ7XG5cdH1cblx0cXVlcnlDb25uZWN0aW9ucyhxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5xdWVyeShxdWVyeSkubWFwKChjb25uZWN0aW9uKSA9PiAoe1xuXHRcdFx0Li4uY29ubmVjdGlvbixcblx0XHRcdGNvbnRleHRJZDogdGhpcy5faWRcblx0XHR9KSk7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShudWxsKSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRjcmVhdGVDaGFubmVscyhuYW1lcywgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHJlc3VsdC5zZXQobmFtZSwgdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldENoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHR9XG5cdGdldE9yQ3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fZW5kcG9pbnRzLmdldChuYW1lKSA/PyB0aGlzLmNyZWF0ZUNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdH1cblx0aGFzQ2hhbm5lbChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fZW5kcG9pbnRzLmtleXMoKV07XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5zaXplO1xuXHR9XG5cdGRlZmVyKG5hbWUsIGluaXRGbikge1xuXHRcdHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuc2V0KG5hbWUsIGluaXRGbik7XG5cdH1cblx0YXN5bmMgaW5pdERlZmVycmVkKG5hbWUpIHtcblx0XHRjb25zdCBpbml0Rm4gPSB0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmdldChuYW1lKTtcblx0XHRpZiAoIWluaXRGbikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSBhd2FpdCBpbml0Rm4oKTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmRlbGV0ZShuYW1lKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0aXNEZWZlcnJlZChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuaGFzKG5hbWUpO1xuXHR9XG5cdGFzeW5jIGdldENoYW5uZWxBc3luYyhuYW1lKSB7XG5cdFx0aWYgKHRoaXMuX2VuZHBvaW50cy5oYXMobmFtZSkpIHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICh0aGlzLl9kZWZlcnJlZENoYW5uZWxzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuaW5pdERlZmVycmVkKG5hbWUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGFzeW5jIGFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHdvcmtlckluc3RhbmNlID0gbG9hZFdvcmtlciQxKHdvcmtlcik7XG5cdFx0aWYgKCF3b3JrZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIHdvcmtlciBmb3IgY2hhbm5lbDogJHtuYW1lfWApO1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHdvcmtlckluc3RhbmNlKTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRoYW5kbGVyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlci5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndvcmtlclwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5zZXQobmFtZSwge1xuXHRcdFx0Y2hhbm5lbDogbmFtZSxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRyZW1vdGU6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR0cmFuc3BvcnQ6IHdvcmtlckluc3RhbmNlLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJ3b3JrZXJcIlxuXHRcdH0pO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhc3luYyBhZGRQb3J0KG5hbWUsIHBvcnQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdHBvcnQuc3RhcnQ/LigpO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHBvcnQpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHRoaXMuX3JlbW90ZUNoYW5uZWxzLnNldChuYW1lLCB7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHRyYW5zcG9ydDogcG9ydCxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkQnJvYWRjYXN0KG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYnJvYWRjYXN0TmFtZSA/PyBuYW1lKTtcblx0XHRjb25zdCBoYW5kbGVyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCByZWFkeSA9IGhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lLCBvcHRpb25zLCBiYyk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJicm9hZGNhc3RcIixcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlci51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIGhhbmRsZXIudW5pZmllZCk7XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KG5hbWUsIHtcblx0XHRcdGNoYW5uZWw6IG5hbWUsXG5cdFx0XHRjb250ZXh0OiB0aGlzLFxuXHRcdFx0cmVtb3RlOiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dHJhbnNwb3J0OiBiYyxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwiYnJvYWRjYXN0XCJcblx0XHR9KTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3Qgc2VsZlRhcmdldCA9IHRoaXMuX2dsb2JhbFNlbGYgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwic2VsZlwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShzZWxmVGFyZ2V0ID8gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIHNlbGZUYXJnZXQpIDogbnVsbCksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0YXN5bmMgYWRkVHJhbnNwb3J0KG5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb25maWcub3B0aW9ucyA/PyB7fTtcblx0XHRzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG5cdFx0XHRjYXNlIFwid29ya2VyXCI6XG5cdFx0XHRcdGlmICghY29uZmlnLndvcmtlcikgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHJlcXVpcmVkIGZvciB3b3JrZXIgdHJhbnNwb3J0XCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRXb3JrZXIobmFtZSwgY29uZmlnLndvcmtlciwgb3B0aW9ucyk7XG5cdFx0XHRjYXNlIFwibWVzc2FnZS1wb3J0XCI6XG5cdFx0XHRcdGlmICghY29uZmlnLnBvcnQpIHRocm93IG5ldyBFcnJvcihcIlBvcnQgcmVxdWlyZWQgZm9yIG1lc3NhZ2UtcG9ydCB0cmFuc3BvcnRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFBvcnQobmFtZSwgY29uZmlnLnBvcnQsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRjb25zdCBiY05hbWUgPSB0eXBlb2YgY29uZmlnLmJyb2FkY2FzdCA9PT0gXCJzdHJpbmdcIiA/IGNvbmZpZy5icm9hZGNhc3QgOiB2b2lkIDA7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEJyb2FkY2FzdChuYW1lLCBiY05hbWUsIG9wdGlvbnMpO1xuXHRcdFx0Y2FzZSBcInNlbGZcIjogcmV0dXJuIHRoaXMuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gdGhpcy5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXHRjcmVhdGVDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1jID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0Y29uc3QgaGFuZGxlcjEgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lMSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCBoYW5kbGVyMiA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUyLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdG1jLnBvcnQxLnN0YXJ0KCk7XG5cdFx0bWMucG9ydDIuc3RhcnQoKTtcblx0XHRjb25zdCByZWFkeTEgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjEuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMiwgb3B0aW9ucywgbWMucG9ydDEpKTtcblx0XHRjb25zdCByZWFkeTIgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcjIuY3JlYXRlUmVtb3RlQ2hhbm5lbChuYW1lMSwgb3B0aW9ucywgbWMucG9ydDIpKTtcblx0XHRjb25zdCBjaGFubmVsMSA9IHtcblx0XHRcdG5hbWU6IG5hbWUxLFxuXHRcdFx0aGFuZGxlcjogaGFuZGxlcjEsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyMS5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIm1lc3NhZ2UtcG9ydFwiLFxuXHRcdFx0cmVhZHk6IHJlYWR5MSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIxLnVuaWZpZWRcblx0XHR9O1xuXHRcdGNvbnN0IGNoYW5uZWwyID0ge1xuXHRcdFx0bmFtZTogbmFtZTIsXG5cdFx0XHRoYW5kbGVyOiBoYW5kbGVyMixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogcmVhZHkyLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlcjIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lMSwgY2hhbm5lbDEpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZTIsIGNoYW5uZWwyKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUxLCBoYW5kbGVyMS51bmlmaWVkKTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUyLCBoYW5kbGVyMi51bmlmaWVkKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhbm5lbDEsXG5cdFx0XHRjaGFubmVsMixcblx0XHRcdG1lc3NhZ2VDaGFubmVsOiBtY1xuXHRcdH07XG5cdH1cblx0Z2V0IGdsb2JhbFNlbGYoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dsb2JhbFNlbGY7XG5cdH1cblx0YXN5bmMgY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHR0aGlzLmluaXRIb3N0KCk7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3QuY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucywgYnJvYWRjYXN0KTtcblx0fVxuXHRhc3luYyBpbXBvcnRNb2R1bGVJbkNoYW5uZWwoY2hhbm5lbE5hbWUsIHVybCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuY29ubmVjdFJlbW90ZShjaGFubmVsTmFtZSwgb3B0aW9ucy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zLmltcG9ydE9wdGlvbnMpO1xuXHR9XG5cdCRjcmVhdGVPclVzZUV4aXN0aW5nUmVtb3RlKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSB7XG5cdFx0aWYgKGNoYW5uZWwgPT0gbnVsbCB8fCBicm9hZGNhc3QpIHJldHVybiBudWxsO1xuXHRcdGlmICh0aGlzLl9yZW1vdGVDaGFubmVscy5oYXMoY2hhbm5lbCkpIHJldHVybiB0aGlzLl9yZW1vdGVDaGFubmVscy5nZXQoY2hhbm5lbCk7XG5cdFx0Y29uc3QgbXNnQ2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuXHRcdGNvbnN0IHByb21pc2UgPSBQcm9taXNlZChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgd29ya2VyID0gbG9hZFdvcmtlciQxKHdvcmtlckNvZGUpO1xuXHRcdFx0d29ya2VyPy5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YS50eXBlID09PSBcImNoYW5uZWxDcmVhdGVkXCIpIHtcblx0XHRcdFx0XHRtc2dDaGFubmVsLnBvcnQxPy5zdGFydD8uKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShuZXcgUmVtb3RlQ2hhbm5lbEhlbHBlciQxKGV2ZW50LmRhdGEuY2hhbm5lbCwgdGhpcywgb3B0aW9ucykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHdvcmtlcj8ucG9zdE1lc3NhZ2U/Lih7XG5cdFx0XHRcdHR5cGU6IFwiY3JlYXRlQ2hhbm5lbFwiLFxuXHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX2hvc3ROYW1lLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRtZXNzYWdlUG9ydDogbXNnQ2hhbm5lbC5wb3J0MlxuXHRcdFx0fSwgeyB0cmFuc2ZlcjogW21zZ0NoYW5uZWwucG9ydDJdIH0pO1xuXHRcdH0pKTtcblx0XHRjb25zdCBpbmZvID0ge1xuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRtZXNzYWdlQ2hhbm5lbDogbXNnQ2hhbm5lbCxcblx0XHRcdHJlbW90ZTogcHJvbWlzZVxuXHRcdH07XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KGNoYW5uZWwsIGluZm8pO1xuXHRcdHJldHVybiBpbmZvO1xuXHR9XG5cdCRyZWdpc3RlckNvbm5lY3Rpb24ocGFyYW1zKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5yZWdpc3RlcihwYXJhbXMpLFxuXHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdH07XG5cdH1cblx0JG1hcmtOb3RpZmllZChwYXJhbXMpIHtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogcGFyYW1zLmxvY2FsQ2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBwYXJhbXMuc2VuZGVyLFxuXHRcdFx0ZGlyZWN0aW9uOiBwYXJhbXMuZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogcGFyYW1zLnRyYW5zcG9ydFR5cGVcblx0XHR9KTtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkubWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIHBhcmFtcy5wYXlsb2FkKTtcblx0fVxuXHQkb2JzZXJ2ZVNpZ25hbChwYXJhbXMpIHtcblx0XHRjb25zdCBkaXJlY3Rpb24gPSAocGFyYW1zLnBheWxvYWQ/LnR5cGUgPz8gXCJub3RpZnlcIikgPT09IFwiY29ubmVjdFwiID8gXCJpbmNvbWluZ1wiIDogXCJpbmNvbWluZ1wiO1xuXHRcdHRoaXMuJG1hcmtOb3RpZmllZCh7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHBhcmFtcy5sb2NhbENoYW5uZWwsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiBwYXJhbXMucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogcGFyYW1zLnNlbmRlcixcblx0XHRcdGRpcmVjdGlvbixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IHBhcmFtcy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0cGF5bG9hZDogcGFyYW1zLnBheWxvYWRcblx0XHR9KTtcblx0fVxuXHQkZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQoY2hhbm5lbCwgZXZlbnQpIHtcblx0XHRjb25zdCBtYXBwZWRUcmFuc3BvcnRUeXBlID0gZXZlbnQuY29ubmVjdGlvbi50cmFuc3BvcnRUeXBlID8/IFwiaW50ZXJuYWxcIjtcblx0XHRjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwgfHwgY2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IGV2ZW50LmNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZXZlbnQuY29ubmVjdGlvbi5zZW5kZXIsXG5cdFx0XHRkaXJlY3Rpb246IGV2ZW50LmNvbm5lY3Rpb24uZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogbWFwcGVkVHJhbnNwb3J0VHlwZSxcblx0XHRcdG1ldGFkYXRhOiBldmVudC5jb25uZWN0aW9uLm1ldGFkYXRhXG5cdFx0fSk7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09IFwibm90aWZpZWRcIikgdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5Lm1hcmtOb3RpZmllZChjb25uZWN0aW9uLCBldmVudC5wYXlsb2FkKTtcblx0XHRlbHNlIGlmIChldmVudC50eXBlID09PSBcImRpc2Nvbm5lY3RlZFwiKSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwoZXZlbnQuY29ubmVjdGlvbi5sb2NhbENoYW5uZWwpO1xuXHR9XG5cdGNsb3NlQ2hhbm5lbChuYW1lKSB7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghZW5kcG9pbnQpIHJldHVybiBmYWxzZTtcblx0XHRlbmRwb2ludC5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0ZW5kcG9pbnQuaGFuZGxlci5jbG9zZSgpO1xuXHRcdGVuZHBvaW50LnRyYW5zcG9ydD8uZGV0YWNoKCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX3VuaWZpZWRCeUNoYW5uZWwuZGVsZXRlKG5hbWUpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5kZWxldGUobmFtZSk7XG5cdFx0aWYgKG5hbWUgPT09IHRoaXMuX2hvc3ROYW1lKSB0aGlzLl9ob3N0ID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xvc2VCeUNoYW5uZWwobmFtZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX2Nsb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbbmFtZV0gb2YgdGhpcy5fZW5kcG9pbnRzKSB0aGlzLmNsb3NlQ2hhbm5lbChuYW1lKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMuX2hvc3QgPSBudWxsO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl91bmlmaWVkQnlDaGFubmVsLmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbkV2ZW50cy5jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBjbG9zZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlZDtcblx0fVxuXHRfcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCB1bmlmaWVkKSB7XG5cdFx0dGhpcy5fdW5pZmllZEJ5Q2hhbm5lbC5zZXQobmFtZSwgdW5pZmllZCk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmdldChuYW1lKT8udW5zdWJzY3JpYmUoKTtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSB1bmlmaWVkLnN1YnNjcmliZUNvbm5lY3Rpb25zKChldmVudCkgPT4ge1xuXHRcdFx0dGhpcy4kZm9yd2FyZFVuaWZpZWRDb25uZWN0aW9uRXZlbnQobmFtZSwgZXZlbnQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5zZXQobmFtZSwgc3Vic2NyaXB0aW9uKTtcblx0fVxuXHRfZW1pdENvbm5lY3Rpb25FdmVudChldmVudCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMubmV4dCh7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0Li4uZXZlbnQuY29ubmVjdGlvbixcblx0XHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59O1xuZnVuY3Rpb24gaXNSZWZsZWN0QWN0aW9uKGFjdGlvbikge1xuXHRyZXR1cm4gWy4uLk9iamVjdC52YWx1ZXMoV1JlZmxlY3RBY3Rpb24pXS5pbmNsdWRlcyhhY3Rpb24pO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpIHtcblx0aWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuXHRpZiAoaXNUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCkpIHJldHVybiB0YXJnZXQ7XG5cdGNvbnN0IG5hdGl2ZVRhcmdldCA9IHRhcmdldDtcblx0Y29uc3QgdHJhbnNwb3J0VHlwZSA9IGdldER5bmFtaWNUcmFuc3BvcnRUeXBlKG5hdGl2ZVRhcmdldCk7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0OiBuYXRpdmVUYXJnZXQsXG5cdFx0dGFyZ2V0Q2hhbm5lbDogXCJ1bmtub3duXCIsXG5cdFx0dHJhbnNwb3J0VHlwZTogdHJhbnNwb3J0VHlwZSA9PT0gXCJpbnRlcm5hbFwiID8gXCJzZWxmXCIgOiB0cmFuc3BvcnRUeXBlLFxuXHRcdHNlbmRlcjogKG1lc3NhZ2UsIHRyYW5zZmVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXRpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHtcblx0XHRcdFx0bmF0aXZlVGFyZ2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRuYXRpdmVUYXJnZXQucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCB0cmFuc2Zlcj8ubGVuZ3RoID8geyB0cmFuc2ZlciB9IDogdm9pZCAwKTtcblx0XHR9LFxuXHRcdHBvc3RNZXNzYWdlOiAobWVzc2FnZSwgb3B0aW9ucykgPT4ge1xuXHRcdFx0bmF0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlPy4obWVzc2FnZSwgb3B0aW9ucyk7XG5cdFx0fSxcblx0XHRhZGRFdmVudExpc3RlbmVyOiBuYXRpdmVUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcj8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdHJlbW92ZUV2ZW50TGlzdGVuZXI6IG5hdGl2ZVRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyPy5iaW5kKG5hdGl2ZVRhcmdldCksXG5cdFx0c3RhcnQ6IG5hdGl2ZVRhcmdldC5zdGFydD8uYmluZChuYXRpdmVUYXJnZXQpLFxuXHRcdGNsb3NlOiBuYXRpdmVUYXJnZXQuY2xvc2U/LmJpbmQobmF0aXZlVGFyZ2V0KVxuXHR9O1xufVxuZnVuY3Rpb24gaXNUcmFuc3BvcnRCaW5kaW5nKHZhbHVlKSB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInRhcmdldFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5wb3N0TWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gZ2V0RHluYW1pY1RyYW5zcG9ydFR5cGUodGFyZ2V0KSB7XG5cdGNvbnN0IGVmZmVjdGl2ZVRhcmdldCA9IGlzVHJhbnNwb3J0QmluZGluZyh0YXJnZXQpID8gdGFyZ2V0LnRhcmdldCA6IHRhcmdldDtcblx0aWYgKCFlZmZlY3RpdmVUYXJnZXQpIHJldHVybiBcImludGVybmFsXCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLXJ1bnRpbWVcIikgcmV0dXJuIFwiY2hyb21lLXJ1bnRpbWVcIjtcblx0aWYgKGVmZmVjdGl2ZVRhcmdldCA9PT0gXCJjaHJvbWUtdGFic1wiKSByZXR1cm4gXCJjaHJvbWUtdGFic1wiO1xuXHRpZiAoZWZmZWN0aXZlVGFyZ2V0ID09PSBcImNocm9tZS1wb3J0XCIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLWV4dGVybmFsXCIpIHJldHVybiBcImNocm9tZS1leHRlcm5hbFwiO1xuXHRpZiAodHlwZW9mIE1lc3NhZ2VQb3J0ICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIE1lc3NhZ2VQb3J0KSByZXR1cm4gXCJtZXNzYWdlLXBvcnRcIjtcblx0aWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHJldHVybiBcImJyb2FkY2FzdFwiO1xuXHRpZiAodHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBcIndvcmtlclwiO1xuXHRpZiAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHJldHVybiBcIndlYnNvY2tldFwiO1xuXHRpZiAodHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIGVmZmVjdGl2ZVRhcmdldCAmJiB0eXBlb2YgZWZmZWN0aXZlVGFyZ2V0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIgJiYgZWZmZWN0aXZlVGFyZ2V0Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXIpIHJldHVybiBcImNocm9tZS1wb3J0XCI7XG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlZmZlY3RpdmVUYXJnZXQgPT09IHNlbGYpIHJldHVybiBcInNlbGZcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGxvYWRXb3JrZXIkMShXWCkge1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBXWDtcblx0aWYgKFdYIGluc3RhbmNlb2YgVVJMKSByZXR1cm4gbmV3IFdvcmtlcihXWC5ocmVmLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdGlmICh0eXBlb2YgV1ggPT09IFwiZnVuY3Rpb25cIikgdHJ5IHtcblx0XHRyZXR1cm4gbmV3IFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFdYKHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAodHlwZW9mIFdYID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKFdYLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihXWC5yZXBsYWNlKC9eXFwvLywgXCIuL1wiKSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHRpZiAoVVJMLmNhblBhcnNlKFdYKSB8fCBXWC5zdGFydHNXaXRoKFwiLi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdHJldHVybiBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW1dYXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiB9KSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0fVxuXHRpZiAoV1ggaW5zdGFuY2VvZiBCbG9iIHx8IFdYIGluc3RhbmNlb2YgRmlsZSkgcmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChXWCksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0cmV0dXJuIFdYID8/ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsKTtcbn1cbnZhciBDT05URVhUX1JFR0lTVFJZID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBERUZBVUxUX0NPTlRFWFQgPSBudWxsO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbnRleHQoKSB7XG5cdGlmICghREVGQVVMVF9DT05URVhUKSB7XG5cdFx0REVGQVVMVF9DT05URVhUID0gbmV3IENoYW5uZWxDb250ZXh0KHtcblx0XHRcdG5hbWU6IFwiJGRlZmF1bHQkXCIsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlXG5cdFx0fSk7XG5cdFx0Q09OVEVYVF9SRUdJU1RSWS5zZXQoXCIkZGVmYXVsdCRcIiwgREVGQVVMVF9DT05URVhUKTtcblx0fVxuXHRyZXR1cm4gREVGQVVMVF9DT05URVhUO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbENvbnRleHQob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGN0eCA9IG5ldyBDaGFubmVsQ29udGV4dChvcHRpb25zKTtcblx0aWYgKG9wdGlvbnMubmFtZSkgQ09OVEVYVF9SRUdJU1RSWS5zZXQob3B0aW9ucy5uYW1lLCBjdHgpO1xuXHRyZXR1cm4gY3R4O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb250ZXh0KG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoQ09OVEVYVF9SRUdJU1RSWS5oYXMobmFtZSkpIHJldHVybiBDT05URVhUX1JFR0lTVFJZLmdldChuYW1lKTtcblx0cmV0dXJuIGNyZWF0ZUNoYW5uZWxDb250ZXh0KHtcblx0XHQuLi5vcHRpb25zLFxuXHRcdG5hbWVcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KG5hbWUpIHtcblx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xufVxuZnVuY3Rpb24gZGVsZXRlQ29udGV4dChuYW1lKSB7XG5cdGNvbnN0IGN0eCA9IENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xuXHRpZiAoY3R4KSB7XG5cdFx0Y3R4LmNsb3NlKCk7XG5cdFx0cmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lcygpIHtcblx0cmV0dXJuIFsuLi5DT05URVhUX1JFR0lTVFJZLmtleXMoKV07XG59XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsc0luQ29udGV4dChjaGFubmVsTmFtZXMsIGNvbnRleHRPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcblx0cmV0dXJuIHtcblx0XHRjb250ZXh0LFxuXHRcdGNoYW5uZWxzOiBjb250ZXh0LmNyZWF0ZUNoYW5uZWxzKGNoYW5uZWxOYW1lcylcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE1vZHVsZUluQ29udGV4dChjaGFubmVsTmFtZSwgdXJsLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgY29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpO1xuXHRyZXR1cm4ge1xuXHRcdGNvbnRleHQsXG5cdFx0bW9kdWxlOiBhd2FpdCBjb250ZXh0LmltcG9ydE1vZHVsZUluQ2hhbm5lbChjaGFubmVsTmFtZSwgdXJsLCB7XG5cdFx0XHRjaGFubmVsT3B0aW9uczogb3B0aW9ucy5jaGFubmVsT3B0aW9ucyxcblx0XHRcdGltcG9ydE9wdGlvbnM6IG9wdGlvbnMuaW1wb3J0T3B0aW9uc1xuXHRcdH0pXG5cdH07XG59XG5hc3luYyBmdW5jdGlvbiBhZGRXb3JrZXJDaGFubmVsKG5hbWUsIHdvcmtlciwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFdvcmtlcihuYW1lLCB3b3JrZXIsIG9wdGlvbnMpO1xufVxuYXN5bmMgZnVuY3Rpb24gYWRkUG9ydENoYW5uZWwobmFtZSwgcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZFBvcnQobmFtZSwgcG9ydCwgb3B0aW9ucyk7XG59XG5hc3luYyBmdW5jdGlvbiBhZGRCcm9hZGNhc3RDaGFubmVsKG5hbWUsIGJyb2FkY2FzdE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5hZGRCcm9hZGNhc3QobmFtZSwgYnJvYWRjYXN0TmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBhZGRTZWxmQ2hhbm5lbFRvRGVmYXVsdChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuYWRkU2VsZkNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBkZWZlckNoYW5uZWwobmFtZSwgaW5pdEZuKSB7XG5cdGdldERlZmF1bHRDb250ZXh0KCkuZGVmZXIobmFtZSwgaW5pdEZuKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGluaXREZWZlcnJlZENoYW5uZWwobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5pbml0RGVmZXJyZWQobmFtZSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRDaGFubmVsRnJvbURlZmF1bHQobmFtZSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5nZXRDaGFubmVsQXN5bmMobmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFBhaXIobmFtZTEsIG5hbWUyLCBvcHRpb25zKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1RyYW5zcG9ydE9ic2VydmFibGUudHNcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXJPck5leHQgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXJPck5leHQgfSA6IG9ic2VydmVyT3JOZXh0O1xuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy5fc3Vicy5zaXplID09PSAwO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKGZpcnN0ICYmICF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwICYmIHRoaXMuX2xpc3RlbmluZykgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0X2Rpc3BhdGNoKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfZXJyb3IoZXJyKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHR9XG5cdF9jb21wbGV0ZSgpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCBzdWJzY3JpYmVyQ291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N1YnMuc2l6ZTtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxufTtcbnZhciBXb3JrZXJPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3dvcmtlcjtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF93b3JrZXIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3dvcmtlciA9IF93b3JrZXI7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl93b3JrZXIpO1xuXHR9XG5cdG5leHQodmFsdWUsIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSwgdHJhbnNmZXIpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3dvcmtlciwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCAoZSkgPT4gdGhpcy5fZXJyb3IoZSkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0dGVybWluYXRlKCkge1xuXHRcdHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHR9XG5cdGdldCB3b3JrZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcjtcblx0fVxufTtcbnZhciBNZXNzYWdlUG9ydE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfcG9ydDtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF9wb3J0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9wb3J0ID0gX3BvcnQ7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9wb3J0KTtcblx0fVxuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9wb3J0LCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cbn07XG52YXIgQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfbmFtZTtcblx0X2NoYW5uZWw7XG5cdF9zZW5kO1xuXHRjb25zdHJ1Y3RvcihfbmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fbmFtZSA9IF9uYW1lO1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChfbmFtZSk7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0aGlzLl9jaGFubmVsKTtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fY2hhbm5lbCwgKGQpID0+IHtcblx0XHRcdGlmIChkPy5zZW5kZXIgIT09IHRoaXMuX25hbWUpIHRoaXMuX2Rpc3BhdGNoKGQpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbC5jbG9zZSgpO1xuXHRcdHN1cGVyLmNsb3NlKCk7XG5cdH1cbn07XG52YXIgV2ViU29ja2V0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF91cmw7XG5cdF9wcm90b2NvbHM7XG5cdF93cyA9IG51bGw7XG5cdF9wZW5kaW5nID0gW107XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfdXJsLCBfcHJvdG9jb2xzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl91cmwgPSBfdXJsO1xuXHRcdHRoaXMuX3Byb3RvY29scyA9IF9wcm90b2NvbHM7XG5cdH1cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fd3MpIHJldHVybjtcblx0XHRjb25zdCB1cmwgPSB0eXBlb2YgdGhpcy5fdXJsID09PSBcInN0cmluZ1wiID8gdGhpcy5fdXJsIDogdGhpcy5fdXJsLmhyZWY7XG5cdFx0dGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCwgdGhpcy5fcHJvdG9jb2xzKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGluZ1wiKTtcblx0XHR0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlblwiKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgobSkgPT4gdGhpcy5uZXh0KG0pKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcgPSBbXTtcblx0XHR9KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd3MsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgKGUpID0+IHRoaXMuX2Vycm9yKGUpLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHRcdFx0dGhpcy5fY29tcGxldGUoKTtcblx0XHR9KTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMuX3dzIHx8IHRoaXMuX3dzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnB1c2godmFsdWUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gdmFsdWU7XG5cdFx0dGhpcy5fd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy5fd3MpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNsb3NlKGNvZGUsIHJlYXNvbikge1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zaW5nXCIpO1xuXHRcdHRoaXMuX3dzPy5jbG9zZShjb2RlLCByZWFzb24pO1xuXHRcdHRoaXMuX3dzID0gbnVsbDtcblx0XHRzdXBlci5jbG9zZSgpO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGlzT3BlbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fd3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcImNocm9tZS1ydW50aW1lXCIpO1xuXHRuZXh0KHZhbHVlKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF90YWJJZDtcblx0Y29uc3RydWN0b3IoX3RhYklkKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0fVxuXHRzZXRUYWJJZChpZCkge1xuXHRcdHRoaXMuX3RhYklkID0gaWQ7XG5cdH1cblx0bmV4dCh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLl90YWJJZCA9PSBudWxsIHx8IHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzKSByZXR1cm47XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGU6IF8sIC4uLmRhdGEgfSA9IHZhbHVlO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS10YWJzXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHsgdGFiSWQ6IHRoaXMuX3RhYklkIH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydE9ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfc2VuZDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHRcdHRoaXMuX3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJjaHJvbWUtcG9ydFwiLCB7XG5cdFx0XHRwb3J0TmFtZTogX3BvcnROYW1lLFxuXHRcdFx0dGFiSWQ6IF90YWJJZFxuXHRcdH0pO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS1wb3J0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSwgdm9pZCAwLCB2b2lkIDAsIHtcblx0XHRcdHBvcnROYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VydmljZS13b3JrZXItaG9zdFwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBTZWxmT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VsZlwiKTtcblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZWxmXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0d29ya2VyOiAodykgPT4gbmV3IFdvcmtlck9ic2VydmFibGUodyksXG5cdHdvcmtlckZyb21Vcmw6ICh1cmwsIG9wdHMpID0+IG5ldyBXb3JrZXJPYnNlcnZhYmxlKG5ldyBXb3JrZXIodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIiA/IHVybCA6IHVybC5ocmVmLCB7XG5cdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHQuLi5vcHRzXG5cdH0pKSxcblx0bWVzc2FnZVBvcnQ6IChwKSA9PiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKHApLFxuXHRtZXNzYWdlQ2hhbm5lbDogKCkgPT4ge1xuXHRcdGNvbnN0IGNoID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBvcnQxOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQxKSxcblx0XHRcdHBvcnQyOiBuZXcgTWVzc2FnZVBvcnRPYnNlcnZhYmxlKGNoLnBvcnQyKVxuXHRcdH07XG5cdH0sXG5cdGJyb2FkY2FzdDogKG5hbWUpID0+IG5ldyBCcm9hZGNhc3RDaGFubmVsT2JzZXJ2YWJsZShuYW1lKSxcblx0d2Vic29ja2V0OiAodXJsLCBwcm90b2NvbHMpID0+IG5ldyBXZWJTb2NrZXRPYnNlcnZhYmxlKHVybCwgcHJvdG9jb2xzKSxcblx0Y2hyb21lUnVudGltZTogKCkgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEoKSxcblx0Y2hyb21lVGFiczogKHRhYklkKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUkMSh0YWJJZCksXG5cdGNocm9tZVBvcnQ6IChwb3J0TmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZSQxKHBvcnROYW1lLCB0YWJJZCksXG5cdHNlcnZpY2VXb3JrZXJDbGllbnQ6ICgpID0+IG5ldyBTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSgpLFxuXHRzZXJ2aWNlV29ya2VySG9zdDogKCkgPT4gbmV3IFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSgpLFxuXHRzZWxmOiAoKSA9PiBuZXcgU2VsZk9ic2VydmFibGUoKVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsJDEob3V0Ym91bmQsIGluYm91bmQpIHtcblx0cmV0dXJuIHtcblx0XHRzZW5kOiAodiwgdCkgPT4gb3V0Ym91bmQubmV4dCh2LCB0KSxcblx0XHRzdWJzY3JpYmU6IChoKSA9PiBpbmJvdW5kLnN1YnNjcmliZSh7IG5leHQ6IGggfSksXG5cdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdG91dGJvdW5kLmNsb3NlKCk7XG5cdFx0XHRpbmJvdW5kLmNsb3NlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvV29ya2VyLnRzXG52YXIgV29ya2VyQ29udGV4dCA9IGNsYXNzIHtcblx0X2NvbnRleHQ7XG5cdF9jb25maWc7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pbmNvbWluZ0Nvbm5lY3Rpb25zID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfY2hhbm5lbENyZWF0ZWQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9jaGFubmVsQ2xvc2VkID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0bmFtZTogY29uZmlnLm5hbWUgPz8gXCJ3b3JrZXJcIixcblx0XHRcdHdvcmtlck5hbWU6IGNvbmZpZy53b3JrZXJOYW1lID8/IGB3b3JrZXItJHtVVUlEdjQoKS5zbGljZSgwLCA4KX1gLFxuXHRcdFx0YXV0b0FjY2VwdENoYW5uZWxzOiBjb25maWcuYXV0b0FjY2VwdENoYW5uZWxzID8/IHRydWUsXG5cdFx0XHRhbGxvd2VkQ2hhbm5lbHM6IGNvbmZpZy5hbGxvd2VkQ2hhbm5lbHMgPz8gW10sXG5cdFx0XHRtYXhDaGFubmVsczogY29uZmlnLm1heENoYW5uZWxzID8/IDEwMCxcblx0XHRcdGF1dG9Db25uZWN0OiBjb25maWcuYXV0b0Nvbm5lY3QgPz8gdHJ1ZSxcblx0XHRcdHVzZUdsb2JhbFNlbGY6IHRydWUsXG5cdFx0XHRkZWZhdWx0T3B0aW9uczogY29uZmlnLmRlZmF1bHRPcHRpb25zID8/IHt9LFxuXHRcdFx0aXNvbGF0ZWRTdG9yYWdlOiBjb25maWcuaXNvbGF0ZWRTdG9yYWdlID8/IGZhbHNlLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQoe1xuXHRcdFx0bmFtZTogdGhpcy5fY29uZmlnLm5hbWUsXG5cdFx0XHR1c2VHbG9iYWxTZWxmOiB0cnVlLFxuXHRcdFx0ZGVmYXVsdE9wdGlvbnM6IGNvbmZpZy5kZWZhdWx0T3B0aW9uc1xuXHRcdH0pO1xuXHRcdHRoaXMuX3NldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG5cdH1cblx0Z2V0IG9uQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucztcblx0fVxuXHRnZXQgb25DaGFubmVsQ3JlYXRlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQ7XG5cdH1cblx0Z2V0IG9uQ2hhbm5lbENsb3NlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENsb3NlZDtcblx0fVxuXHRzdWJzY3JpYmVDb25uZWN0aW9ucyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHN1YnNjcmliZUNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbENyZWF0ZWQuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdGFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXHRcdGlmICghdGhpcy5fY2FuQWNjZXB0Q2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwpKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBlbmRwb2ludCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24ub3B0aW9ucyk7XG5cdFx0aWYgKGNvbm5lY3Rpb24ucG9ydCkge1xuXHRcdFx0Y29ubmVjdGlvbi5wb3J0LnN0YXJ0Py4oKTtcblx0XHRcdGVuZHBvaW50LmhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChjb25uZWN0aW9uLnNlbmRlciwgY29ubmVjdGlvbi5vcHRpb25zLCBjb25uZWN0aW9uLnBvcnQpO1xuXHRcdH1cblx0XHR0aGlzLl9jaGFubmVsQ3JlYXRlZC5uZXh0KHtcblx0XHRcdGNoYW5uZWw6IGNvbm5lY3Rpb24uY2hhbm5lbCxcblx0XHRcdGVuZHBvaW50LFxuXHRcdFx0c2VuZGVyOiBjb25uZWN0aW9uLnNlbmRlcixcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHRoaXMuX3Bvc3RDaGFubmVsQ3JlYXRlZChjb25uZWN0aW9uLmNoYW5uZWwsIGNvbm5lY3Rpb24uc2VuZGVyLCBjb25uZWN0aW9uLmlkKTtcblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblx0Y3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuY3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcblx0fVxuXHRnZXRDaGFubmVsKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dC5nZXRDaGFubmVsKG5hbWUpO1xuXHR9XG5cdGhhc0NoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lmhhc0NoYW5uZWwobmFtZSk7XG5cdH1cblx0Z2V0Q2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LmdldENoYW5uZWxOYW1lcygpO1xuXHR9XG5cdHF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LnF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkpO1xuXHR9XG5cdG5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQgPSB7fSwgcXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0Lm5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQsIHF1ZXJ5KTtcblx0fVxuXHRjbG9zZUNoYW5uZWwobmFtZSkge1xuXHRcdGNvbnN0IGNsb3NlZCA9IHRoaXMuX2NvbnRleHQuY2xvc2VDaGFubmVsKG5hbWUpO1xuXHRcdGlmIChjbG9zZWQpIHRoaXMuX2NoYW5uZWxDbG9zZWQubmV4dCh7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNsb3NlZDtcblx0fVxuXHRnZXQgY29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxuXHRnZXQgY29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25maWc7XG5cdH1cblx0X3NldHVwTWVzc2FnZUxpc3RlbmVyKCkge1xuXHRcdGFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICgoZXZlbnQpID0+IHtcblx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nTWVzc2FnZShldmVudCk7XG5cdFx0fSkpO1xuXHR9XG5cdF9oYW5kbGVJbmNvbWluZ01lc3NhZ2UoZXZlbnQpIHtcblx0XHRjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNyZWF0ZUNoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ3JlYXRlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29ubmVjdENoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ29ubmVjdENoYW5uZWwoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFkZFBvcnRcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQWRkUG9ydChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibGlzdENoYW5uZWxzXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2xvc2VDaGFubmVsXCI6XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUNsb3NlQ2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicGluZ1wiOlxuXHRcdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb25nXCIsXG5cdFx0XHRcdFx0aWQ6IGRhdGEuaWQsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6IGlmIChkYXRhLmNoYW5uZWwgJiYgdGhpcy5fY29udGV4dC5oYXNDaGFubmVsKGRhdGEuY2hhbm5lbCkpICh0aGlzLl9jb250ZXh0LmdldENoYW5uZWwoZGF0YS5jaGFubmVsKT8uaGFuZGxlcik/LmhhbmRsZUFuZFJlc3BvbnNlPy4oZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkKTtcblx0XHR9XG5cdH1cblx0X2hhbmRsZUNyZWF0ZUNoYW5uZWwoZGF0YSkge1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcImNoYW5uZWxcIixcblx0XHRcdHBvcnQ6IGRhdGEubWVzc2FnZVBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscykgdGhpcy5hY2NlcHRDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXHR9XG5cdF9oYW5kbGVDb25uZWN0Q2hhbm5lbChkYXRhKSB7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHR5cGU6IGRhdGEucG9ydFR5cGUgPz8gXCJjaGFubmVsXCIsXG5cdFx0XHRwb3J0OiBkYXRhLnBvcnQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRvcHRpb25zOiBkYXRhLm9wdGlvbnNcblx0XHR9O1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMubmV4dChjb25uZWN0aW9uKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9BY2NlcHRDaGFubmVscyAmJiB0aGlzLl9jYW5BY2NlcHRDaGFubmVsKGRhdGEuY2hhbm5lbCkpIHtcblx0XHRcdGNvbnN0IGVuZHBvaW50ID0gdGhpcy5fY29udGV4dC5nZXRPckNyZWF0ZUNoYW5uZWwoZGF0YS5jaGFubmVsLCBkYXRhLm9wdGlvbnMpO1xuXHRcdFx0aWYgKGRhdGEucG9ydCkge1xuXHRcdFx0XHRkYXRhLnBvcnQuc3RhcnQ/LigpO1xuXHRcdFx0XHRlbmRwb2ludC5oYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwoZGF0YS5zZW5kZXIsIGRhdGEub3B0aW9ucywgZGF0YS5wb3J0KTtcblx0XHRcdH1cblx0XHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJjaGFubmVsQ29ubmVjdGVkXCIsXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlQWRkUG9ydChkYXRhKSB7XG5cdFx0aWYgKCFkYXRhLnBvcnQgfHwgIWRhdGEuY2hhbm5lbCkgcmV0dXJuO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB7XG5cdFx0XHRpZDogZGF0YS5yZXFJZCA/PyBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHR0eXBlOiBcInBvcnRcIixcblx0XHRcdHBvcnQ6IGRhdGEucG9ydCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdG9wdGlvbnM6IGRhdGEub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0FjY2VwdENoYW5uZWxzKSB0aGlzLmFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cdH1cblx0X2hhbmRsZUxpc3RDaGFubmVscyhkYXRhKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsTGlzdFwiLFxuXHRcdFx0Y2hhbm5lbHM6IHRoaXMuZ2V0Q2hhbm5lbE5hbWVzKCksXG5cdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGVDbG9zZUNoYW5uZWwoZGF0YSkge1xuXHRcdGlmIChkYXRhLmNoYW5uZWwpIHtcblx0XHRcdHRoaXMuY2xvc2VDaGFubmVsKGRhdGEuY2hhbm5lbCk7XG5cdFx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY2hhbm5lbENsb3NlZFwiLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0X2NhbkFjY2VwdENoYW5uZWwoY2hhbm5lbCkge1xuXHRcdGlmICh0aGlzLl9jb250ZXh0LnNpemUgPj0gdGhpcy5fY29uZmlnLm1heENoYW5uZWxzKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbGxvd2VkQ2hhbm5lbHMuaW5jbHVkZXMoY2hhbm5lbCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0X3Bvc3RDaGFubmVsQ3JlYXRlZChjaGFubmVsLCBzZW5kZXIsIHJlcUlkKSB7XG5cdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjaGFubmVsQ3JlYXRlZFwiLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHNlbmRlcixcblx0XHRcdHJlcUlkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbENyZWF0ZWQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jaGFubmVsQ2xvc2VkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIFdPUktFUl9DT05URVhUID0gbnVsbDtcbmZ1bmN0aW9uIGdldFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdGlmICghV09SS0VSX0NPTlRFWFQpIFdPUktFUl9DT05URVhUID0gbmV3IFdvcmtlckNvbnRleHQoY29uZmlnKTtcblx0cmV0dXJuIFdPUktFUl9DT05URVhUO1xufVxuZnVuY3Rpb24gaW5pdFdvcmtlckNvbnRleHQoY29uZmlnKSB7XG5cdFdPUktFUl9DT05URVhUPy5jbG9zZSgpO1xuXHRXT1JLRVJfQ09OVEVYVCA9IG5ldyBXb3JrZXJDb250ZXh0KGNvbmZpZyk7XG5cdHJldHVybiBXT1JLRVJfQ09OVEVYVDtcbn1cbmZ1bmN0aW9uIG9uV29ya2VyQ29ubmVjdGlvbihoYW5kbGVyKSB7XG5cdHJldHVybiBnZXRXb3JrZXJDb250ZXh0KCkuc3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBvbldvcmtlckNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpIHtcblx0cmV0dXJuIGdldFdvcmtlckNvbnRleHQoKS5zdWJzY3JpYmVDaGFubmVsQ3JlYXRlZChoYW5kbGVyKTtcbn1cbnZhciBXT1JLRVJfUkVTUE9OREVSID0gbnVsbDtcbnZhciBXT1JLRVJfSU5WT0tFUiA9IG51bGw7XG5mdW5jdGlvbiBnZXRXb3JrZXJSZXNwb25kZXIoY2hhbm5lbCkge1xuXHRpZiAoIVdPUktFUl9SRVNQT05ERVIpIHtcblx0XHRXT1JLRVJfUkVTUE9OREVSID0gY3JlYXRlUmVzcG9uZGVyKGNoYW5uZWwgPz8gXCJ3b3JrZXJcIik7XG5cdFx0V09SS0VSX1JFU1BPTkRFUi5saXN0ZW4oc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9SRVNQT05ERVI7XG59XG5mdW5jdGlvbiBnZXRXb3JrZXJJbnZva2VyKGNoYW5uZWwpIHtcblx0aWYgKCFXT1JLRVJfSU5WT0tFUikge1xuXHRcdFdPUktFUl9JTlZPS0VSID0gY3JlYXRlSW52b2tlcihjaGFubmVsID8/IFwid29ya2VyXCIpO1xuXHRcdFdPUktFUl9JTlZPS0VSLmNvbm5lY3Qoc2VsZik7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9JTlZPS0VSO1xufVxuZnVuY3Rpb24gZXhwb3NlRnJvbVdvcmtlcihuYW1lLCBvYmopIHtcblx0Z2V0V29ya2VyUmVzcG9uZGVyKCkuZXhwb3NlKG5hbWUsIG9iaik7XG59XG5mdW5jdGlvbiBvbldvcmtlckludm9jYXRpb24oaGFuZGxlcikge1xuXHRyZXR1cm4gZ2V0V29ya2VyUmVzcG9uZGVyKCkuc3Vic2NyaWJlSW52b2NhdGlvbnMoaGFuZGxlcik7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0UHJveHkoaG9zdENoYW5uZWwgPSBcImhvc3RcIiwgYmFzZVBhdGggPSBbXSkge1xuXHRyZXR1cm4gZ2V0V29ya2VySW52b2tlcigpLmNyZWF0ZVByb3h5KGhvc3RDaGFubmVsLCBiYXNlUGF0aCk7XG59XG5mdW5jdGlvbiBpbXBvcnRJbkhvc3QodXJsLCBob3N0Q2hhbm5lbCA9IFwiaG9zdFwiKSB7XG5cdHJldHVybiBnZXRXb3JrZXJJbnZva2VyKCkuaW1wb3J0TW9kdWxlKGhvc3RDaGFubmVsLCB1cmwpO1xufVxudmFyIGN0eCA9IGdldFdvcmtlckNvbnRleHQoeyBuYW1lOiBcIndvcmtlclwiIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL0Nocm9tZU9ic2VydmFibGUudHNcbnZhciBCYXNlQ2hyb21lT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfbGlzdGVuaW5nID0gZmFsc2U7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHRjb25zdCBmaXJzdCA9IHRoaXMuX3N1YnMuc2l6ZSA9PT0gMDtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmIChmaXJzdCAmJiAhdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCAmJiB0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdF9kaXNwYXRjaCh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4odmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxufTtcbnZhciBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfaGFuZGxlcjtcblx0X29wdGlvbnM7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3RydWN0b3IoX2hhbmRsZXIsIF9vcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2hhbmRsZXIgPSBfaGFuZGxlcjtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKGRhdGEpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSB7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmZpbHRlck1lc3NhZ2UgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyTWVzc2FnZShtZXNzYWdlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdFx0aWQ6IG1lc3NhZ2UuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdF9zZW5kZXI6IHNlbmRlcixcblx0XHRcdFx0X3RhYklkOiBzZW5kZXIudGFiPy5pZCxcblx0XHRcdFx0X2ZyYW1lSWQ6IHNlbmRlci5mcmFtZUlkXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5faGFuZGxlcikge1xuXHRcdFx0XHRjb25zdCByZXNwb25kID0gKHJlc3VsdCkgPT4gc2VuZFJlc3BvbnNlKHJlc3VsdCk7XG5cdFx0XHRcdGNvbnN0IHN1YnNjcmliZXIgPSB7XG5cdFx0XHRcdFx0bmV4dDogKHYpID0+IHRoaXMuX2Rpc3BhdGNoKHYpLFxuXHRcdFx0XHRcdGVycm9yOiAoKSA9PiB7fSxcblx0XHRcdFx0XHRjb21wbGV0ZTogKCkgPT4ge30sXG5cdFx0XHRcdFx0c2lnbmFsOiBuZXcgQWJvcnRDb250cm9sbGVyKCkuc2lnbmFsLFxuXHRcdFx0XHRcdGFjdGl2ZTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faGFuZGxlcihkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSBpbnN0YW5jZW9mIFByb21pc2UgPyB0cnVlIDogdGhpcy5fb3B0aW9ucy5hc3luY1Jlc3BvbnNlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGlzcGF0Y2goZGF0YSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lVGFic09ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIEJhc2VDaHJvbWVPYnNlcnZhYmxlIHtcblx0X3RhYklkO1xuXHRfb3B0aW9ucztcblx0Y29uc3RydWN0b3IoX3RhYklkLCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl90YWJJZCA9IF90YWJJZDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0c2V0VGFiSWQoaWQpIHtcblx0XHR0aGlzLl90YWJJZCA9IGlkO1xuXHR9XG5cdHNlbmQobXNnKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzIHx8IHRoaXMuX3RhYklkID09IG51bGwpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGxpc3RlbmVyID0gKG1lc3NhZ2UsIHNlbmRlcikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3RhYklkICE9IG51bGwgJiYgc2VuZGVyLnRhYj8uaWQgIT09IHRoaXMuX3RhYklkKSByZXR1cm47XG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIgJiYgIXRoaXMuX29wdGlvbnMuZmlsdGVyU2VuZGVyKHNlbmRlcikpIHJldHVybjtcblx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXIsXG5cdFx0XHRcdF90YWJJZDogc2VuZGVyLnRhYj8uaWQsXG5cdFx0XHRcdF9mcmFtZUlkOiBzZW5kZXIuZnJhbWVJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX2Rpc3BhdGNoKGRhdGEpO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIENocm9tZVBvcnRPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2hyb21lT2JzZXJ2YWJsZSB7XG5cdF9wb3J0TmFtZTtcblx0X3RhYklkO1xuXHRfcG9ydCA9IG51bGw7XG5cdF9pbmZvID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX3BvcnROYW1lLCBfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3RhYklkICE9IG51bGwgPyBjaHJvbWUudGFicy5jb25uZWN0KHRoaXMuX3RhYklkLCB7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pIDogY2hyb21lLnJ1bnRpbWUuY29ubmVjdCh7IG5hbWU6IHRoaXMuX3BvcnROYW1lIH0pO1xuXHRcdHRoaXMuX2luZm8gPSB7XG5cdFx0XHRuYW1lOiB0aGlzLl9wb3J0TmFtZSxcblx0XHRcdHRhYklkOiB0aGlzLl90YWJJZFxuXHRcdH07XG5cdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoKG1zZykgPT4gdGhpcy5fZGlzcGF0Y2goe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0aWQ6IG1zZy5pZCA/PyBVVUlEdjQoKVxuXHRcdH0pKTtcblx0XHR0aGlzLl9wb3J0Lm9uRGlzY29ubmVjdC5hZGRMaXN0ZW5lcigoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAoIXRoaXMuX3BvcnQpIHRoaXMuY29ubmVjdCgpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fcG9ydD8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHN1cGVyLl9kZWFjdGl2YXRlKCk7XG5cdH1cblx0Z2V0IHBvcnRJbmZvKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmZvO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydCAhPSBudWxsO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVybmFsT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfZXh0ZW5zaW9uSWQ7XG5cdGNvbnN0cnVjdG9yKF9leHRlbnNpb25JZCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fZXh0ZW5zaW9uSWQgPSBfZXh0ZW5zaW9uSWQ7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHRjb25zdCB7IF9zZW5kZXIsIF90YWJJZCwgX2ZyYW1lSWQsIHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGlmICh0aGlzLl9leHRlbnNpb25JZCkgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UodGhpcy5fZXh0ZW5zaW9uSWQsIGRhdGEpO1xuXHRcdGVsc2UgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZGF0YSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcgfHwgdHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWU/Lm9uTWVzc2FnZUV4dGVybmFsKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyKSA9PiB7XG5cdFx0XHR0aGlzLl9kaXNwYXRjaCh7XG5cdFx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRcdGlkOiBtZXNzYWdlLmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRfc2VuZGVyOiBzZW5kZXJcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNocm9tZVJlcXVlc3RIYW5kbGVyKGNoYW5uZWxOYW1lLCBoYW5kbGVycykge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQsIHN1YnNjcmliZXIpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIikge1xuXHRcdFx0c3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhY3Rpb24gPSBkYXRhLnBheWxvYWQ/LmFjdGlvbjtcblx0XHRpZiAoYWN0aW9uICYmIGhhbmRsZXJzW2FjdGlvbl0pIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyc1thY3Rpb25dKGRhdGEucGF5bG9hZD8uYXJncyA/PyBbXSwgZGF0YSk7XG5cdFx0XHRyZXNwb25kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0fTtcbn1cbnZhciBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0cnVudGltZTogKGhhbmRsZXIsIG9wdGlvbnMpID0+IG5ldyBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZShoYW5kbGVyLCBvcHRpb25zKSxcblx0dGFiczogKHRhYklkLCBvcHRpb25zKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdGlvbnMpLFxuXHRwb3J0OiAobmFtZSwgdGFiSWQpID0+IG5ldyBDaHJvbWVQb3J0T2JzZXJ2YWJsZShuYW1lLCB0YWJJZCksXG5cdGV4dGVybmFsOiAoZXh0ZW5zaW9uSWQpID0+IG5ldyBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUoZXh0ZW5zaW9uSWQpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL1NvY2tldElPT2JzZXJ2YWJsZS50c1xudmFyIFNvY2tldElPT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3NvY2tldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfb3B0aW9ucztcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXBzID0gW107XG5cdF9ldmVudHM7XG5cdF9kZWZhdWx0RXZlbnQ7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3Rvcihfc29ja2V0LCBfY2hhbm5lbE5hbWUsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9zb2NrZXQgPSBfc29ja2V0O1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0XHR0aGlzLl9ldmVudHMgPSBfb3B0aW9ucy5ldmVudHMgPz8gW1wibWVzc2FnZVwiLCBcImNoYW5uZWxcIl07XG5cdFx0dGhpcy5fZGVmYXVsdEV2ZW50ID0gX29wdGlvbnMuZGVmYXVsdEV2ZW50ID8/IFwibWVzc2FnZVwiO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuX3NvY2tldC5jb25uZWN0Py4oKTtcblx0fVxuXHRzZW5kKG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgYWNrLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgPz8gbXNnLmV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSk7XG5cdH1cblx0ZW1pdChldmVudCwgZGF0YSkge1xuXHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50LCBkYXRhKTtcblx0fVxuXHRyZXF1ZXN0KG1zZywgZXZlbnQpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBhY2ssIC4uLmRhdGEgfSA9IHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3NvY2tldC5lbWl0KGV2ZW50ID8/IHRoaXMuX2RlZmF1bHRFdmVudCwgZGF0YSwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX2xpc3RlbmluZykgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRcdGlmICh0aGlzLl9zdWJzLnNpemUgPT09IDAgJiYgdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdGZvciAoY29uc3QgZXZlbnQgb2YgdGhpcy5fZXZlbnRzKSB7XG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGRhdGEsIGFjaykgPT4ge1xuXHRcdFx0XHRjb25zdCBtc2cgPSB7XG5cdFx0XHRcdFx0Li4udHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgPyBkYXRhIDogeyBwYXlsb2FkOiBkYXRhIH0sXG5cdFx0XHRcdFx0aWQ6IGRhdGE/LmlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdGFja1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBtc2cucmVxSWQpIHtcblx0XHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQobXNnLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdFx0cC5yZXNvbHZlKG1zZy5wYXlsb2FkKTtcblx0XHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKG1zZy5yZXFJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zb2NrZXQub24oZXZlbnQsIGhhbmRsZXIpO1xuXHRcdFx0dGhpcy5fY2xlYW51cHMucHVzaCgoKSA9PiB0aGlzLl9zb2NrZXQub2ZmKGV2ZW50LCBoYW5kbGVyKSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0Y29uc3Qgb25EaXNjb25uZWN0ID0gKCkgPT4gdGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0XHRjb25zdCBvbkVycm9yID0gKGVycikgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdH07XG5cdFx0dGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpO1xuXHRcdHRoaXMuX3NvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgb25EaXNjb25uZWN0KTtcblx0XHR0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzLl9jbGVhbnVwcy5wdXNoKCgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJjb25uZWN0XCIsIG9uQ29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJkaXNjb25uZWN0XCIsIG9uRGlzY29ubmVjdCksICgpID0+IHRoaXMuX3NvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwcy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG5cdFx0dGhpcy5fY2xlYW51cHMgPSBbXTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSBmYWxzZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdHRoaXMuX3NvY2tldC5kaXNjb25uZWN0Py4oKTtcblx0fVxuXHRnZXQgc29ja2V0KCkge1xuXHRcdHJldHVybiB0aGlzLl9zb2NrZXQ7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxuXHRnZXQgaXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvY2tldC5jb25uZWN0ZWQgPz8gZmFsc2U7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxufTtcbnZhciBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfcGFyZW50O1xuXHRfcm9vbU5hbWU7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BhcmVudFN1YiA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9wYXJlbnQsIF9yb29tTmFtZSkge1xuXHRcdHRoaXMuX3BhcmVudCA9IF9wYXJlbnQ7XG5cdFx0dGhpcy5fcm9vbU5hbWUgPSBfcm9vbU5hbWU7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHR0aGlzLl9wYXJlbnQuc2VuZCh7XG5cdFx0XHQuLi5tc2csXG5cdFx0XHRyb29tOiB0aGlzLl9yb29tTmFtZVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX3BhcmVudFN1YikgdGhpcy5fcGFyZW50U3ViID0gdGhpcy5fcGFyZW50LnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdGlmIChtc2cucm9vbSA9PT0gdGhpcy5fcm9vbU5hbWUgfHwgbXNnLmNoYW5uZWwgPT09IHRoaXMuX3Jvb21OYW1lKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuY29tcGxldGU/LigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuX3BhcmVudFN1Yj8udW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHR0aGlzLl9wYXJlbnRTdWIgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXQgcm9vbU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Jvb21OYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIGhhbmRsZXJzKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSkgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiIHx8ICFkYXRhLmFjaykgcmV0dXJuO1xuXHRcdGNvbnN0IGFjdGlvbiA9IGRhdGEucGF5bG9hZD8uYWN0aW9uO1xuXHRcdGlmIChhY3Rpb24gJiYgaGFuZGxlcnNbYWN0aW9uXSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJzW2FjdGlvbl0oZGF0YS5wYXlsb2FkPy5hcmdzID8/IFtdLCBkYXRhKTtcblx0XHRcdGRhdGEuYWNrKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyByZXN1bHQgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGF0YS5hY2soe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59XG52YXIgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAoc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSxcblx0cm9vbTogKHBhcmVudCwgcm9vbU5hbWUpID0+IG5ldyBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlKHBhcmVudCwgcm9vbU5hbWUpXG59O1xuZnVuY3Rpb24gY3JlYXRlU29ja2V0T2JzZXJ2YWJsZShzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKHNvY2tldCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvU2hhcmVkV29ya2VyVHJhbnNwb3J0LnRzXG52YXIgU2hhcmVkV29ya2VyQ2xpZW50ID0gY2xhc3Mge1xuXHRfc2NyaXB0VXJsO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9vcHRpb25zO1xuXHRfd29ya2VyID0gbnVsbDtcblx0X3BvcnQgPSBudWxsO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9zY3JpcHRVcmwsIF9jaGFubmVsTmFtZSwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX3NjcmlwdFVybCA9IF9zY3JpcHRVcmw7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdGlmIChfb3B0aW9ucy5hdXRvQ29ubmVjdCAhPT0gZmFsc2UpIHRoaXMuY29ubmVjdCgpO1xuXHR9XG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3dvcmtlcikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl93b3JrZXIgPSBuZXcgU2hhcmVkV29ya2VyKHRoaXMuX3NjcmlwdFVybCwge1xuXHRcdFx0XHRuYW1lOiB0aGlzLl9vcHRpb25zLm5hbWUsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiB0aGlzLl9vcHRpb25zLmNyZWRlbnRpYWxzLFxuXHRcdFx0XHR0eXBlOiB0aGlzLl9vcHRpb25zLnR5cGVcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fcG9ydCA9IHRoaXMuX3dvcmtlci5wb3J0O1xuXHRcdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcnMoKTtcblx0XHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdFwiLFxuXHRcdFx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0cG9ydElkOiB0aGlzLl9wb3J0SWRcblx0XHR9LCB0cmFuc2ZlciA/PyBbXSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fcGVuZGluZy5oYXMocmVxSWQpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdC4uLm1zZyxcblx0XHRcdGJyb2FkY2FzdDogdHJ1ZVxuXHRcdH0sIHRyYW5zZmVyKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKCF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0ZWRcIikgdGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcC5yZWplY3QobmV3IEVycm9yKGRhdGEucGF5bG9hZC5lcnJvcikpO1xuXHRcdFx0XHRcdGVsc2UgcC5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0ID8/IGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZXJySGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiU2hhcmVkV29ya2VyIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0aGlzLl9wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3BvcnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBudWxsO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRhY3Rpb246IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0XHRwb3J0SWQ6IHRoaXMuX3BvcnRJZFxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHR0aGlzLl9wb3J0Py5jbG9zZSgpO1xuXHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cblx0Z2V0IHBvcnRJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydElkO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWUoKSA9PT0gXCJjb25uZWN0ZWRcIjtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgU2hhcmVkV29ya2VySG9zdCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZXR1cEdsb2JhbEhhbmRsZXIoKTtcblx0fVxuXHRfc2V0dXBHbG9iYWxIYW5kbGVyKCkge1xuXHRcdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcIm9uY29ubmVjdFwiIGluIHNlbGYpIHtcblx0XHRcdHNlbGYub25jb25uZWN0ID0gKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IGUucG9ydHNbMF07XG5cdFx0XHRcdGNvbnN0IHBvcnRJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KTtcblx0XHRcdH07XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwicmVhZHlcIik7XG5cdFx0fVxuXHR9XG5cdF9yZWdpc3RlclBvcnQocG9ydElkLCBwb3J0KSB7XG5cdFx0Y29uc3QgaW5mbyA9IHtcblx0XHRcdGlkOiBwb3J0SWQsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRwb3J0Lm9ubWVzc2FnZSA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZS5kYXRhO1xuXHRcdFx0aW5mby5sYXN0U2VlbiA9IERhdGUubm93KCk7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInNpZ25hbFwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJjb25uZWN0XCIpIHtcblx0XHRcdFx0XHRjb25zdCByZWFsUG9ydElkID0gZGF0YS5wYXlsb2FkLnBvcnRJZCB8fCBwb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuZGVsZXRlKHBvcnRJZCk7XG5cdFx0XHRcdFx0aW5mby5pZCA9IHJlYWxQb3J0SWQ7XG5cdFx0XHRcdFx0dGhpcy5fcG9ydHMuc2V0KHJlYWxQb3J0SWQsIHtcblx0XHRcdFx0XHRcdHBvcnQsXG5cdFx0XHRcdFx0XHRpbmZvXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRcdHNlbmRlcjogXCJob3N0XCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdFx0XHRhY3Rpb246IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHRcdHBvcnRJZDogcmVhbFBvcnRJZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5hY3Rpb24gPT09IFwiZGlzY29ubmVjdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fdW5yZWdpc3RlclBvcnQoZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkYXRhLmJyb2FkY2FzdCkgdGhpcy5icm9hZGNhc3QoZGF0YSwgZGF0YS5wb3J0SWQgPz8gcG9ydElkKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lih7XG5cdFx0XHRcdFx0Li4uZGF0YSxcblx0XHRcdFx0XHRwb3J0SWQ6IGRhdGEucG9ydElkID8/IHBvcnRJZFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cG9ydC5vbm1lc3NhZ2VlcnJvciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBtZXNzYWdlIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0cG9ydC5zdGFydCgpO1xuXHRcdHRoaXMuX3BvcnRzLnNldChwb3J0SWQsIHtcblx0XHRcdHBvcnQsXG5cdFx0XHRpbmZvXG5cdFx0fSk7XG5cdH1cblx0X3VucmVnaXN0ZXJQb3J0KHBvcnRJZCkge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5fcG9ydHMuZ2V0KHBvcnRJZCk7XG5cdFx0aWYgKGVudHJ5KSB7XG5cdFx0XHRlbnRyeS5wb3J0LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9wb3J0cy5kZWxldGUocG9ydElkKTtcblx0XHR9XG5cdH1cblx0c2VuZChwb3J0SWQsIG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuX3BvcnRzLmdldChwb3J0SWQpO1xuXHRcdGlmICghZW50cnkpIHJldHVybjtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGVudHJ5LnBvcnQucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIGV4Y2x1ZGVQb3J0SWQpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIGlmIChpZCAhPT0gZXhjbHVkZVBvcnRJZCkgZW50cnkucG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0YnJvYWRjYXN0OiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0cmVzcG9uZChtc2csIHJlc3VsdCwgdHJhbnNmZXIpIHtcblx0XHRpZiAoIW1zZy5wb3J0SWQgfHwgIW1zZy5yZXFJZCkgcmV0dXJuO1xuXHRcdHRoaXMuc2VuZChtc2cucG9ydElkLCB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBtc2cucmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7IHJlc3VsdCB9XG5cdFx0fSwgdHJhbnNmZXIpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRnZXRQb3J0cygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5fcG9ydHMpIHJlc3VsdC5zZXQoaWQsIHsgLi4uZW50cnkuaW5mbyB9KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldCBwb3J0Q291bnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRzLnNpemU7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZShzY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHNjcmlwdFVybCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUoY2hhbm5lbE5hbWUpIHtcblx0cmV0dXJuIG5ldyBTaGFyZWRXb3JrZXJIb3N0KGNoYW5uZWxOYW1lKTtcbn1cbnZhciBTaGFyZWRXb3JrZXJPYnNlcnZhYmxlRmFjdG9yeSA9IHtcblx0Y2xpZW50OiAodXJsLCBuYW1lLCBvcHRzKSA9PiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHVybCwgbmFtZSwgb3B0cyksXG5cdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L0F0b21pY3NUcmFuc3BvcnQudHNcbnZhciBjYm9yRW5jb2RlciA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBnZXRDQk9SRW5jb2RlcigpIHtcblx0aWYgKGNib3JFbmNvZGVyKSByZXR1cm4gY2JvckVuY29kZXI7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY2JvcnggPSBhd2FpdCBpbXBvcnQoXCIuL2Nib3IteC0hfnswMDB9fi5qc1wiKTtcblx0XHRjYm9yRW5jb2RlciA9IHtcblx0XHRcdGVuY29kZTogKHYpID0+IGNib3J4LmVuY29kZSh2KSxcblx0XHRcdGRlY29kZTogKGQpID0+IGNib3J4LmRlY29kZShkKVxuXHRcdH07XG5cdH0gY2F0Y2gge1xuXHRcdGNib3JFbmNvZGVyID0ge1xuXHRcdFx0ZW5jb2RlOiAodikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHYsIHJlcGxhY2VyKSksXG5cdFx0XHRkZWNvZGU6IChkKSA9PiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKSwgcmV2aXZlcilcblx0XHR9O1xuXHR9XG5cdHJldHVybiBjYm9yRW5jb2Rlcjtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbHVlKSB7XG5cdGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRhVmlldykpIHJldHVybiB7XG5cdFx0X190eXBlZEFycmF5OiB0cnVlLFxuXHRcdHR5cGU6IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0ZGF0YTogQXJyYXkuZnJvbSh2YWx1ZSlcblx0fTtcblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiB7XG5cdFx0X19hcnJheUJ1ZmZlcjogdHJ1ZSxcblx0XHRkYXRhOiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcblx0fTtcblx0cmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gcmV2aXZlcihfa2V5LCB2YWx1ZSkge1xuXHRpZiAodmFsdWU/Ll9fdHlwZWRBcnJheSkge1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t2YWx1ZS50eXBlXTtcblx0XHRyZXR1cm4gVHlwZWRBcnJheUN0b3IgPyBuZXcgVHlwZWRBcnJheUN0b3IodmFsdWUuZGF0YSkgOiB2YWx1ZS5kYXRhO1xuXHR9XG5cdGlmICh2YWx1ZT8uX19hcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlLmRhdGEpLmJ1ZmZlcjtcblx0cmV0dXJuIHZhbHVlO1xufVxudmFyIEhFQURFUl9TSVpFID0gMzI7XG52YXIgTE9DS19PRkZTRVQgPSAwO1xudmFyIFNFUV9PRkZTRVQgPSA0O1xudmFyIFNJWkVfT0ZGU0VUID0gODtcbnZhciBGTEFHU19PRkZTRVQgPSAxMjtcbnZhciBSRUFEWV9PRkZTRVQgPSAxNjtcbnZhciBBQ0tfT0ZGU0VUID0gMjA7XG52YXIgREFUQV9PRkZTRVQgPSBIRUFERVJfU0laRTtcbnZhciBGTEFHX0hBU19UUkFOU0ZFUiA9IDE7XG52YXIgRkxBR19DT01QUkVTU0VEID0gMjtcbnZhciBGTEFHX1JFU1BPTlNFID0gNDtcbnZhciBBdG9taWNzQnVmZmVyID0gY2xhc3Mge1xuXHRfY29uZmlnO1xuXHRfc2hhcmVkQnVmZmVyO1xuXHRfaW50MzJWaWV3O1xuXHRfdWludDhWaWV3O1xuXHRfbWF4RGF0YVNpemU7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yU2l6ZSA9IDY1NTM2LCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdGlmICh0eXBlb2YgYnVmZmVyT3JTaXplID09PSBcIm51bWJlclwiKSB0aGlzLl9zaGFyZWRCdWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoYnVmZmVyT3JTaXplKTtcblx0XHRlbHNlIHRoaXMuX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlck9yU2l6ZTtcblx0XHR0aGlzLl9pbnQzMlZpZXcgPSBuZXcgSW50MzJBcnJheSh0aGlzLl9zaGFyZWRCdWZmZXIpO1xuXHRcdHRoaXMuX3VpbnQ4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuX3NoYXJlZEJ1ZmZlcik7XG5cdFx0dGhpcy5fbWF4RGF0YVNpemUgPSB0aGlzLl9jb25maWcubWF4TWVzc2FnZVNpemUgPz8gdGhpcy5fc2hhcmVkQnVmZmVyLmJ5dGVMZW5ndGggLSBIRUFERVJfU0laRTtcblx0fVxuXHRhc3luYyB3cml0ZShkYXRhLCBmbGFncyA9IDApIHtcblx0XHRpZiAoZGF0YS5ieXRlTGVuZ3RoID4gdGhpcy5fbWF4RGF0YVNpemUpIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSB0b28gbGFyZ2U6ICR7ZGF0YS5ieXRlTGVuZ3RofSA+ICR7dGhpcy5fbWF4RGF0YVNpemV9YCk7XG5cdFx0d2hpbGUgKEF0b21pY3MuY29tcGFyZUV4Y2hhbmdlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwLCAxKSAhPT0gMCkgaWYgKCh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcyA/IGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAxLCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gMTAwKS52YWx1ZSA6IEF0b21pY3Mud2FpdCh0aGlzLl9pbnQzMlZpZXcsIExPQ0tfT0ZGU0VUIC8gNCwgMSwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDEwMCkpID09PSBcInRpbWVkLW91dFwiKSBjb250aW51ZTtcblx0XHR0cnkge1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCwgZGF0YS5ieXRlTGVuZ3RoKTtcblx0XHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0LCBmbGFncyk7XG5cdFx0XHR0aGlzLl91aW50OFZpZXcuc2V0KGRhdGEsIERBVEFfT0ZGU0VUKTtcblx0XHRcdEF0b21pY3MuYWRkKHRoaXMuX2ludDMyVmlldywgU0VRX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDEpO1xuXHRcdFx0QXRvbWljcy5ub3RpZnkodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAwKTtcblx0XHRcdEF0b21pY3Mubm90aWZ5KHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVhZCgpIHtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCkgPT09IDApIHtcblx0XHRcdGlmICgodGhpcy5fY29uZmlnLnVzZUFzeW5jV2FpdCAmJiBcIndhaXRBc3luY1wiIGluIEF0b21pY3MgPyBhd2FpdCBBdG9taWNzLndhaXRBc3luYyh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDAsIHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyAxZTMpLnZhbHVlIDogQXRvbWljcy53YWl0KHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCwgMCwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDFlMykpID09PSBcInRpbWVkLW91dFwiKSByZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZSA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIFNJWkVfT0ZGU0VUIC8gNCk7XG5cdFx0Y29uc3QgZmxhZ3MgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBGTEFHU19PRkZTRVQgLyA0KTtcblx0XHRjb25zdCBzZXEgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdFx0aWYgKHNpemUgPD0gMCB8fCBzaXplID4gdGhpcy5fbWF4RGF0YVNpemUpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShzaXplKTtcblx0XHRkYXRhLnNldCh0aGlzLl91aW50OFZpZXcuc3ViYXJyYXkoREFUQV9PRkZTRVQsIERBVEFfT0ZGU0VUICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0LCAwKTtcblx0XHRBdG9taWNzLmFkZCh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0LCAxKTtcblx0XHRBdG9taWNzLm5vdGlmeSh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGF0YSxcblx0XHRcdGZsYWdzLFxuXHRcdFx0c2VxXG5cdFx0fTtcblx0fVxuXHRhc3luYyB3YWl0QWNrKGV4cGVjdGVkU2VxKSB7XG5cdFx0Y29uc3QgdGltZW91dCA9IHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyA1ZTM7XG5cdFx0Y29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXHRcdHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XG5cdFx0XHRjb25zdCBhY2sgPSBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCk7XG5cdFx0XHRpZiAoYWNrID49IGV4cGVjdGVkU2VxKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykgYXdhaXQgQXRvbWljcy53YWl0QXN5bmModGhpcy5faW50MzJWaWV3LCBBQ0tfT0ZGU0VUIC8gNCwgYWNrLCAxMDApLnZhbHVlO1xuXHRcdFx0ZWxzZSBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Z2V0IGJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2hhcmVkQnVmZmVyO1xuXHR9XG5cdGdldCBjdXJyZW50U2VxKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCk7XG5cdH1cbn07XG52YXIgQXRvbWljc1RyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc2VuZEJ1ZmZlcjtcblx0X3JlY3ZCdWZmZXI7XG5cdF9lbmNvZGVyID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9wb2xsaW5nID0gZmFsc2U7XG5cdF9wb2xsQWJvcnQgPSBudWxsO1xuXHRfd29ya2VySWQgPSBVVUlEdjQoKTtcblx0X2xhc3RTZXEgPSAwO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdHRoaXMuX3NlbmRCdWZmZXIgPSBzZW5kQnVmZmVyIGluc3RhbmNlb2YgQXRvbWljc0J1ZmZlciA/IHNlbmRCdWZmZXIgOiBuZXcgQXRvbWljc0J1ZmZlcihzZW5kQnVmZmVyLCBfY29uZmlnKTtcblx0XHR0aGlzLl9yZWN2QnVmZmVyID0gcmVjdkJ1ZmZlciBpbnN0YW5jZW9mIEF0b21pY3NCdWZmZXIgPyByZWN2QnVmZmVyIDogbmV3IEF0b21pY3NCdWZmZXIocmVjdkJ1ZmZlciwgX2NvbmZpZyk7XG5cdFx0dGhpcy5faW5pdCgpO1xuXHR9XG5cdGFzeW5jIF9pbml0KCkge1xuXHRcdHRoaXMuX2VuY29kZXIgPSBhd2FpdCBnZXRDQk9SRW5jb2RlcigpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0fVxuXHRhc3luYyBzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRpZiAoIXRoaXMuX2VuY29kZXIpIGF3YWl0IHRoaXMuX2luaXQoKTtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGxldCBmbGFncyA9IDA7XG5cdFx0aWYgKHRyYW5zZmVyPy5sZW5ndGgpIHtcblx0XHRcdGZsYWdzIHw9IEZMQUdfSEFTX1RSQU5TRkVSO1xuXHRcdFx0ZGF0YS5fdHJhbnNmZXJNZXRhID0gdHJhbnNmZXIubWFwKCh0LCBpKSA9PiAoe1xuXHRcdFx0XHRpbmRleDogaSxcblx0XHRcdFx0dHlwZTogdC5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0XHR0cmFuc2ZlcnJlZDogdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIFwidHJhbnNmZXJcIiBpbiB0XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGNvbnN0IGVuY29kZWQgPSB0aGlzLl9lbmNvZGVyLmVuY29kZShkYXRhKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmNvbXByZXNzaW9uICYmIGVuY29kZWQubGVuZ3RoID4gMTAyNCkgZmxhZ3MgfD0gRkxBR19DT01QUkVTU0VEO1xuXHRcdGF3YWl0IHRoaXMuX3NlbmRCdWZmZXIud3JpdGUoZW5jb2RlZCwgZmxhZ3MpO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoIXRoaXMuX3BvbGxpbmcpIHRoaXMuX3N0YXJ0UG9sbGluZygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fc3RvcFBvbGxpbmcoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGFzeW5jIF9zdGFydFBvbGxpbmcoKSB7XG5cdFx0aWYgKHRoaXMuX3BvbGxpbmcpIHJldHVybjtcblx0XHR0aGlzLl9wb2xsaW5nID0gdHJ1ZTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInBvbGxpbmdcIik7XG5cdFx0d2hpbGUgKHRoaXMuX3BvbGxpbmcgJiYgIXRoaXMuX3BvbGxBYm9ydC5zaWduYWwuYWJvcnRlZCkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlY3ZCdWZmZXIucmVhZCgpO1xuXHRcdFx0aWYgKCFyZXN1bHQpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKHJlc3VsdC5zZXEgPD0gdGhpcy5fbGFzdFNlcSkgY29udGludWU7XG5cdFx0XHR0aGlzLl9sYXN0U2VxID0gcmVzdWx0LnNlcTtcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLl9lbmNvZGVyLmRlY29kZShyZXN1bHQuZGF0YSk7XG5cdFx0XHRkYXRhLnNlcSA9IHJlc3VsdC5zZXE7XG5cdFx0XHRkYXRhLndvcmtlcklkID0gZGF0YS53b3JrZXJJZCA/PyB0aGlzLl93b3JrZXJJZDtcblx0XHRcdGlmIChyZXN1bHQuZmxhZ3MgJiBGTEFHX1JFU1BPTlNFIHx8IGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiKSB7XG5cdFx0XHRcdGlmIChkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRfc3RvcFBvbGxpbmcoKSB7XG5cdFx0dGhpcy5fcG9sbGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX3BvbGxBYm9ydD8uYWJvcnQoKTtcblx0XHR0aGlzLl9wb2xsQWJvcnQgPSBudWxsO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJzdG9wcGVkXCIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9zdG9wUG9sbGluZygpO1xuXHR9XG5cdGdldCBzZW5kQnVmZmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zZW5kQnVmZmVyLmJ1ZmZlcjtcblx0fVxuXHRnZXQgcmVjdkJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVjdkJ1ZmZlci5idWZmZXI7XG5cdH1cblx0Z2V0IHdvcmtlcklkKCkge1xuXHRcdHJldHVybiB0aGlzLl93b3JrZXJJZDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIoY2hhbm5lbE5hbWUsIGNvbmZpZyA9IHt9KSB7XG5cdGNvbnN0IGJ1ZmZlclNpemUgPSBjb25maWcuYnVmZmVyU2l6ZSA/PyA2NTUzNjtcblx0Y29uc3QgYnVmZmVyQSA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0Y29uc3QgYnVmZmVyQiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJTaXplKTtcblx0cmV0dXJuIHtcblx0XHRtYWluOiBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgYnVmZmVyQSwgYnVmZmVyQiwgY29uZmlnKSxcblx0XHR3b3JrZXI6IHtcblx0XHRcdHNlbmRCdWZmZXI6IGJ1ZmZlckIsXG5cdFx0XHRyZWN2QnVmZmVyOiBidWZmZXJBXG5cdFx0fVxuXHR9O1xufVxuZnVuY3Rpb24gY3JlYXRlV29ya2VyQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgc2VuZEJ1ZmZlciwgcmVjdkJ1ZmZlciwgY29uZmlnID0ge30pIHtcblx0cmV0dXJuIG5ldyBBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBjb25maWcpO1xufVxudmFyIEF0b21pY3NSaW5nQnVmZmVyID0gY2xhc3MgQXRvbWljc1JpbmdCdWZmZXIge1xuXHRfYnVmZmVyO1xuXHRfbWV0YTtcblx0X2RhdGE7XG5cdF9zbG90U2l6ZTtcblx0X3Nsb3RDb3VudDtcblx0X21hc2s7XG5cdHN0YXRpYyBNRVRBX1NJWkUgPSAxNjtcblx0c3RhdGljIFdSSVRFX0lEWCA9IDA7XG5cdHN0YXRpYyBSRUFEX0lEWCA9IDQ7XG5cdHN0YXRpYyBPVkVSRkxPVyA9IDg7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlck9yQ29uZmlnID0ge30pIHtcblx0XHRpZiAoYnVmZmVyT3JDb25maWcgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikge1xuXHRcdFx0dGhpcy5fYnVmZmVyID0gYnVmZmVyT3JDb25maWc7XG5cdFx0XHR0aGlzLl9zbG90Q291bnQgPSA2NDtcblx0XHRcdHRoaXMuX3Nsb3RTaXplID0gKHRoaXMuX2J1ZmZlci5ieXRlTGVuZ3RoIC0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKSAvIHRoaXMuX3Nsb3RDb3VudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fc2xvdFNpemUgPSBidWZmZXJPckNvbmZpZy5zbG90U2l6ZSA/PyAxMDI0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gYnVmZmVyT3JDb25maWcuc2xvdENvdW50ID8/IDY0O1xuXHRcdFx0dGhpcy5fc2xvdENvdW50ID0gMSA8PCBNYXRoLmNlaWwoTWF0aC5sb2cyKHRoaXMuX3Nsb3RDb3VudCkpO1xuXHRcdFx0Y29uc3QgdG90YWxTaXplID0gQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFICsgdGhpcy5fc2xvdFNpemUgKiB0aGlzLl9zbG90Q291bnQ7XG5cdFx0XHR0aGlzLl9idWZmZXIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIodG90YWxTaXplKTtcblx0XHR9XG5cdFx0dGhpcy5fbWV0YSA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX2J1ZmZlciwgMCwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFIC8gNCk7XG5cdFx0dGhpcy5fZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuX2J1ZmZlciwgQXRvbWljc1JpbmdCdWZmZXIuTUVUQV9TSVpFKTtcblx0XHR0aGlzLl9tYXNrID0gdGhpcy5fc2xvdENvdW50IC0gMTtcblx0fVxuXHR3cml0ZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEuYnl0ZUxlbmd0aCA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKCh3cml0ZUlkeCArIDEgJiB0aGlzLl9tYXNrKSA9PT0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSkge1xuXHRcdFx0QXRvbWljcy5hZGQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuT1ZFUkZMT1csIDEpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBzbG90ID0gKHdyaXRlSWR4ICYgdGhpcy5fbWFzaykgKiB0aGlzLl9zbG90U2l6ZTtcblx0XHRuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5zZXRVaW50MzIoMCwgZGF0YS5ieXRlTGVuZ3RoLCB0cnVlKTtcblx0XHR0aGlzLl9kYXRhLnNldChkYXRhLCBzbG90ICsgNCk7XG5cdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgsIHdyaXRlSWR4ICsgMSk7XG5cdFx0QXRvbWljcy5ub3RpZnkodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHdyaXRlSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCk7XG5cdFx0Y29uc3QgcmVhZElkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCk7XG5cdFx0aWYgKHJlYWRJZHggPT09IHdyaXRlSWR4KSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBzbG90ID0gKHJlYWRJZHggJiB0aGlzLl9tYXNrKSAqIHRoaXMuX3Nsb3RTaXplO1xuXHRcdGNvbnN0IHNpemUgPSBuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyBzbG90KS5nZXRVaW50MzIoMCwgdHJ1ZSk7XG5cdFx0aWYgKHNpemUgPT09IDAgfHwgc2l6ZSA+IHRoaXMuX3Nsb3RTaXplIC0gNCkgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuXHRcdGRhdGEuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkoc2xvdCArIDQsIHNsb3QgKyA0ICsgc2l6ZSkpO1xuXHRcdEF0b21pY3Muc3RvcmUodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuUkVBRF9JRFgsIHJlYWRJZHggKyAxKTtcblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXHRhc3luYyB3YWl0UmVhZCh0aW1lb3V0KSB7XG5cdFx0Y29uc3Qgd3JpdGVJZHggPSBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRpZiAoQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKSA8IHdyaXRlSWR4KSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0aWYgKFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcykge1xuXHRcdFx0aWYgKGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCwgd3JpdGVJZHgsIHRpbWVvdXQgPz8gMWUzKS52YWx1ZSA9PT0gXCJva1wiKSByZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIE1hdGgubWluKHRpbWVvdXQgPz8gMWUzLCAxMDApKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkKCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGdldCBidWZmZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0fVxuXHRnZXQgYXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKSAtIEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCkgJiB0aGlzLl9tYXNrO1xuXHR9XG5cdGdldCBvdmVyZmxvdygpIHtcblx0XHRyZXR1cm4gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLk9WRVJGTE9XKTtcblx0fVxufTtcbnZhciBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRjcmVhdGVQYWlyOiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlQnVmZmVyOiAoc2l6ZU9yQnVmZmVyLCBjb25maWcpID0+IG5ldyBBdG9taWNzQnVmZmVyKHNpemVPckJ1ZmZlciwgY29uZmlnKSxcblx0Y3JlYXRlUmluZ0J1ZmZlcjogKGNvbmZpZykgPT4gbmV3IEF0b21pY3NSaW5nQnVmZmVyKGNvbmZpZyksXG5cdGdldENCT1I6IGdldENCT1JFbmNvZGVyXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvUlRDRGF0YUNoYW5uZWxUcmFuc3BvcnQudHNcbnZhciBERUZBVUxUX0lDRV9TRVJWRVJTID0gW1xuXHR7IHVybHM6IFwic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4xLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH0sXG5cdHsgdXJsczogXCJzdHVuOnN0dW4yLmwuZ29vZ2xlLmNvbToxOTMwMlwiIH1cbl07XG52YXIgUlRDUGVlclRyYW5zcG9ydCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfcGM7XG5cdF9jaGFubmVsID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9sb2NhbElkID0gVVVJRHY0KCk7XG5cdF9yZW1vdGVJZCA9IG51bGw7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2hhbm5lbFN0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9pY2VDYW5kaWRhdGVzID0gW107XG5cdF9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdFx0dGhpcy5fcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oeyBpY2VTZXJ2ZXJzOiBfY29uZmlnLmljZVNlcnZlcnMgPz8gREVGQVVMVF9JQ0VfU0VSVkVSUyB9KTtcblx0XHR0aGlzLl9zZXR1cFBlZXJDb25uZWN0aW9uKCk7XG5cdH1cblx0X3NldHVwUGVlckNvbm5lY3Rpb24oKSB7XG5cdFx0dGhpcy5fcGMub25pY2VjYW5kaWRhdGUgPSAoZSkgPT4ge1xuXHRcdFx0aWYgKGUuY2FuZGlkYXRlKSB7XG5cdFx0XHRcdHRoaXMuX2ljZUNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZS50b0pTT04oKSk7XG5cdFx0XHRcdGlmICh0aGlzLl9yZW1vdGVJZCAmJiB0aGlzLl9jb25maWcuc2lnbmFsaW5nKSB0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQodGhpcy5fcmVtb3RlSWQsIHtcblx0XHRcdFx0XHR0eXBlOiBcImljZS1jYW5kaWRhdGVcIixcblx0XHRcdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0XHRcdHRvUGVlcklkOiB0aGlzLl9yZW1vdGVJZCxcblx0XHRcdFx0XHRjYW5kaWRhdGU6IGUuY2FuZGlkYXRlLnRvSlNPTigpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5fcGMub25pY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wYy5pY2VHYXRoZXJpbmdTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB0aGlzLl9pY2VHYXRoZXJpbmdDb21wbGV0ZSA9IHRydWU7XG5cdFx0fTtcblx0XHR0aGlzLl9wYy5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQodGhpcy5fcGMuY29ubmVjdGlvblN0YXRlKTtcblx0XHRcdGlmICh0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUgPT09IFwiZmFpbGVkXCIgfHwgdGhpcy5fcGMuY29ubmVjdGlvblN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiKSBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvbm5lY3Rpb24gJHt0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGV9YCkpO1xuXHRcdH07XG5cdFx0dGhpcy5fcGMub25kYXRhY2hhbm5lbCA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXR1cERhdGFDaGFubmVsKGUuY2hhbm5lbCk7XG5cdFx0fTtcblx0fVxuXHRfc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0Y2hhbm5lbC5iaW5hcnlUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuXHRcdGNoYW5uZWwub25vcGVuID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2hhbm5lbFN0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9uZXJyb3IgPSAoZSkgPT4ge1xuXHRcdFx0Y29uc3QgZXJyID0gLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkRhdGFDaGFubmVsIGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdFx0bGV0IGRhdGE7XG5cdFx0XHRpZiAodHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcblx0XHRcdGVsc2UgZGF0YSA9IHRoaXMuX2RlY29kZUJpbmFyeShlLmRhdGEpO1xuXHRcdFx0ZGF0YS5wZWVySWQgPSB0aGlzLl9yZW1vdGVJZCA/PyB2b2lkIDA7XG5cdFx0XHRkYXRhLmRhdGFDaGFubmVsTGFiZWwgPSBjaGFubmVsLmxhYmVsO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0YXN5bmMgY3JlYXRlT2ZmZXIocmVtb3RlSWQpIHtcblx0XHR0aGlzLl9yZW1vdGVJZCA9IHJlbW90ZUlkO1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9wYy5jcmVhdGVEYXRhQ2hhbm5lbCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnLmRhdGFDaGFubmVsT3B0aW9ucyk7XG5cdFx0dGhpcy5fc2V0dXBEYXRhQ2hhbm5lbChjaGFubmVsKTtcblx0XHRjb25zdCBvZmZlciA9IGF3YWl0IHRoaXMuX3BjLmNyZWF0ZU9mZmVyKCk7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwib2ZmZXJcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogcmVtb3RlSWQsXG5cdFx0XHRzZHA6IG9mZmVyLnNkcFxuXHRcdH07XG5cdH1cblx0YXN5bmMgaGFuZGxlT2ZmZXIoc2lnbmFsKSB7XG5cdFx0dGhpcy5fcmVtb3RlSWQgPSBzaWduYWwuZnJvbVBlZXJJZDtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7XG5cdFx0XHR0eXBlOiBcIm9mZmVyXCIsXG5cdFx0XHRzZHA6IHNpZ25hbC5zZHBcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCB0aGlzLl9wYy5jcmVhdGVBbnN3ZXIoKTtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IFwiYW5zd2VyXCIsXG5cdFx0XHRmcm9tUGVlcklkOiB0aGlzLl9sb2NhbElkLFxuXHRcdFx0dG9QZWVySWQ6IHNpZ25hbC5mcm9tUGVlcklkLFxuXHRcdFx0c2RwOiBhbnN3ZXIuc2RwXG5cdFx0fTtcblx0fVxuXHRhc3luYyBoYW5kbGVBbnN3ZXIoc2lnbmFsKSB7XG5cdFx0YXdhaXQgdGhpcy5fcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe1xuXHRcdFx0dHlwZTogXCJhbnN3ZXJcIixcblx0XHRcdHNkcDogc2lnbmFsLnNkcFxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGFkZEljZUNhbmRpZGF0ZShzaWduYWwpIHtcblx0XHRpZiAoc2lnbmFsLmNhbmRpZGF0ZSkgYXdhaXQgdGhpcy5fcGMuYWRkSWNlQ2FuZGlkYXRlKHNpZ25hbC5jYW5kaWRhdGUpO1xuXHR9XG5cdHNlbmQobXNnLCBiaW5hcnkpIHtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWwgfHwgdGhpcy5fY2hhbm5lbC5yZWFkeVN0YXRlICE9PSBcIm9wZW5cIikgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBwZWVySWQsIGRhdGFDaGFubmVsTGFiZWwsIC4uLmRhdGEgfSA9IG1zZztcblx0XHRpZiAoYmluYXJ5IHx8IG1zZy5iaW5hcnkpIHRoaXMuX2NoYW5uZWwuc2VuZCh0aGlzLl9lbmNvZGVCaW5hcnkoZGF0YSkpO1xuXHRcdGVsc2UgdGhpcy5fY2hhbm5lbC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0fVxuXHRyZXF1ZXN0KG1zZykge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0fSwgdGhpcy5fY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2VuY29kZUJpbmFyeShkYXRhKSB7XG5cdFx0Y29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbikuYnVmZmVyO1xuXHR9XG5cdF9kZWNvZGVCaW5hcnkoYnVmZmVyKSB7XG5cdFx0Y29uc3QganNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShidWZmZXIpO1xuXHRcdHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHRpZiAodGhpcy5fcmVtb3RlSWQgJiYgdGhpcy5fY29uZmlnLnNpZ25hbGluZykgdGhpcy5fY29uZmlnLnNpZ25hbGluZy5zZW5kKHRoaXMuX3JlbW90ZUlkLCB7XG5cdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogdGhpcy5fcmVtb3RlSWRcblx0XHR9KTtcblx0XHR0aGlzLl9jaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMuX3BjLmNsb3NlKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHJlbW90ZUlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZW1vdGVJZDtcblx0fVxuXHRnZXQgY29ubmVjdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbD8ucmVhZHlTdGF0ZSA/PyBudWxsO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxTdGF0ZU9ic2VydmFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxTdGF0ZTtcblx0fVxuXHRnZXQgaWNlQ2FuZGlkYXRlcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2ljZUNhbmRpZGF0ZXNdO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG52YXIgUlRDUGVlck1hbmFnZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X2NvbmZpZztcblx0X3BlZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xvY2FsSWQgPSBVVUlEdjQoKTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfc2lnbmFsaW5nQ2xlYW51cCA9IG51bGw7XG5cdF9wZWVyRXZlbnRzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9zZXR1cFNpZ25hbGluZygpO1xuXHR9XG5cdF9zZXR1cFNpZ25hbGluZygpIHtcblx0XHRpZiAoIXRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIHJldHVybjtcblx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5fY29uZmlnLnNpZ25hbGluZy5vbk1lc3NhZ2UoYXN5bmMgKHNpZ25hbCkgPT4ge1xuXHRcdFx0aWYgKHNpZ25hbC50b1BlZXJJZCAhPT0gdGhpcy5fbG9jYWxJZCkgcmV0dXJuO1xuXHRcdFx0c3dpdGNoIChzaWduYWwudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwib2ZmZXJcIjoge1xuXHRcdFx0XHRcdGNvbnN0IGFuc3dlciA9IGF3YWl0IHRoaXMuX2dldE9yQ3JlYXRlUGVlcihzaWduYWwuZnJvbVBlZXJJZCkuaGFuZGxlT2ZmZXIoc2lnbmFsKTtcblx0XHRcdFx0XHR0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQoc2lnbmFsLmZyb21QZWVySWQsIGFuc3dlcik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImFuc3dlclwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChzaWduYWwuZnJvbVBlZXJJZCk7XG5cdFx0XHRcdFx0aWYgKHBlZXIpIGF3YWl0IHBlZXIuaGFuZGxlQW5zd2VyKHNpZ25hbCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImljZS1jYW5kaWRhdGVcIjoge1xuXHRcdFx0XHRcdGNvbnN0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0XHRcdGlmIChwZWVyKSBhd2FpdCBwZWVyLmFkZEljZUNhbmRpZGF0ZShzaWduYWwpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJkaXNjb25uZWN0XCI6IHRoaXMuX3JlbW92ZVBlZXIoc2lnbmFsLmZyb21QZWVySWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICh0eXBlb2YgY2xlYW51cCA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gY2xlYW51cDtcblx0XHRlbHNlIGlmIChjbGVhbnVwICYmIFwidW5zdWJzY3JpYmVcIiBpbiBjbGVhbnVwKSB0aGlzLl9zaWduYWxpbmdDbGVhbnVwID0gKCkgPT4gY2xlYW51cC51bnN1YnNjcmliZSgpO1xuXHR9XG5cdF9nZXRPckNyZWF0ZVBlZXIocGVlcklkKSB7XG5cdFx0bGV0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQocGVlcklkKTtcblx0XHRpZiAoIXBlZXIpIHtcblx0XHRcdHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydCh0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHRcdHRoaXMuX3BlZXJzLnNldChwZWVySWQsIHBlZXIpO1xuXHRcdFx0cGVlci5zdGF0ZS5zdWJzY3JpYmUoeyBuZXh0OiAoc3RhdGUpID0+IHtcblx0XHRcdFx0aWYgKHN0YXRlID09PSBcImNvbm5lY3RlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkLFxuXHRcdFx0XHRcdHBlZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiIHx8IHN0YXRlID09PSBcImNsb3NlZFwiKSB0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRlbHNlIGlmIChzdGF0ZSA9PT0gXCJmYWlsZWRcIikge1xuXHRcdFx0XHRcdHRoaXMuX3BlZXJFdmVudHMubmV4dCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImZhaWxlZFwiLFxuXHRcdFx0XHRcdFx0cGVlcklkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5fcmVtb3ZlUGVlcihwZWVySWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IH0pO1xuXHRcdFx0cGVlci5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZSkgPT4ge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRfcmVtb3ZlUGVlcihwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk7XG5cdFx0aWYgKHBlZXIpIHtcblx0XHRcdHBlZXIuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3BlZXJzLmRlbGV0ZShwZWVySWQpO1xuXHRcdFx0dGhpcy5fcGVlckV2ZW50cy5uZXh0KHtcblx0XHRcdFx0dHlwZTogXCJkaXNjb25uZWN0ZWRcIixcblx0XHRcdFx0cGVlcklkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY29ubmVjdChwZWVySWQpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fZ2V0T3JDcmVhdGVQZWVyKHBlZXJJZCk7XG5cdFx0Y29uc3Qgb2ZmZXIgPSBhd2FpdCBwZWVyLmNyZWF0ZU9mZmVyKHBlZXJJZCk7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIGF3YWl0IHRoaXMuX2NvbmZpZy5zaWduYWxpbmcuc2VuZChwZWVySWQsIG9mZmVyKTtcblx0XHRyZXR1cm4gcGVlcjtcblx0fVxuXHRzZW5kKHBlZXJJZCwgbXNnKSB7XG5cdFx0dGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk/LnNlbmQobXNnKTtcblx0fVxuXHRicm9hZGNhc3QobXNnKSB7XG5cdFx0Zm9yIChjb25zdCBwZWVyIG9mIHRoaXMuX3BlZXJzLnZhbHVlcygpKSBwZWVyLnNlbmQobXNnKTtcblx0fVxuXHRyZXF1ZXN0KHBlZXJJZCwgbXNnKSB7XG5cdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChwZWVySWQpO1xuXHRcdGlmICghcGVlcikgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJQZWVyIG5vdCBmb3VuZFwiKSk7XG5cdFx0cmV0dXJuIHBlZXIucmVxdWVzdChtc2cpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRvblBlZXJFdmVudChoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BlZXJFdmVudHMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRnZXRQZWVycygpIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgW2lkLCBwZWVyXSBvZiB0aGlzLl9wZWVycykgcmVzdWx0LnNldChpZCwge1xuXHRcdFx0aWQsXG5cdFx0XHRjb25uZWN0aW9uU3RhdGU6IHBlZXIuY29ubmVjdGlvblN0YXRlLFxuXHRcdFx0aWNlQ29ubmVjdGlvblN0YXRlOiBcIm5ld1wiLFxuXHRcdFx0ZGF0YUNoYW5uZWxTdGF0ZTogcGVlci5jaGFubmVsU3RhdGUgPz8gXCJjbG9zZWRcIlxuXHRcdH0pO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc2lnbmFsaW5nQ2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgcGVlciBvZiB0aGlzLl9wZWVycy52YWx1ZXMoKSkgcGVlci5jbG9zZSgpO1xuXHRcdHRoaXMuX3BlZXJzLmNsZWFyKCk7XG5cdH1cblx0Z2V0IGxvY2FsSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xvY2FsSWQ7XG5cdH1cblx0Z2V0IHBlZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcGVlcnMuc2l6ZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nKGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYHJ0Yy1zaWduYWxpbmc6JHtjaGFubmVsTmFtZX1gKTtcblx0Y29uc3QgaGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRiYy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuXHRcdGZvciAoY29uc3QgaCBvZiBoYW5kbGVycykgaChlLmRhdGEpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQocGVlcklkLCBtZXNzYWdlKSB7XG5cdFx0XHRiYy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9LFxuXHRcdG9uTWVzc2FnZShoYW5kbGVyKSB7XG5cdFx0XHRoYW5kbGVycy5hZGQoaGFuZGxlcik7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR1bnN1YnNjcmliZTogKCkgPT4gaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpLFxuXHRcdFx0XHRjbG9zZWQ6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7XG5cdFx0XHRiYy5jbG9zZSgpO1xuXHRcdFx0aGFuZGxlcnMuY2xlYXIoKTtcblx0XHR9XG5cdH07XG59XG52YXIgUlRDVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlUGVlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJUcmFuc3BvcnQobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlTWFuYWdlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJNYW5hZ2VyKG5hbWUsIGNvbmZpZyksXG5cdGNyZWF0ZVNpZ25hbGluZzogKG5hbWUpID0+IGNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyhuYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1BvcnRUcmFuc3BvcnQudHNcbnZhciBQb3J0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9wb3J0O1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9wb3J0SWQgPSBVVUlEdjQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9rZWVwQWxpdmVUaW1lciA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKHBvcnQsIF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9wb3J0ID0gcG9ydDtcblx0XHR0aGlzLl9zZXR1cFBvcnQoKTtcblx0XHRpZiAoX2NvbmZpZy5hdXRvU3RhcnQgIT09IGZhbHNlKSB0aGlzLnN0YXJ0KCk7XG5cdH1cblx0X3NldHVwUG9ydCgpIHtcblx0XHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBlLmRhdGE7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJwaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwb25nXCIgfVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YS5wb3J0SWQgPSBkYXRhLnBvcnRJZCA/PyB0aGlzLl9wb3J0SWQ7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGVyckhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUG9ydCBlcnJvclwiKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZXJyKTtcblx0XHR9O1xuXHRcdHRoaXMuX3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0c3RhcnQoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX3BvcnQuc3RhcnQoKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmtlZXBBbGl2ZSkgdGhpcy5fc3RhcnRLZWVwQWxpdmUoKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZSwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdHRoaXMuX3BvcnQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0Li4uZGF0YSxcblx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0fSwgdHJhbnNmZXIgPz8gW10pO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcudGltZW91dCA/PyAzZTQpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZTogKHYpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9zdGFydEtlZXBBbGl2ZSgpIHtcblx0XHR0aGlzLl9rZWVwQWxpdmVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5fcG9ydElkLFxuXHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IGFjdGlvbjogXCJwaW5nXCIgfVxuXHRcdFx0fSk7XG5cdFx0fSwgdGhpcy5fY29uZmlnLmtlZXBBbGl2ZUludGVydmFsID8/IDNlNCk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2tlZXBBbGl2ZVRpbWVyKTtcblx0XHRcdHRoaXMuX2tlZXBBbGl2ZVRpbWVyID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHR9XG5cdGdldCBwb3J0KCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0O1xuXHR9XG5cdGdldCBwb3J0SWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRJZDtcblx0fVxuXHRnZXQgaXNMaXN0ZW5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3RlbmluZztcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUGFpcihjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0cmV0dXJuIHtcblx0XHRsb2NhbDogbmV3IFBvcnRUcmFuc3BvcnQoY2hhbm5lbC5wb3J0MSwgY2hhbm5lbE5hbWUsIGNvbmZpZyksXG5cdFx0cmVtb3RlOiBjaGFubmVsLnBvcnQyLFxuXHRcdHRyYW5zZmVyOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhbm5lbC5wb3J0Mjtcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVGcm9tUG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdHJldHVybiBuZXcgUG9ydFRyYW5zcG9ydChwb3J0LCBjaGFubmVsTmFtZSwgY29uZmlnKTtcbn1cbnZhciBQb3J0UG9vbCA9IGNsYXNzIHtcblx0X2RlZmF1bHRDb25maWc7XG5cdF9jaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9tYWluUG9ydCA9IG51bGw7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3RydWN0b3IoX2RlZmF1bHRDb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2RlZmF1bHRDb25maWcgPSBfZGVmYXVsdENvbmZpZztcblx0fVxuXHRjcmVhdGUoY2hhbm5lbE5hbWUsIGNvbmZpZykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUNoYW5uZWxQYWlyKGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0cmVzdWx0LmxvY2FsLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHJlc3VsdC5sb2NhbCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRhZGQoY2hhbm5lbE5hbWUsIHBvcnQsIGNvbmZpZykge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIGNoYW5uZWxOYW1lLCB7XG5cdFx0XHQuLi50aGlzLl9kZWZhdWx0Q29uZmlnLFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fSk7XG5cdFx0dHJhbnNwb3J0LnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/Lihtc2cpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0cmV0dXJuIHRyYW5zcG9ydDtcblx0fVxuXHRnZXQoY2hhbm5lbE5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0fVxuXHRzZW5kKGNoYW5uZWxOYW1lLCBtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKT8uc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRicm9hZGNhc3QobXNnLCB0cmFuc2Zlcikge1xuXHRcdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRyZXF1ZXN0KGNoYW5uZWxOYW1lLCBtc2cpIHtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5fY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWNoYW5uZWwpIHJldHVybiBQcm9taXNlLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDaGFubmVsICR7Y2hhbm5lbE5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHRyZXR1cm4gY2hhbm5lbC5yZXF1ZXN0KG1zZyk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJlbW92ZShjaGFubmVsTmFtZSkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9jaGFubmVscy5kZWxldGUoY2hhbm5lbE5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsIG9mIHRoaXMuX2NoYW5uZWxzLnZhbHVlcygpKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5fY2hhbm5lbHMuY2xlYXIoKTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2NoYW5uZWxzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxzLnNpemU7XG5cdH1cbn07XG52YXIgV2luZG93UG9ydENvbm5lY3RvciA9IGNsYXNzIHtcblx0X3RhcmdldDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfdHJhbnNwb3J0ID0gbnVsbDtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdGFyZ2V0LCBfY2hhbm5lbE5hbWUsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl90cmFuc3BvcnQgJiYgdGhpcy5faGFuZHNoYWtlQ29tcGxldGUpIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RpbmdcIik7XG5cdFx0Y29uc3QgeyBsb2NhbCwgcmVtb3RlIH0gPSBjcmVhdGVDaGFubmVsUGFpcih0aGlzLl9jaGFubmVsTmFtZSwgdGhpcy5fY29uZmlnKTtcblx0XHR0aGlzLl90YXJnZXQucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJwb3J0LWNvbm5lY3RcIixcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBvcnRJZDogbG9jYWwucG9ydElkXG5cdFx0fSwgdGhpcy5fY29uZmlnLnRhcmdldE9yaWdpbiA/PyBcIipcIiwgW3JlbW90ZV0pO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiSGFuZHNoYWtlIHRpbWVvdXRcIikpO1xuXHRcdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcuaGFuZHNoYWtlVGltZW91dCA/PyAxZTQpO1xuXHRcdFx0Y29uc3Qgc3ViID0gbG9jYWwuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0XHRpZiAobXNnLnR5cGUgPT09IFwic2lnbmFsXCIgJiYgbXNnLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJoYW5kc2hha2UtYWNrXCIpIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0dGhpcy5faGFuZHNoYWtlQ29tcGxldGUgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX3RyYW5zcG9ydCA9IGxvY2FsO1xuXHRcdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0ZWRcIik7XG5cdFx0XHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShsb2NhbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gfSk7XG5cdFx0fSk7XG5cdH1cblx0c3RhdGljIGxpc3RlbihjaGFubmVsTmFtZSwgaGFuZGxlciwgY29uZmlnKSB7XG5cdFx0Y29uc3QgbXNnSGFuZGxlciA9IChlKSA9PiB7XG5cdFx0XHRpZiAoZS5kYXRhPy50eXBlICE9PSBcInBvcnQtY29ubmVjdFwiIHx8IGUuZGF0YT8uY2hhbm5lbE5hbWUgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0XHRpZiAoIWUucG9ydHNbMF0pIHJldHVybjtcblx0XHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KGUucG9ydHNbMF0sIGNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdFx0dHJhbnNwb3J0LnNlbmQoe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgYWN0aW9uOiBcImhhbmRzaGFrZS1hY2tcIiB9XG5cdFx0XHR9KTtcblx0XHRcdGhhbmRsZXIodHJhbnNwb3J0KTtcblx0XHR9O1xuXHRcdGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0cmV0dXJuICgpID0+IGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHR0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gbnVsbDtcblx0XHR0aGlzLl9oYW5kc2hha2VDb21wbGV0ZSA9IGZhbHNlO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJkaXNjb25uZWN0ZWRcIik7XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9oYW5kc2hha2VDb21wbGV0ZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCB0cmFuc3BvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVBvcnRQcm94eSh0cmFuc3BvcnQsIHRhcmdldFBhdGggPSBbXSkge1xuXHRyZXR1cm4gY3JlYXRlU2VuZGVyUHJveHkoe1xuXHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0Y2hhbm5lbE5hbWU6IHRyYW5zcG9ydC5jaGFubmVsTmFtZSxcblx0XHRzZW5kZXJJZDogdHJhbnNwb3J0LnBvcnRJZFxuXHR9LCB0YXJnZXRQYXRoKTtcbn1cbmZ1bmN0aW9uIGV4cG9zZU92ZXJQb3J0KHRyYW5zcG9ydCwgdGFyZ2V0KSB7XG5cdGNvbnN0IGhhbmRsZXIgPSBjcmVhdGVFeHBvc2VIYW5kbGVyKHRhcmdldCk7XG5cdHJldHVybiB0cmFuc3BvcnQuc3Vic2NyaWJlKHsgbmV4dDogYXN5bmMgKG1zZykgPT4ge1xuXHRcdGlmIChtc2cudHlwZSAhPT0gXCJyZXF1ZXN0XCIgfHwgIW1zZy5wYXlsb2FkPy5wYXRoKSByZXR1cm47XG5cdFx0Y29uc3QgeyBhY3Rpb24sIHBhdGgsIGFyZ3MgfSA9IG1zZy5wYXlsb2FkO1xuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IGVycm9yO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGFjdGlvbiwgcGF0aCwgYXJncyA/PyBbXSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG5cdFx0fVxuXHRcdHRyYW5zcG9ydC5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1zZy5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRyYW5zcG9ydC5wb3J0SWQsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDogZXJyb3IgPyB7IGVycm9yIH0gOiB7IHJlc3VsdCB9XG5cdFx0fSk7XG5cdH0gfSk7XG59XG52YXIgUG9ydFRyYW5zcG9ydEZhY3RvcnkgPSB7XG5cdGNyZWF0ZTogKHBvcnQsIG5hbWUsIGNvbmZpZykgPT4gbmV3IFBvcnRUcmFuc3BvcnQocG9ydCwgbmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUGFpcjogKG5hbWUsIGNvbmZpZykgPT4gY3JlYXRlQ2hhbm5lbFBhaXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlUG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdGNyZWF0ZVdpbmRvd0Nvbm5lY3RvcjogKHRhcmdldCwgbmFtZSwgY29uZmlnKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUsIGNvbmZpZyksXG5cdGxpc3RlbjogV2luZG93UG9ydENvbm5lY3Rvci5saXN0ZW4sXG5cdGNyZWF0ZVByb3h5OiBjcmVhdGVQb3J0UHJveHksXG5cdGV4cG9zZTogZXhwb3NlT3ZlclBvcnRcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvVHJhbnNmZXJhYmxlU3RvcmFnZS50c1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2UgPSBjbGFzcyB7XG5cdF9kYiA9IG51bGw7XG5cdF9jb25maWc7XG5cdF9jaGFuZ2VzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY2xlYW51cFRpbWVyID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0c3RvcmVOYW1lOiBcInRyYW5zZmVyYWJsZVwiLFxuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGluZGV4ZXM6IFtdLFxuXHRcdFx0ZW5hYmxlQ2hhbmdlVHJhY2tpbmc6IHRydWUsXG5cdFx0XHRhdXRvQ2xlYW51cEV4cGlyZWQ6IHRydWUsXG5cdFx0XHRjbGVhbnVwSW50ZXJ2YWw6IDZlNCxcblx0XHRcdC4uLmNvbmZpZ1xuXHRcdH07XG5cdH1cblx0YXN5bmMgb3BlbigpIHtcblx0XHRpZiAodGhpcy5fZGIpIHJldHVybjtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlbmluZ1wiKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKHRoaXMuX2NvbmZpZy5kYk5hbWUsIHRoaXMuX2NvbmZpZy52ZXJzaW9uKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2U6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2RiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwRXhwaXJlZCkgdGhpcy5fc3RhcnRDbGVhbnVwVGltZXIoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImNyZWF0ZWRBdFwiLCBcImNyZWF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInVwZGF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiKTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImV4cGlyZXNBdFwiLCBcImV4cGlyZXNBdFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGlkeCBvZiB0aGlzLl9jb25maWcuaW5kZXhlcykgc3RvcmUuY3JlYXRlSW5kZXgoaWR4Lm5hbWUsIGlkeC5rZXlQYXRoLCB7IHVuaXF1ZTogaWR4LnVuaXF1ZSA/PyBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fY2xlYW51cFRpbWVyKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2NsZWFudXBUaW1lcik7XG5cdFx0XHR0aGlzLl9jbGVhbnVwVGltZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLl9kYj8uY2xvc2UoKTtcblx0XHR0aGlzLl9kYiA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNsb3NlZFwiKTtcblx0fVxuXHRhc3luYyBwdXQoaWQsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRsZXQgYnVmZmVycyA9IG9wdGlvbnMuYnVmZmVycyA/PyBbXTtcblx0XHRpZiAob3B0aW9ucy50cmFuc2ZlciAmJiBidWZmZXJzLmxlbmd0aCA+IDApIGJ1ZmZlcnMgPSBidWZmZXJzLm1hcCgoYnVmKSA9PiB7XG5cdFx0XHRpZiAoXCJ0cmFuc2ZlclwiIGluIGJ1ZiAmJiB0eXBlb2YgYnVmLnRyYW5zZmVyID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBidWYudHJhbnNmZXIoKTtcblx0XHRcdHJldHVybiBidWY7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRjb25zdCByZWNvcmQgPSB7XG5cdFx0XHRpZCxcblx0XHRcdGRhdGEsXG5cdFx0XHRidWZmZXJzOiBidWZmZXJzLmxlbmd0aCA+IDAgPyBidWZmZXJzIDogdm9pZCAwLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG5cdFx0XHRjcmVhdGVkQXQ6IGV4aXN0aW5nPy5jcmVhdGVkQXQgPz8gbm93LFxuXHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRleHBpcmVzQXQ6IG9wdGlvbnMuZXhwaXJlc0luID8gbm93ICsgb3B0aW9ucy5leHBpcmVzSW4gOiB2b2lkIDBcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkucHV0KHJlY29yZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZykgdGhpcy5fY2hhbmdlcy5uZXh0KHtcblx0XHRcdFx0XHR0eXBlOiBleGlzdGluZyA/IFwicHV0XCIgOiBcImFkZFwiLFxuXHRcdFx0XHRcdGtleTogaWQsXG5cdFx0XHRcdFx0cmVjb3JkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyA/PyB2b2lkIDAsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBub3dcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgUHV0IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBwdXRCdWZmZXIoaWQsIGJ1ZmZlciwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMucHV0KGlkLCBidWZmZXIsIHtcblx0XHRcdGJ1ZmZlcnM6IFtidWZmZXJdLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHB1dFR5cGVkQXJyYXkoaWQsIGFycmF5LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0dHlwZTogYXJyYXkuY29uc3RydWN0b3IubmFtZSxcblx0XHRcdGRhdGE6IEFycmF5LmZyb20oYXJyYXkpXG5cdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5wdXQoaWQsIGRhdGEsIHtcblx0XHRcdGJ1ZmZlcnM6IG9wdGlvbnMudHJhbnNmZXIgPyBbYXJyYXkuYnVmZmVyXSA6IHZvaWQgMCxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXQoaWQpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpLmdldChpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChyZWNvcmQ/LmV4cGlyZXNBdCAmJiByZWNvcmQuZXhwaXJlc0F0IDwgRGF0ZS5ub3coKSkge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlKGlkKTtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHR9IGVsc2UgcmVzb2x2ZShyZWNvcmQgPz8gbnVsbCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEdldCBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0QnVmZmVyKGlkLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCkgcmV0dXJuIG51bGw7XG5cdFx0bGV0IGJ1ZmZlciA9IHJlY29yZC5idWZmZXJzPy5bMF0gPz8gKHJlY29yZC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyByZWNvcmQuZGF0YSA6IG51bGwpO1xuXHRcdGlmIChidWZmZXIgJiYgdHJhbnNmZXIpIHtcblx0XHRcdGlmIChcInRyYW5zZmVyXCIgaW4gYnVmZmVyICYmIHR5cGVvZiBidWZmZXIudHJhbnNmZXIgPT09IFwiZnVuY3Rpb25cIikgYnVmZmVyID0gYnVmZmVyLnRyYW5zZmVyKCk7XG5cdFx0fVxuXHRcdHJldHVybiBidWZmZXI7XG5cdH1cblx0YXN5bmMgZ2V0VHlwZWRBcnJheShpZCkge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCB8fCAhcmVjb3JkLmRhdGEgfHwgdHlwZW9mIHJlY29yZC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCB7IHR5cGUsIGRhdGEgfSA9IHJlY29yZC5kYXRhO1xuXHRcdGNvbnN0IFR5cGVkQXJyYXlDdG9yID0gZ2xvYmFsVGhpc1t0eXBlXTtcblx0XHRpZiAoIVR5cGVkQXJyYXlDdG9yKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IFR5cGVkQXJyYXlDdG9yKGRhdGEpO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZShpZCkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZyA/IGF3YWl0IHRoaXMuZ2V0KGlkKSA6IG51bGw7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKS5kZWxldGUoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb25maWcuZW5hYmxlQ2hhbmdlVHJhY2tpbmcgJiYgZXhpc3RpbmcpIHRoaXMuX2NoYW5nZXMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJkZWxldGVcIixcblx0XHRcdFx0XHRrZXk6IGlkLFxuXHRcdFx0XHRcdHByZXZpb3VzUmVjb3JkOiBleGlzdGluZyxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYERlbGV0ZSBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgcXVlcnkocXVlcnkgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpO1xuXHRcdFx0Y29uc3Qgc291cmNlID0gcXVlcnkuaW5kZXggPyBzdG9yZS5pbmRleChxdWVyeS5pbmRleCkgOiBzdG9yZTtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0XHRcdGxldCBza2lwcGVkID0gMDtcblx0XHRcdGNvbnN0IG9mZnNldCA9IHF1ZXJ5Lm9mZnNldCA/PyAwO1xuXHRcdFx0Y29uc3QgbGltaXQgPSBxdWVyeS5saW1pdCA/PyBJbmZpbml0eTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzb3VyY2Uub3BlbkN1cnNvcihxdWVyeS5yYW5nZSwgcXVlcnkuZGlyZWN0aW9uKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFjdXJzb3IgfHwgcmVzdWx0cy5sZW5ndGggPj0gbGltaXQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdHMpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZWNvcmQgPSBjdXJzb3IudmFsdWU7XG5cdFx0XHRcdGlmIChyZWNvcmQuZXhwaXJlc0F0ICYmIHJlY29yZC5leHBpcmVzQXQgPCBEYXRlLm5vdygpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChxdWVyeS5maWx0ZXIgJiYgIXF1ZXJ5LmZpbHRlcihyZWNvcmQpKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChza2lwcGVkIDwgb2Zmc2V0KSB7XG5cdFx0XHRcdFx0c2tpcHBlZCsrO1xuXHRcdFx0XHRcdGN1cnNvci5jb250aW51ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRzLnB1c2gocmVjb3JkKTtcblx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFF1ZXJ5IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBiYXRjaChvcGVyYXRpb25zKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0XHRmb3IgKGNvbnN0IG9wIG9mIG9wZXJhdGlvbnMpIGlmIChvcC50eXBlID09PSBcInB1dFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdFx0XHRpZDogb3AuaWQsXG5cdFx0XHRcdFx0ZGF0YTogb3AuZGF0YSxcblx0XHRcdFx0XHRtZXRhZGF0YTogb3Aub3B0aW9ucz8ubWV0YWRhdGEsXG5cdFx0XHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0dXBkYXRlZEF0OiBub3csXG5cdFx0XHRcdFx0ZXhwaXJlc0F0OiBvcC5vcHRpb25zPy5leHBpcmVzSW4gPyBub3cgKyBvcC5vcHRpb25zLmV4cGlyZXNJbiA6IHZvaWQgMFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikgc3RvcmUuZGVsZXRlKG9wLmlkKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYEJhdGNoIGZhaWxlZDogJHt0eC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY2xlYXIoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkuY2xlYXIoKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmVuYWJsZUNoYW5nZVRyYWNraW5nKSB0aGlzLl9jaGFuZ2VzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IFwiY2xlYXJcIixcblx0XHRcdFx0XHRrZXk6IFwiKlwiLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBDbGVhciBmYWlsZWQ6ICR7cmVxdWVzdC5lcnJvcj8ubWVzc2FnZX1gKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgY291bnQocXVlcnkpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHN0b3JlID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSAocXVlcnk/LmluZGV4ID8gc3RvcmUuaW5kZXgocXVlcnkuaW5kZXgpIDogc3RvcmUpLmNvdW50KHF1ZXJ5Py5yYW5nZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENvdW50IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRvbkNoYW5nZXMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25TdGF0ZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0YXN5bmMgY2xlYW51cEV4cGlyZWQoKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZXhwaXJlZCA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0aW5kZXg6IFwiZXhwaXJlc0F0XCIsXG5cdFx0XHRyYW5nZTogSURCS2V5UmFuZ2UudXBwZXJCb3VuZChub3cpXG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCByZWNvcmQgb2YgZXhwaXJlZCkgYXdhaXQgdGhpcy5kZWxldGUocmVjb3JkLmlkKTtcblx0XHRyZXR1cm4gZXhwaXJlZC5sZW5ndGg7XG5cdH1cblx0YXN5bmMgX2Vuc3VyZU9wZW4oKSB7XG5cdFx0aWYgKCF0aGlzLl9kYikgYXdhaXQgdGhpcy5vcGVuKCk7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cFRpbWVyKCkge1xuXHRcdHRoaXMuX2NsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2xlYW51cEV4cGlyZWQoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRnZXQgaXNPcGVuKCkge1xuXHRcdHJldHVybiB0aGlzLl9kYiAhPT0gbnVsbDtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFuZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2VzO1xuXHR9XG59O1xudmFyIE1lc3NhZ2VRdWV1ZVN0b3JhZ2UgPSBjbGFzcyBleHRlbmRzIFRyYW5zZmVyYWJsZVN0b3JhZ2Uge1xuXHRjb25zdHJ1Y3RvcihkYk5hbWUgPSBcInVuaWZvcm0tbWVzc2FnZS1xdWV1ZVwiKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0ZGJOYW1lLFxuXHRcdFx0c3RvcmVOYW1lOiBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRpbmRleGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNoYW5uZWxcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcImNoYW5uZWxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJzdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcInN0YXR1c1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInByaW9yaXR5XCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJwcmlvcml0eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInNjaGVkdWxlZEZvclwiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwic2NoZWR1bGVkRm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY2hhbm5lbC1zdGF0dXNcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBbXCJjaGFubmVsXCIsIFwic3RhdHVzXCJdXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBlbnF1ZXVlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGlkID0gVVVJRHY0KCk7XG5cdFx0Y29uc3QgcXVldWVkTWVzc2FnZSA9IHtcblx0XHRcdGlkLFxuXHRcdFx0Y2hhbm5lbDogbWVzc2FnZS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBtZXNzYWdlLnNlbmRlcixcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdHBheWxvYWQ6IG1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdHByaW9yaXR5OiBtZXNzYWdlLnByaW9yaXR5ID8/IDAsXG5cdFx0XHRhdHRlbXB0czogMCxcblx0XHRcdG1heEF0dGVtcHRzOiBtZXNzYWdlLm1heEF0dGVtcHRzID8/IDMsXG5cdFx0XHRzdGF0dXM6IFwicGVuZGluZ1wiLFxuXHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHRzY2hlZHVsZWRGb3I6IG5vdyArIChtZXNzYWdlLmRlbGF5ID8/IDApLFxuXHRcdFx0ZXhwaXJlc0F0OiBtZXNzYWdlLmV4cGlyZXNJbiA/IG5vdyArIG1lc3NhZ2UuZXhwaXJlc0luIDogdm9pZCAwXG5cdFx0fTtcblx0XHRhd2FpdCB0aGlzLnB1dChpZCwgcXVldWVkTWVzc2FnZSk7XG5cdFx0cmV0dXJuIHF1ZXVlZE1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgZGVxdWV1ZShjaGFubmVsKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMucXVlcnkoe1xuXHRcdFx0ZmlsdGVyOiAocikgPT4gci5kYXRhLmNoYW5uZWwgPT09IGNoYW5uZWwgJiYgci5kYXRhLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiYgci5kYXRhLnNjaGVkdWxlZEZvciA8PSBub3cgJiYgKCFyLmRhdGEuZXhwaXJlc0F0IHx8IHIuZGF0YS5leHBpcmVzQXQgPiBub3cpLFxuXHRcdFx0bGltaXQ6IDFcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbMF0uZGF0YTtcblx0XHRtZXNzYWdlLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuXHRcdG1lc3NhZ2UuYXR0ZW1wdHMrKztcblx0XHRtZXNzYWdlLmxhc3RBdHRlbXB0QXQgPSBub3c7XG5cdFx0YXdhaXQgdGhpcy5wdXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XG5cdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgY29tcGxldGUoaWQpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRyZWNvcmQuZGF0YS5zdGF0dXMgPSBcImNvbXBsZXRlZFwiO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZmFpbChpZCwgZXJyb3IpIHtcblx0XHRjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmdldChpZCk7XG5cdFx0aWYgKCFyZWNvcmQpIHJldHVybjtcblx0XHRpZiAocmVjb3JkLmRhdGEuYXR0ZW1wdHMgPj0gcmVjb3JkLmRhdGEubWF4QXR0ZW1wdHMpIHJlY29yZC5kYXRhLnN0YXR1cyA9IFwiZmFpbGVkXCI7XG5cdFx0ZWxzZSByZWNvcmQuZGF0YS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHRyZWNvcmQuZGF0YS5lcnJvciA9IGVycm9yO1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCByZWNvcmQuZGF0YSk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ0NvdW50KGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMucXVlcnkoeyBmaWx0ZXI6IChyKSA9PiByLmRhdGEuY2hhbm5lbCA9PT0gY2hhbm5lbCAmJiByLmRhdGEuc3RhdHVzID09PSBcInBlbmRpbmdcIiB9KSkubGVuZ3RoO1xuXHR9XG59O1xudmFyIFRyYW5zZmVyYWJsZVN0b3JhZ2VGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdGNyZWF0ZU1lc3NhZ2VRdWV1ZTogKGRiTmFtZSkgPT4gbmV3IE1lc3NhZ2VRdWV1ZVN0b3JhZ2UoZGJOYW1lKVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHJhbnNwb3J0L1NlcnZpY2VXb3JrZXJIb3N0LnRzXG52YXIgU2VydmljZVdvcmtlckhvc3QgPSBjbGFzcyB7XG5cdF9jb25uZWN0aW9uO1xuXHRfc3RvcmFnZTtcblx0X2NsaWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfY2hhbm5lbFN1YnNjcmliZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0X2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdF9jbGllbnRFdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2NvbmZpZztcblx0Y29uc3RydWN0b3IoY29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0ZW5hYmxlT2ZmbGluZVF1ZXVlOiB0cnVlLFxuXHRcdFx0bWF4T2ZmbGluZVF1ZXVlU2l6ZTogMTAwLFxuXHRcdFx0bWVzc2FnZVRUTDogODY0ZTUsXG5cdFx0XHRhdXRvQ2xlYW51cDogdHJ1ZSxcblx0XHRcdGNsZWFudXBJbnRlcnZhbDogNmU0LFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0XHR0aGlzLl9jb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvblBvb2woKS5nZXRPckNyZWF0ZSh0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsIFwic2VydmljZS13b3JrZXJcIiwgeyBtZXRhZGF0YTogeyBpc0hvc3Q6IHRydWUgfSB9KTtcblx0XHR0aGlzLl9zdG9yYWdlID0gZ2V0Q2hhbm5lbFN0b3JhZ2UodGhpcy5fY29uZmlnLmNoYW5uZWxOYW1lKTtcblx0XHR0aGlzLl9zZXR1cE1lc3NhZ2VIYW5kbGVycygpO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0NsZWFudXApIHRoaXMuX3N0YXJ0Q2xlYW51cEludGVydmFsKCk7XG5cdH1cblx0YXN5bmMgcmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGNsaWVudEluZm8gPSB7fSkge1xuXHRcdGNvbnN0IGluZm8gPSB7XG5cdFx0XHRpZDogY2xpZW50SWQsXG5cdFx0XHR0eXBlOiBjbGllbnRJbmZvLnR5cGUgPz8gXCJ3aW5kb3dcIixcblx0XHRcdHVybDogY2xpZW50SW5mby51cmwgPz8gXCJcIixcblx0XHRcdHZpc2liaWxpdHlTdGF0ZTogY2xpZW50SW5mby52aXNpYmlsaXR5U3RhdGUgPz8gXCJ2aXNpYmxlXCIsXG5cdFx0XHRmb2N1c2VkOiBjbGllbnRJbmZvLmZvY3VzZWQgPz8gZmFsc2UsXG5cdFx0XHRjb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdGxhc3RTZWVuOiBEYXRlLm5vdygpLFxuXHRcdFx0Y2hhbm5lbHM6IG5ldyBTZXQoY2xpZW50SW5mby5jaGFubmVscyA/PyBbXSlcblx0XHR9O1xuXHRcdHRoaXMuX2NsaWVudHMuc2V0KGNsaWVudElkLCBpbmZvKTtcblx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RlZFwiLFxuXHRcdFx0Y2xpZW50OiBpbmZvXG5cdFx0fSk7XG5cdFx0YXdhaXQgdGhpcy5fZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKTtcblx0fVxuXHR1bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gdGhpcy5fY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdGlmIChjbGllbnQpIHtcblx0XHRcdGZvciAoY29uc3Qgc3Vic2NyaWJlcnMgb2YgdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLnZhbHVlcygpKSBzdWJzY3JpYmVycy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50cy5kZWxldGUoY2xpZW50SWQpO1xuXHRcdFx0dGhpcy5fY2xpZW50RXZlbnRzLm5leHQoe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHR1cGRhdGVDbGllbnQoY2xpZW50SWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihjbGllbnQsIHVwZGF0ZXMsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHRcdHR5cGU6IFwidXBkYXRlZFwiLFxuXHRcdFx0XHRjbGllbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRzdWJzY3JpYmVDbGllbnRUb0NoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmFkZChjaGFubmVsKTtcblx0XHRpZiAoIXRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5oYXMoY2hhbm5lbCkpIHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5zZXQoY2hhbm5lbCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKS5hZGQoY2xpZW50SWQpO1xuXHR9XG5cdHVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGNoYW5uZWwpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkgY2xpZW50LmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsKTtcblx0XHR0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpPy5kZWxldGUoY2xpZW50SWQpO1xuXHR9XG5cdGdldENsaWVudHMoKSB7XG5cdFx0cmV0dXJuIG5ldyBNYXAodGhpcy5fY2xpZW50cyk7XG5cdH1cblx0Z2V0Q2hhbm5lbFN1YnNjcmliZXJzKGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gbmV3IFNldCh0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpID8/IFtdKTtcblx0fVxuXHRhc3luYyBzZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKSkge1xuXHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVPZmZsaW5lUXVldWUpIGF3YWl0IHRoaXMuX3F1ZXVlTWVzc2FnZShjbGllbnRJZCwgbWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpO1xuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvQ2hhbm5lbChjaGFubmVsLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3Qgc3Vic2NyaWJlcnMgPSB0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpO1xuXHRcdGlmICghc3Vic2NyaWJlcnMgfHwgc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkgcmV0dXJuIDA7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHN1YnNjcmliZXJzKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBicm9hZGNhc3RUb0FsbChtZXNzYWdlKSB7XG5cdFx0bGV0IGRlbGl2ZXJlZENvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGNsaWVudElkIG9mIHRoaXMuX2NsaWVudHMua2V5cygpKSBpZiAoYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBkZWxpdmVyZWRDb3VudCsrO1xuXHRcdHJldHVybiBkZWxpdmVyZWRDb3VudDtcblx0fVxuXHRhc3luYyBoYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBkYXRhKSB7XG5cdFx0dGhpcy51cGRhdGVDbGllbnQoY2xpZW50SWQsIHsgbGFzdFNlZW46IERhdGUubm93KCkgfSk7XG5cdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0c3dpdGNoIChkYXRhLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb25uZWN0XCI6XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVnaXN0ZXJDbGllbnQoY2xpZW50SWQsIGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRpc2Nvbm5lY3RcIjpcblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic3Vic2NyaWJlXCI6XG5cdFx0XHRcdHRoaXMuc3Vic2NyaWJlQ2xpZW50VG9DaGFubmVsKGNsaWVudElkLCBkYXRhLnBheWxvYWQ/LmNoYW5uZWwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1bnN1YnNjcmliZVwiOlxuXHRcdFx0XHR0aGlzLnVuc3Vic2NyaWJlQ2xpZW50RnJvbUNoYW5uZWwoY2xpZW50SWQsIGRhdGEucGF5bG9hZD8uY2hhbm5lbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlcXVlc3RcIjpcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9oYW5kbGVSZXF1ZXN0KGRhdGEpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UpIGF3YWl0IHRoaXMuc2VuZFRvQ2xpZW50KGNsaWVudElkLCByZXNwb25zZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6XG5cdFx0XHRcdGlmIChkYXRhLmNoYW5uZWwpIGF3YWl0IHRoaXMuYnJvYWRjYXN0VG9DaGFubmVsKGRhdGEuY2hhbm5lbCwgZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhpcy5fY29ubmVjdGlvbi5wdXNoSW5ib3VuZCh7XG5cdFx0XHRcdC4uLmRhdGEsXG5cdFx0XHRcdF9jbGllbnRJZDogY2xpZW50SWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRvbkNsaWVudEV2ZW50KGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xpZW50RXZlbnRzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25NZXNzYWdlKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0b25NZXNzYWdlVHlwZSh0eXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uc3Vic2NyaWJlKChtc2cpID0+IHtcblx0XHRcdGlmIChtc2cudHlwZSA9PT0gdHlwZSkgaGFuZGxlcihtc2cpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF9xdWV1ZU1lc3NhZ2UoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRhd2FpdCB0aGlzLl9zdG9yYWdlLmRlZmVyKHtcblx0XHRcdGNoYW5uZWw6IG1lc3NhZ2UuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogbWVzc2FnZS5zZW5kZXIsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdC4uLm1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdFx0X3RhcmdldENsaWVudDogY2xpZW50SWRcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRleHBpcmVzSW46IHRoaXMuX2NvbmZpZy5tZXNzYWdlVFRMLFxuXHRcdFx0cHJpb3JpdHk6IDAsXG5cdFx0XHRtZXRhZGF0YTogeyB0YXJnZXRDbGllbnQ6IGNsaWVudElkIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyBfZGVsaXZlclF1ZXVlZE1lc3NhZ2VzKGNsaWVudElkKSB7XG5cdFx0aWYgKCF0aGlzLl9jb25maWcuZW5hYmxlT2ZmbGluZVF1ZXVlKSByZXR1cm47XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLl9zdG9yYWdlLmdldERlZmVycmVkTWVzc2FnZXMoY2xpZW50SWQsIHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblx0XHRmb3IgKGNvbnN0IHN0b3JlZCBvZiBtZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdFx0aWQ6IHN0b3JlZC5pZCxcblx0XHRcdFx0Y2hhbm5lbDogc3RvcmVkLmNoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogc3RvcmVkLnNlbmRlcixcblx0XHRcdFx0dHlwZTogc3RvcmVkLnR5cGUsXG5cdFx0XHRcdHBheWxvYWQ6IHN0b3JlZC5wYXlsb2FkLFxuXHRcdFx0XHR0aW1lc3RhbXA6IHN0b3JlZC5jcmVhdGVkQXRcblx0XHRcdH07XG5cdFx0XHRpZiAoYXdhaXQgdGhpcy5fcG9zdFRvQ2xpZW50KGNsaWVudElkLCBtZXNzYWdlKSkgYXdhaXQgdGhpcy5fc3RvcmFnZS5tYXJrRGVsaXZlcmVkKHN0b3JlZC5pZCk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHN0YXJ0KCkge1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2Uub3BlbigpO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24ubWFya0Nvbm5lY3RlZCgpO1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0fVxuXHRzdG9wKCkge1xuXHRcdGlmICh0aGlzLl9jbGVhbnVwSW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fY2xlYW51cEludGVydmFsKTtcblx0XHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IG51bGw7XG5cdFx0fVxuXHRcdGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuX3N1YnNjcmlwdGlvbnMpIHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7XG5cdFx0dGhpcy5fc3RvcmFnZS5jbG9zZSgpO1xuXHR9XG5cdF9zZXR1cE1lc3NhZ2VIYW5kbGVycygpIHtcblx0XHRjb25zdCBtZXNzYWdlU3ViID0gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoeyBuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRpZiAobXNnLnR5cGUgPT09IFwicmVxdWVzdFwiKSB0aGlzLl9oYW5kbGVSZXF1ZXN0KG1zZyk7XG5cdFx0fSB9KTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2gobWVzc2FnZVN1Yik7XG5cdH1cblx0YXN5bmMgX2hhbmRsZVJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBtc2cuc2VuZGVyLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRyZXFJZDogbXNnLnJlcUlkLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRyZXN1bHQ6IG51bGwsXG5cdFx0XHRcdGVycm9yOiBudWxsXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChtc2cucGF5bG9hZD8uYWN0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJnZXRDbGllbnRzXCI6XG5cdFx0XHRcdFx0cmVzcG9uc2UucGF5bG9hZC5yZXN1bHQgPSBBcnJheS5mcm9tKHRoaXMuX2NsaWVudHMudmFsdWVzKCkpLm1hcCgoYykgPT4gKHtcblx0XHRcdFx0XHRcdC4uLmMsXG5cdFx0XHRcdFx0XHRjaGFubmVsczogQXJyYXkuZnJvbShjLmNoYW5uZWxzKVxuXHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImdldENoYW5uZWxJbmZvXCI6XG5cdFx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG1zZy5wYXlsb2FkPy5jaGFubmVsO1xuXHRcdFx0XHRcdHJlc3BvbnNlLnBheWxvYWQucmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0Y2hhbm5lbCxcblx0XHRcdFx0XHRcdHN1YnNjcmliZXJDb3VudDogdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmdldChjaGFubmVsKT8uc2l6ZSA/PyAwXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInBpbmdcIjpcblx0XHRcdFx0XHRyZXNwb25zZS5wYXlsb2FkLnJlc3VsdCA9IFwicG9uZ1wiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRoaXMuX2Nvbm5lY3Rpb24ucHVzaEluYm91bmQobXNnKTtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmVzcG9uc2UucGF5bG9hZC5lcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9XG5cdGFzeW5jIF9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY2xpZW50ID0gYXdhaXQgY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuXHRcdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0XHRjbGllbnQucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbU1dIb3N0XSBGYWlsZWQgdG8gcG9zdCB0byBjbGllbnQ6XCIsIGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0X3N0YXJ0Q2xlYW51cEludGVydmFsKCkge1xuXHRcdHRoaXMuX2NsZWFudXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuX2NsZWFudXBTdGFsZUNsaWVudHMoKTtcblx0XHRcdHRoaXMuX3N0b3JhZ2UuY2xlYW51cEV4cGlyZWQoKTtcblx0XHR9LCB0aGlzLl9jb25maWcuY2xlYW51cEludGVydmFsKTtcblx0fVxuXHRhc3luYyBfY2xlYW51cFN0YWxlQ2xpZW50cygpIHtcblx0XHRpZiAodHlwZW9mIGNsaWVudHMgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0XHRjb25zdCBhbGxDbGllbnRzID0gYXdhaXQgY2xpZW50cy5tYXRjaEFsbCh7IGluY2x1ZGVVbmNvbnRyb2xsZWQ6IHRydWUgfSk7XG5cdFx0Y29uc3QgYWN0aXZlSWRzID0gbmV3IFNldChhbGxDbGllbnRzLm1hcCgoYykgPT4gYy5pZCkpO1xuXHRcdGZvciAoY29uc3QgY2xpZW50SWQgb2YgdGhpcy5fY2xpZW50cy5rZXlzKCkpIGlmICghYWN0aXZlSWRzLmhhcyhjbGllbnRJZCkpIHRoaXMudW5yZWdpc3RlckNsaWVudChjbGllbnRJZCk7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckNsaWVudCA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcmVnaXN0cmF0aW9uID0gbnVsbDtcblx0X21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblx0X3N1YmplY3QgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X3BlbmRpbmdSZXF1ZXN0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0fVxuXHRhc3luYyBjb25uZWN0KCkge1xuXHRcdGlmICghKFwic2VydmljZVdvcmtlclwiIGluIG5hdmlnYXRvcikpIHRocm93IG5ldyBFcnJvcihcIlNlcnZpY2UgV29ya2VyIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7XG5cdFx0dGhpcy5fbWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuXHRcdFx0aWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlcnMgPSB0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocmVzb2x2ZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcmVzb2x2ZXJzLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSByZXNvbHZlcnMucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdWJqZWN0Lm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0dHlwZTogXCJjb25uZWN0XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0Zm9jdXNlZDogZG9jdW1lbnQuaGFzRm9jdXMoKVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX21lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9tZXNzYWdlSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWVcblx0XHR9KTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2UpO1xuXHRcdHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG5cdH1cblx0c3Vic2NyaWJlVG9DaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcInN1YnNjcmliZVwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRwYXlsb2FkOiB7IGNoYW5uZWwgfVxuXHRcdH0pO1xuXHR9XG5cdHVuc3Vic2NyaWJlRnJvbUNoYW5uZWwoY2hhbm5lbCkge1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwidW5zdWJzY3JpYmVcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cGF5bG9hZDogeyBjaGFubmVsIH1cblx0XHR9KTtcblx0fVxuXHRhc3luYyByZXF1ZXN0KGFjdGlvbiwgcGF5bG9hZCA9IHt9KSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTtcblx0XHR0aGlzLl9wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcUlkLCByZXNvbHZlcnMpO1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IFwiY2xpZW50XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHQuLi5wYXlsb2FkXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fcGVuZGluZ1JlcXVlc3RzLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlc29sdmVycy5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9XG5cdFx0fSwgM2U0KTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG5cdH1cblx0ZW1pdChldmVudFR5cGUsIGRhdGEsIHRhcmdldENoYW5uZWwpIHtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0YXJnZXRDaGFubmVsID8/IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0c2VuZGVyOiBcImNsaWVudFwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBldmVudFR5cGUsXG5cdFx0XHRcdGRhdGFcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b24oZXZlbnRUeXBlLCBoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIGZpbHRlcigobSkgPT4gbS50eXBlID09PSBcImV2ZW50XCIgJiYgbS5wYXlsb2FkPy50eXBlID09PSBldmVudFR5cGUpKHRoaXMuX3N1YmplY3QpLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IGhhbmRsZXIobXNnLnBheWxvYWQ/LmRhdGEpIH0pO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQ7XG5cdH1cblx0X3NlbmRUb1NXKG1lc3NhZ2UpIHtcblx0XHRpZiAoIXRoaXMuX3JlZ2lzdHJhdGlvbj8uYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0fVxuXHRfb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuXHRcdGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dHlwZTogXCJ2aXNpYmlsaXR5Q2hhbmdlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHR2aXNpYmlsaXR5U3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcblx0XHRcdFx0XHRmb2N1c2VkOiBkb2N1bWVudC5oYXNGb2N1cygpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fTtcbn07XG5mdW5jdGlvbiBjcmVhdGVTZXJ2aWNlV29ya2VySG9zdChjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlV29ya2VySG9zdChjb25maWcpO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSkge1xuXHRyZXR1cm4gbmV3IFNlcnZpY2VXb3JrZXJDbGllbnQoY2hhbm5lbE5hbWUpO1xufVxuZnVuY3Rpb24gYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlKGhvc3QsIHNjb3BlID0gc2VsZikge1xuXHRjb25zdCBvbk1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBjbGllbnRJZCA9IFN0cmluZyhldmVudC5zb3VyY2U/LmlkIHx8IFwiXCIpLnRyaW0oKTtcblx0XHRpZiAoIWNsaWVudElkKSByZXR1cm47XG5cdFx0aG9zdC5oYW5kbGVDbGllbnRNZXNzYWdlKGNsaWVudElkLCBldmVudC5kYXRhKTtcblx0fTtcblx0c2NvcGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0aG9zdC5zdGFydCgpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUud2FybihcIltTZXJ2aWNlV29ya2VySG9zdF0gRmFpbGVkIHRvIHN0YXJ0IGJvdW5kIGhvc3Q6XCIsIGVycm9yKTtcblx0fSk7XG5cdHJldHVybiB7IHN0b3AoKSB7XG5cdFx0c2NvcGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcblx0XHRob3N0LnN0b3AoKTtcblx0fSB9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVW5pZmllZFRyYW5zcG9ydC50c1xudmFyIEFic3RyYWN0VHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfdHlwZTtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9yZWFkeSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdHlwZSwgX2NoYW5uZWxOYW1lLCBfY29uZmlnKSB7XG5cdFx0dGhpcy5fdHlwZSA9IF90eXBlO1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2hhbmRsZU1lc3NhZ2UoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3JlYWR5ID0gZmFsc2U7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHlwZTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc1JlYWR5KCkge1xuXHRcdHJldHVybiB0aGlzLl9yZWFkeTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIE5hdGl2ZVRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RUcmFuc3BvcnQge1xuXHRfdGFyZ2V0O1xuXHRfc2VuZEZuO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQsIGNvbmZpZykge1xuXHRcdHN1cGVyKGRldGVjdFRyYW5zcG9ydFR5cGUkMShfdGFyZ2V0KSwgY29uZmlnLmNoYW5uZWxOYW1lLCBjb25maWcpO1xuXHRcdHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG5cdFx0dGhpcy5fc2VuZEZuID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90YXJnZXQpO1xuXHRcdHRoaXMuX3NldHVwTGlzdGVuZXIoKTtcblx0fVxuXHRfc2V0dXBMaXN0ZW5lcigpIHtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fdGFyZ2V0LCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlTWVzc2FnZShkYXRhKSwgKGVycikgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmVycm9yPy4oZXJyKSksICgpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpKTtcblx0XHR0aGlzLl9yZWFkeSA9IHRydWU7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0fVxuXHRzZW5kKG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kRm4obXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuY2xvc2UoKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9LCBjb25maWcgPSB7fSkge1xuXHRjb25zdCBiYXNlQ29uZmlnID0ge1xuXHRcdGNoYW5uZWxOYW1lLFxuXHRcdHRpbWVvdXQ6IDNlNCxcblx0XHRhdXRvQ29ubmVjdDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fTtcblx0aWYgKG9wdGlvbnMud29ya2VyKSB7XG5cdFx0Y29uc3Qgd29ya2VyID0gb3B0aW9ucy53b3JrZXIuZXhpc3RpbmcgPz8gbmV3IFdvcmtlcihvcHRpb25zLndvcmtlci5zY3JpcHRVcmwsIG9wdGlvbnMud29ya2VyLm9wdGlvbnMpO1xuXHRcdHJldHVybiBuZXcgTmF0aXZlVHJhbnNwb3J0KHdvcmtlciwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMuc2hhcmVkV29ya2VyKSB7XG5cdFx0Y29uc3QgY2xpZW50ID0gbmV3IFNoYXJlZFdvcmtlckNsaWVudChvcHRpb25zLnNoYXJlZFdvcmtlci5zY3JpcHRVcmwsIGNoYW5uZWxOYW1lLCBvcHRpb25zLnNoYXJlZFdvcmtlci5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IGNsaWVudC5zZW5kKG1zZywgdHJhbnNmZXIpLFxuXHRcdFx0cmVxdWVzdDogKG1zZykgPT4gY2xpZW50LnJlcXVlc3QobXNnKSxcblx0XHRcdHN1YnNjcmliZTogKG9icykgPT4gY2xpZW50LnN1YnNjcmliZShvYnMpLFxuXHRcdFx0Y2xvc2U6ICgpID0+IGNsaWVudC5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzaGFyZWQtd29ya2VyXCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHR9O1xuXHR9XG5cdGlmIChvcHRpb25zLndlYnNvY2tldCkge1xuXHRcdGNvbnN0IHdzID0gY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0KG9wdGlvbnMud2Vic29ja2V0LnVybCwge1xuXHRcdFx0cHJvdG9jb2xzOiBvcHRpb25zLndlYnNvY2tldC5wcm90b2NvbHMsXG5cdFx0XHRyZWNvbm5lY3Q6IG9wdGlvbnMud2Vic29ja2V0LnJlY29ubmVjdFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdGNvbnN0IHBlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdHdzLmxpc3RlbigoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiBzdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHdzLnNlbmQobXNnLCB0cmFuc2ZlciksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0cGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdFx0fSwgYmFzZUNvbmZpZy50aW1lb3V0KTtcblx0XHRcdFx0cGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0d3Muc2VuZCh7XG5cdFx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHtcblx0XHRcdFx0Y29uc3QgbyA9IHR5cGVvZiBvYnMgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzIH0gOiBvYnM7XG5cdFx0XHRcdHN1YnMuYWRkKG8pO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHN1YnMuZGVsZXRlKG8pXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0Y2xvc2U6ICgpID0+IHtcblx0XHRcdFx0c3Vicy5jbGVhcigpO1xuXHRcdFx0XHR3cy5jbG9zZSgpO1xuXHRcdFx0fSxcblx0XHRcdHR5cGU6IFwid2Vic29ja2V0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHdzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTlxuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuYnJvYWRjYXN0KSB7XG5cdFx0Y29uc3QgYmMgPSBjcmVhdGVCcm9hZGNhc3RUcmFuc3BvcnQob3B0aW9ucy5icm9hZGNhc3QubmFtZSA/PyBjaGFubmVsTmFtZSk7XG5cdFx0cmV0dXJuIG5ldyBOYXRpdmVUcmFuc3BvcnQoYmMuY2hhbm5lbCwgYmFzZUNvbmZpZyk7XG5cdH1cblx0aWYgKG9wdGlvbnMucG9ydD8ucG9ydCkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBQb3J0VHJhbnNwb3J0KG9wdGlvbnMucG9ydC5wb3J0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5wb3J0LmNvbmZpZyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IChtc2csIHRyYW5zZmVyKSA9PiB0cmFuc3BvcnQuc2VuZChtc2csIHRyYW5zZmVyKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvYnMpID0+IHRyYW5zcG9ydC5zdWJzY3JpYmUob2JzKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRyYW5zcG9ydC5pc0xpc3RlbmluZ1xuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMuY2hyb21lKSB7XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwicnVudGltZVwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lUnVudGltZU9ic2VydmFibGUodm9pZCAwLCBvcHRpb25zLmNocm9tZS5vcHRpb25zKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcnVudGltZVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwidGFic1wiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lVGFic09ic2VydmFibGUob3B0aW9ucy5jaHJvbWUudGFiSWQsIG9wdGlvbnMuY2hyb21lLm9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoXCJOb3Qgc3VwcG9ydGVkXCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gb2JzLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwiY2hyb21lLXRhYnNcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmNocm9tZS5tb2RlID09PSBcInBvcnRcIikge1xuXHRcdFx0Y29uc3Qgb2JzID0gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLnBvcnROYW1lID8/IGNoYW5uZWxOYW1lLCBvcHRpb25zLmNocm9tZS50YWJJZCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBvYnMuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIk5vdCBzdXBwb3J0ZWRcIiksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtcG9ydFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5jaHJvbWUubW9kZSA9PT0gXCJleHRlcm5hbFwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlKG9wdGlvbnMuY2hyb21lLm9wdGlvbnM/LmV4dGVuc2lvbklkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiTm90IHN1cHBvcnRlZFwiKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gb2JzLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcImNocm9tZS1leHRlcm5hbFwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdGlvbnMuc29ja2V0aW8pIHtcblx0XHRjb25zdCBvYnMgPSBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKG9wdGlvbnMuc29ja2V0aW8uc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucy5zb2NrZXRpby5vcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG9icy5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJzb2NrZXQtaW9cIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogb2JzLmlzQ29ubmVjdGVkXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5zZXJ2aWNlV29ya2VyKSB7XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImhvc3RcIikge1xuXHRcdFx0Y29uc3QgaG9zdCA9IG5ldyBTZXJ2aWNlV29ya2VySG9zdCh7XG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHQuLi5vcHRpb25zLnNlcnZpY2VXb3JrZXIuY29uZmlnID8/IHt9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJyaWRnZSA9IGJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZShob3N0KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHtcblx0XHRcdFx0XHRob3N0LmJyb2FkY2FzdFRvQWxsKG1zZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJTZXJ2aWNlV29ya2VySG9zdCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0KCk7IHVzZSBob3N0IEFQSXMgZGlyZWN0bHkuXCIpKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gaG9zdC5vbk1lc3NhZ2UodHlwZW9mIG8gPT09IFwiZnVuY3Rpb25cIiA/IG8gOiAobSkgPT4gby5uZXh0Py4obSkpLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gYnJpZGdlLnN0b3AoKSxcblx0XHRcdFx0dHlwZTogXCJzZXJ2aWNlLXdvcmtlclwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuc2VydmljZVdvcmtlci5tb2RlID09PSBcImNsaWVudFwiKSB7XG5cdFx0XHRjb25zdCBjbGllbnQgPSBuZXcgU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSk7XG5cdFx0XHRjbGllbnQuY29ubmVjdCgpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gY2xpZW50LmVtaXQobXNnLnR5cGUsIG1zZy5wYXlsb2FkLCBtc2cuY2hhbm5lbCksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IGNsaWVudC5yZXF1ZXN0KG1zZy5wYXlsb2FkPy5hY3Rpb24gPz8gXCJ1bmtub3duXCIsIG1zZy5wYXlsb2FkKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gY2xpZW50LnN1YnNjcmliZSh0eXBlb2YgbyA9PT0gXCJmdW5jdGlvblwiID8gbyA6IChtKSA9PiBvLm5leHQ/LihtKSksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBjbGllbnQuZGlzY29ubmVjdCgpLFxuXHRcdFx0XHR0eXBlOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiBjbGllbnQuaXNDb25uZWN0ZWRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zLmF0b21pY3MpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSBuZXcgQXRvbWljc1RyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5hdG9taWNzLnNlbmRCdWZmZXIsIG9wdGlvbnMuYXRvbWljcy5yZWN2QnVmZmVyLCBvcHRpb25zLmF0b21pY3MuY29uZmlnKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHRyYW5zcG9ydC5zZW5kKG1zZyksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiB0cmFuc3BvcnQucmVxdWVzdChtc2cpLFxuXHRcdFx0c3Vic2NyaWJlOiAobykgPT4gdHJhbnNwb3J0LnN1YnNjcmliZShvKSxcblx0XHRcdGNsb3NlOiAoKSA9PiB0cmFuc3BvcnQuY2xvc2UoKSxcblx0XHRcdHR5cGU6IFwiYXRvbWljc1wiLFxuXHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5ydGMpIHtcblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJwZWVyXCIpIHtcblx0XHRcdGNvbnN0IHBlZXIgPSBuZXcgUlRDUGVlclRyYW5zcG9ydChjaGFubmVsTmFtZSwgb3B0aW9ucy5ydGMuY29uZmlnKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IHBlZXIuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBwZWVyLnJlcXVlc3QobXNnKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gcGVlci5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBwZWVyLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwicnRjLWRhdGFcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IHBlZXIuY29ubmVjdGlvblN0YXRlID09PSBcImNvbm5lY3RlZFwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5ydGMubW9kZSA9PT0gXCJtYW5hZ2VyXCIpIHtcblx0XHRcdGNvbnN0IG1hbmFnZXIgPSBuZXcgUlRDUGVlck1hbmFnZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMucnRjLmNvbmZpZyk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBtYW5hZ2VyLmJyb2FkY2FzdChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIlVzZSBtYW5hZ2VyLnJlcXVlc3QocGVlcklkLCBtc2cpIGRpcmVjdGx5XCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBtYW5hZ2VyLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG1hbmFnZXIuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJydGMtZGF0YVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgc3ViamVjdCA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQ6IChtc2cpID0+IHN1YmplY3QubmV4dChtc2cpLFxuXHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiSW50ZXJuYWwgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdFwiKSxcblx0XHRzdWJzY3JpYmU6IChvKSA9PiBzdWJqZWN0LnN1YnNjcmliZShvKSxcblx0XHRjbG9zZTogKCkgPT4gc3ViamVjdC5jb21wbGV0ZSgpLFxuXHRcdHR5cGU6IFwiaW50ZXJuYWxcIixcblx0XHRjaGFubmVsTmFtZSxcblx0XHRpc1JlYWR5OiB0cnVlXG5cdH07XG59XG52YXIgVHJhbnNwb3J0UmVnaXN0cnkgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVnaXN0ZXIobmFtZSwgdHJhbnNwb3J0KSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0cy5zZXQobmFtZSwgdHJhbnNwb3J0KTtcblx0fVxuXHRnZXQobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0fVxuXHRnZXRPckNyZWF0ZShuYW1lLCBvcHRpb25zID0ge30sIGNvbmZpZyA9IHt9KSB7XG5cdFx0bGV0IHRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghdHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQgPSBjcmVhdGVUcmFuc3BvcnQobmFtZSwgb3B0aW9ucywgY29uZmlnKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuc2V0KG5hbWUsIHRyYW5zcG9ydCk7XG5cdFx0fVxuXHRcdHJldHVybiB0cmFuc3BvcnQ7XG5cdH1cblx0cmVtb3ZlKG5hbWUpIHtcblx0XHRjb25zdCB0cmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnRzLmdldChuYW1lKTtcblx0XHRpZiAodHJhbnNwb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3RyYW5zcG9ydHMuZGVsZXRlKG5hbWUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0aGlzLl90cmFuc3BvcnRzLnZhbHVlcygpKSB0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR0aGlzLl90cmFuc3BvcnRzLmNsZWFyKCk7XG5cdH1cblx0bGlzdCgpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl90cmFuc3BvcnRzLmtleXMoKSk7XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydHMuc2l6ZTtcblx0fVxufTtcbnZhciBfcmVnaXN0cnkgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VHJhbnNwb3J0UmVnaXN0cnkoKSB7XG5cdGlmICghX3JlZ2lzdHJ5KSBfcmVnaXN0cnkgPSBuZXcgVHJhbnNwb3J0UmVnaXN0cnkoKTtcblx0cmV0dXJuIF9yZWdpc3RyeTtcbn1cbnZhciBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiBjcmVhdGVUcmFuc3BvcnQsXG5cdHJlZ2lzdHJ5OiBnZXRUcmFuc3BvcnRSZWdpc3RyeSxcblx0ZnJvbVdvcmtlcjogKHdvcmtlciwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyB3b3JrZXI6IHsgZXhpc3Rpbmc6IHdvcmtlciB9IH0sIGNvbmZpZyksXG5cdGZyb21Qb3J0OiAocG9ydCwgbmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBwb3J0OiB7IHBvcnQgfSB9LCBjb25maWcpLFxuXHRmcm9tV2ViU29ja2V0OiAodXJsLCBuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHdlYnNvY2tldDogeyB1cmwgfSB9LCBjb25maWcpLFxuXHRmcm9tQnJvYWRjYXN0OiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVUcmFuc3BvcnQobmFtZSwgeyBicm9hZGNhc3Q6IHt9IH0sIGNvbmZpZyksXG5cdHNoYXJlZFdvcmtlcjoge1xuXHRcdGNsaWVudDogKHVybCwgbmFtZSwgb3B0cykgPT4gbmV3IFNoYXJlZFdvcmtlckNsaWVudCh1cmwsIG5hbWUsIG9wdHMpLFxuXHRcdGhvc3Q6IChuYW1lKSA9PiBuZXcgU2hhcmVkV29ya2VySG9zdChuYW1lKVxuXHR9LFxuXHRhdG9taWNzOiB7XG5cdFx0Y3JlYXRlOiAobmFtZSwgc2VuZCwgcmVjdiwgY29uZmlnKSA9PiBuZXcgQXRvbWljc1RyYW5zcG9ydChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpLFxuXHRcdGNyZWF0ZVBhaXI6IGNyZWF0ZUF0b21pY3NDaGFubmVsUGFpcixcblx0XHRidWZmZXI6IChzaXplKSA9PiBuZXcgQXRvbWljc0J1ZmZlcihzaXplKSxcblx0XHRyaW5nQnVmZmVyOiAoKSA9PiBuZXcgQXRvbWljc1JpbmdCdWZmZXIoKVxuXHR9LFxuXHRydGM6IHtcblx0XHRwZWVyOiAobmFtZSwgY29uZmlnKSA9PiBuZXcgUlRDUGVlclRyYW5zcG9ydChuYW1lLCBjb25maWcpLFxuXHRcdG1hbmFnZXI6IChuYW1lLCBjb25maWcpID0+IG5ldyBSVENQZWVyTWFuYWdlcihuYW1lLCBjb25maWcpLFxuXHRcdHNpZ25hbGluZzogY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nXG5cdH0sXG5cdHBvcnQ6IHtcblx0XHRjcmVhdGU6IChwb3J0LCBuYW1lLCBjb25maWcpID0+IG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIG5hbWUsIGNvbmZpZyksXG5cdFx0Y3JlYXRlUGFpcjogY3JlYXRlQ2hhbm5lbFBhaXIsXG5cdFx0cG9vbDogKGNvbmZpZykgPT4gbmV3IFBvcnRQb29sKGNvbmZpZyksXG5cdFx0d2luZG93Q29ubmVjdG9yOiAodGFyZ2V0LCBuYW1lKSA9PiBuZXcgV2luZG93UG9ydENvbm5lY3Rvcih0YXJnZXQsIG5hbWUpXG5cdH0sXG5cdHN0b3JhZ2U6IHtcblx0XHRjcmVhdGU6IChjb25maWcpID0+IG5ldyBUcmFuc2ZlcmFibGVTdG9yYWdlKGNvbmZpZyksXG5cdFx0bWVzc2FnZVF1ZXVlOiAoZGJOYW1lKSA9PiBuZXcgTWVzc2FnZVF1ZXVlU3RvcmFnZShkYk5hbWUpXG5cdH0sXG5cdHNlcnZpY2VXb3JrZXI6IHtcblx0XHRob3N0OiAoY29uZmlnKSA9PiBuZXcgU2VydmljZVdvcmtlckhvc3QoY29uZmlnKSxcblx0XHRjbGllbnQ6IChuYW1lKSA9PiBuZXcgU2VydmljZVdvcmtlckNsaWVudChuYW1lKVxuXHR9LFxuXHRzb2NrZXRpbzogKHNvY2tldCwgbmFtZSwgb3B0cykgPT4gbmV3IFNvY2tldElPT2JzZXJ2YWJsZShzb2NrZXQsIG5hbWUsIG9wdHMpLFxuXHRjaHJvbWU6IHtcblx0XHRydW50aW1lOiAob3B0cykgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlKHZvaWQgMCwgb3B0cyksXG5cdFx0dGFiczogKHRhYklkLCBvcHRzKSA9PiBuZXcgQ2hyb21lVGFic09ic2VydmFibGUodGFiSWQsIG9wdHMpLFxuXHRcdHBvcnQ6IChuYW1lLCB0YWJJZCkgPT4gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG5hbWUsIHRhYklkKVxuXHR9LFxuXHRkZXRlY3Q6IGRldGVjdFRyYW5zcG9ydFR5cGUkMSxcblx0bWV0YTogZ2V0VHJhbnNwb3J0TWV0YVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvc3RvcmFnZS9RdWV1ZWQudHNcbnZhciBRdWV1ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjb25maWc7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHR1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGw7XG5cdGlzQ29ubmVjdGVkID0gZmFsc2U7XG5cdHJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRjb25uZWN0aW9uUHJvbWlzZSA9IG51bGw7XG5cdGNvbm5lY3Rpb25SZXNvbHZlciA9IG51bGw7XG5cdGNvbnRleHQ7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZywgb25DaGFubmVsUmVhZHkpIHtcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29uZmlnLmNvbnRleHQgPz8gXCJ1bmtub3duXCI7XG5cdH1cblx0YXN5bmMgY29ubmVjdCh1bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGwpIHtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsID0gdW5kZXJseWluZ0NoYW5uZWw7XG5cdH1cblx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkICYmIHRoaXMudW5kZXJseWluZ0NoYW5uZWwpIHJldHVybiB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QobWV0aG9kLCBhcmdzKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVldWVkUmVxdWVzdCA9IHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5yZXF1ZXN0UXVldWUucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHRcdGlmICghdGhpcy5jb25uZWN0aW9uUHJvbWlzZSkgdGhpcy5jb25uZWN0KCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVqZWN0QWxsUXVldWVkKGVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWUoKSB7XG5cdFx0aWYgKCF0aGlzLnVuZGVybHlpbmdDaGFubmVsKSByZXR1cm47XG5cdFx0Y29uc3QgcXVldWVDb3B5ID0gWy4uLnRoaXMucmVxdWVzdFF1ZXVlXTtcblx0XHR0aGlzLnJlcXVlc3RRdWV1ZSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVuZGVybHlpbmdDaGFubmVsLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIHF1ZXVlZFJlcXVlc3QuYXJncyk7XG5cdFx0XHRxdWV1ZWRSZXF1ZXN0LnJlc29sdmUocmVzdWx0KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWplY3RBbGxRdWV1ZWQoZXJyb3IpIHtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5yZXF1ZXN0UXVldWVdO1xuXHRcdHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRSZXF1ZXN0IG9mIHF1ZXVlQ29weSkgcXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHR9XG5cdGdldFF1ZXVlU3RhdHVzKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpc0Nvbm5lY3RlZDogdGhpcy5pc0Nvbm5lY3RlZCxcblx0XHRcdHF1ZXVlZFJlcXVlc3RzOiB0aGlzLnJlcXVlc3RRdWV1ZS5sZW5ndGgsXG5cdFx0XHRpc0Nvbm5lY3Rpbmc6ICEhdGhpcy5jb25uZWN0aW9uUHJvbWlzZSAmJiAhdGhpcy5pc0Nvbm5lY3RlZFxuXHRcdH07XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5yZWplY3RBbGxRdWV1ZWQoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkNoYW5uZWwgY2xvc2VkXCIpKTtcblx0XHR0aGlzLnVuZGVybHlpbmdDaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMudW5kZXJseWluZ0NoYW5uZWwgPSBudWxsO1xuXHRcdHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmNvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcblx0fVxufTtcbnZhciBnZXRDdXJyZW50VGFiSWQgPSBhc3luYyAoKSA9PiB7XG5cdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0YWN0aXZlOiB0cnVlLFxuXHRcdGN1cnJlbnRXaW5kb3c6IHRydWVcblx0fSk7XG5cdGlmICh0YWJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aXZlIHRhYiBmb3VuZFwiKTtcblx0aWYgKCF0YWJzWzBdLmlkKSB0aHJvdyBuZXcgRXJyb3IoXCJBY3RpdmUgdGFiIGhhcyBubyBJRFwiKTtcblx0cmV0dXJuIHRhYnNbMF0uaWQ7XG59O1xudmFyIGdldFZpc2libGVUYWJJZCA9IGFzeW5jICgpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgZ2V0Q3VycmVudFRhYklkKCk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnN0IHZpc2libGVUYWIgPSAoYXdhaXQgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0pKS5maW5kKCh0YWIpID0+IHRhYi5hY3RpdmUpO1xuXHRcdGlmICghdmlzaWJsZVRhYj8uaWQpIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgdGFiIGZvdW5kXCIpO1xuXHRcdHJldHVybiB2aXNpYmxlVGFiLmlkO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyV29ya2VyQVBJID0gKGFwaSwgY2hhbm5lbE5hbWUgPSBcIndvcmtlclwiKSA9PiB7XG5cdGNvbnN0IGNoYW5uZWxIYW5kbGVyID0gaW5pdENoYW5uZWxIYW5kbGVyKGNoYW5uZWxOYW1lID8/IFwid29ya2VyXCIpO1xuXHRPYmplY3Qua2V5cyhhcGkpLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblx0XHRpZiAodHlwZW9mIGFwaVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7fVxuXHR9KTtcblx0cmV0dXJuIGNoYW5uZWxIYW5kbGVyO1xufTtcbnZhciBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsID0gY2xhc3Mge1xuXHRjaGFubmVsID0gbnVsbDtcblx0aXNDaGFubmVsUmVhZHkgPSBmYWxzZTtcblx0cGVuZGluZ1JlcXVlc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bWVzc2FnZVF1ZXVlID0gW107XG5cdHF1ZXVlZFJlcXVlc3RzID0gW107XG5cdGJhdGNoVGltZXI7XG5cdG9wdGlvbnM7XG5cdG9uQ2hhbm5lbFJlYWR5O1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsID0gbnVsbCwgb3B0aW9ucyA9IHt9LCBvbkNoYW5uZWxSZWFkeSkge1xuXHRcdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0dGhpcy5pc0NoYW5uZWxSZWFkeSA9ICEhY2hhbm5lbDtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5ID0gb25DaGFubmVsUmVhZHk7XG5cdFx0dGhpcy5vcHRpb25zID0ge1xuXHRcdFx0dGltZW91dDogM2U0LFxuXHRcdFx0cmV0cmllczogMyxcblx0XHRcdGNvbXByZXNzaW9uOiBmYWxzZSxcblx0XHRcdGJhdGNoaW5nOiB0cnVlLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdH1cblx0c2V0Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5jaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmlzQ2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblx0XHR0aGlzLm9uQ2hhbm5lbFJlYWR5Py4oY2hhbm5lbCk7XG5cdFx0dGhpcy5mbHVzaFF1ZXVlZFJlcXVlc3RzKCk7XG5cdH1cblx0YXN5bmMgcmVxdWVzdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG5cdFx0aWYgKCF0aGlzLmlzQ2hhbm5lbFJlYWR5IHx8ICF0aGlzLmNoYW5uZWwpIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZWRSZXF1ZXN0ID0ge1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdG1ldGhvZDogdHlwZSxcblx0XHRcdFx0YXJnczogW3BheWxvYWRdLFxuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdHRoaXMucXVldWVkUmVxdWVzdHMucHVzaChxdWV1ZWRSZXF1ZXN0KTtcblx0XHR9KTtcblx0XHRjb25zdCBvcHRzID0ge1xuXHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0Y29uc3QgbWVzc2FnZUlkID0gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKG1lc3NhZ2VJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQ6ICR7dHlwZX1gKSk7XG5cdFx0XHR9LCBvcHRzLnRpbWVvdXQpO1xuXHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KG1lc3NhZ2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVvdXRcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZW52ZWxvcGUgPSB7XG5cdFx0XHRcdGlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGlmIChvcHRzLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0XHRlbHNlIHRoaXMuc2VuZE1lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGZsdXNoUXVldWVkUmVxdWVzdHMoKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWwgfHwgdGhpcy5xdWV1ZWRSZXF1ZXN0cy5sZW5ndGggPT09IDApIHJldHVybjtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5xdWV1ZWRSZXF1ZXN0c107XG5cdFx0dGhpcy5xdWV1ZWRSZXF1ZXN0cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcXVldWVkUmVxdWVzdCBvZiBxdWV1ZUNvcHkpIHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QocXVldWVkUmVxdWVzdC5tZXRob2QsIC4uLnF1ZXVlZFJlcXVlc3Q/LmFyZ3MgPz8gW10pO1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHF1ZXVlZFJlcXVlc3QucmVqZWN0KGVycm9yKTtcblx0XHR9XG5cdH1cblx0bm90aWZ5KHR5cGUsIHBheWxvYWQpIHtcblx0XHRjb25zdCBlbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGUsXG5cdFx0XHRwYXlsb2FkLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRpZiAodGhpcy5vcHRpb25zLmJhdGNoaW5nKSB0aGlzLnF1ZXVlTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0ZWxzZSB0aGlzLnNlbmRNZXNzYWdlKGVudmVsb3BlKTtcblx0fVxuXHRhc3luYyAqc3RyZWFtKHR5cGUsIGRhdGEpIHtcblx0XHRmb3IgKGNvbnN0IGNodW5rIG9mIGRhdGEpIHlpZWxkIGF3YWl0IHRoaXMucmVxdWVzdChgJHt0eXBlfTpjaHVua2AsIGNodW5rKTtcblx0fVxuXHRxdWV1ZU1lc3NhZ2UoZW52ZWxvcGUpIHtcblx0XHR0aGlzLm1lc3NhZ2VRdWV1ZS5wdXNoKGVudmVsb3BlKTtcblx0XHRpZiAoIXRoaXMuYmF0Y2hUaW1lcikgdGhpcy5iYXRjaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZsdXNoQmF0Y2goKTtcblx0XHR9LCAxNik7XG5cdH1cblx0Zmx1c2hCYXRjaCgpIHtcblx0XHRpZiAodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cdFx0Y29uc3QgYmF0Y2hFbnZlbG9wZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiYmF0Y2hcIixcblx0XHRcdHBheWxvYWQ6IHRoaXMubWVzc2FnZVF1ZXVlLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLnNlbmRNZXNzYWdlKGJhdGNoRW52ZWxvcGUpO1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gW107XG5cdFx0dGhpcy5iYXRjaFRpbWVyID0gdm9pZCAwO1xuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKGVudmVsb3BlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhbm5lbD8ucmVxdWVzdD8uKFwicHJvY2Vzc01lc3NhZ2VcIiwgW2VudmVsb3BlXSk7XG5cdFx0XHRpZiAoZW52ZWxvcGUucmVwbHlUbyAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUucmVwbHlUbykpIHtcblx0XHRcdFx0Y29uc3QgeyByZXNvbHZlLCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUucmVwbHlUbyk7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGVudmVsb3BlLnJlcGx5VG8pO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMoZW52ZWxvcGUuaWQpKSB7XG5cdFx0XHRcdGNvbnN0IHsgcmVqZWN0LCB0aW1lb3V0IH0gPSB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5nZXQoZW52ZWxvcGUuaWQpO1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShlbnZlbG9wZS5pZCk7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGlmICh0aGlzLmJhdGNoVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZXIpO1xuXHRcdGZvciAoY29uc3QgW2lkLCB7IHJlamVjdCwgdGltZW91dCB9XSBvZiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJDaGFubmVsIGNsb3NlZFwiKSk7XG5cdFx0fVxuXHRcdHRoaXMucGVuZGluZ1JlcXVlc3RzLmNsZWFyKCk7XG5cdFx0dGhpcy5jaGFubmVsPy5jbG9zZT8uKCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvTWVzc2FnZVF1ZXVlLnRzXG52YXIgTWVzc2FnZVF1ZXVlID0gY2xhc3MgTWVzc2FnZVF1ZXVlIHtcblx0ZGIgPSBudWxsO1xuXHRkYlByb21pc2UgPSBudWxsO1xuXHRvcHRpb25zO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHRkYk5hbWU6IG9wdGlvbnMuZGJOYW1lID8/IFwiVW5pZm9ybU1lc3NhZ2VRdWV1ZVwiLFxuXHRcdFx0c3RvcmVOYW1lOiBvcHRpb25zLnN0b3JlTmFtZSA/PyBcIm1lc3NhZ2VzXCIsXG5cdFx0XHRtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gMyxcblx0XHRcdGRlZmF1bHRFeHBpcmF0aW9uTXM6IG9wdGlvbnMuZGVmYXVsdEV4cGlyYXRpb25NcyA/PyA4NjRlNSxcblx0XHRcdGZhbGxiYWNrU3RvcmFnZUtleTogb3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkgPz8gXCJ1bmlmb3JtX21lc3NhZ2VfcXVldWVcIlxuXHRcdH07XG5cdH1cblx0YXN5bmMgaW5pdERCKCkge1xuXHRcdGlmICh0aGlzLmRiKSByZXR1cm4gdGhpcy5kYjtcblx0XHRpZiAodGhpcy5kYlByb21pc2UpIHJldHVybiB0aGlzLmRiUHJvbWlzZTtcblx0XHRpZiAoIU1lc3NhZ2VRdWV1ZS5pc0luZGV4ZWREQkF2YWlsYWJsZSgpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJbTWVzc2FnZVF1ZXVlXSBJbmRleGVkREIgbm90IGF2YWlsYWJsZSwgdXNpbmcgc2Vzc2lvblN0b3JhZ2UgZmFsbGJhY2tcIik7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5kYlByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4odGhpcy5vcHRpb25zLmRiTmFtZSwgMSk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihcIltNZXNzYWdlUXVldWVdIEluZGV4ZWREQiBvcGVuIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIHNlc3Npb25TdG9yYWdlXCIpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkluZGV4ZWREQiBub3QgYXZhaWxhYmxlXCIpKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5kYiA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMuZGIpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInRpbWVzdGFtcFwiLCBcInRpbWVzdGFtcFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJ0eXBlXCIsIFwidHlwZVwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdFx0c3RvcmUuY3JlYXRlSW5kZXgoXCJwcmlvcml0eVwiLCBcInByaW9yaXR5XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcImRlc3RpbmF0aW9uXCIsIFwiZGVzdGluYXRpb25cIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLmRiID0gYXdhaXQgdGhpcy5kYlByb21pc2U7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYjtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXHRnZW5lcmF0ZUlkKCkge1xuXHRcdHJldHVybiBgbXNnXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpfWA7XG5cdH1cblx0YXN5bmMgcXVldWVNZXNzYWdlKHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZDogdGhpcy5nZW5lcmF0ZUlkKCksXG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0YSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRyZXRyeUNvdW50OiAwLFxuXHRcdFx0bWF4UmV0cmllczogb3B0aW9ucy5tYXhSZXRyaWVzID8/IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzLFxuXHRcdFx0ZXhwaXJlc0F0OiBvcHRpb25zLmV4cGlyZXNBdCA/PyBEYXRlLm5vdygpICsgdGhpcy5vcHRpb25zLmRlZmF1bHRFeHBpcmF0aW9uTXMsXG5cdFx0XHRkZXN0aW5hdGlvbjogb3B0aW9ucy5kZXN0aW5hdGlvbixcblx0XHRcdG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhXG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmFkZFRvSW5kZXhlZERCKGRiLCBtZXNzYWdlKTtcblx0XHRcdGVsc2UgdGhpcy5hZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpO1xuXHRcdFx0Y29uc29sZS5sb2coYFtNZXNzYWdlUXVldWVdIFF1ZXVlZCBtZXNzYWdlOiAke3R5cGV9YCwgbWVzc2FnZS5pZCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5pZDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBxdWV1ZSBtZXNzYWdlOlwiLCBlcnJvcik7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0bGV0IG1lc3NhZ2VzO1xuXHRcdFx0aWYgKGRiKSBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsRnJvbUluZGV4ZWREQihkYik7XG5cdFx0XHRlbHNlIG1lc3NhZ2VzID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRcdGlmIChkZXN0aW5hdGlvbikgbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbik7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobXNnKSA9PiAhbXNnLmV4cGlyZXNBdCB8fCBtc2cuZXhwaXJlc0F0ID4gbm93KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBnZXQgcXVldWVkIG1lc3NhZ2VzOlwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLmluaXREQigpO1xuXHRcdFx0aWYgKGRiKSBhd2FpdCB0aGlzLmRlbGV0ZUZyb21JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCk7XG5cdFx0XHRlbHNlIHRoaXMuZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKG1lc3NhZ2VJZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gcmVtb3ZlIG1lc3NhZ2U6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgdXBkYXRlTWVzc2FnZVJldHJ5KG1lc3NhZ2VJZCwgcmV0cnlDb3VudCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMudXBkYXRlSW5JbmRleGVkREIoZGIsIG1lc3NhZ2VJZCwgeyByZXRyeUNvdW50IH0pO1xuXHRcdFx0ZWxzZSB0aGlzLnVwZGF0ZUluU2Vzc2lvblN0b3JhZ2UobWVzc2FnZUlkLCB7IHJldHJ5Q291bnQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2UgcmV0cnk6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgY2xlYXJFeHBpcmVkTWVzc2FnZXMoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRRdWV1ZWRNZXNzYWdlcygpO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGNvbnN0IGV4cGlyZWRJZHMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZykgPT4gbXNnLmV4cGlyZXNBdCAmJiBtc2cuZXhwaXJlc0F0IDw9IG5vdykubWFwKChtc2cpID0+IG1zZy5pZCk7XG5cdFx0XHRmb3IgKGNvbnN0IGlkIG9mIGV4cGlyZWRJZHMpIGF3YWl0IHRoaXMucmVtb3ZlTWVzc2FnZShpZCk7XG5cdFx0XHRpZiAoZXhwaXJlZElkcy5sZW5ndGggPiAwKSBjb25zb2xlLmxvZyhgW01lc3NhZ2VRdWV1ZV0gQ2xlYXJlZCAke2V4cGlyZWRJZHMubGVuZ3RofSBleHBpcmVkIG1lc3NhZ2VzYCk7XG5cdFx0XHRyZXR1cm4gZXhwaXJlZElkcy5sZW5ndGg7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbTWVzc2FnZVF1ZXVlXSBGYWlsZWQgdG8gY2xlYXIgZXhwaXJlZCBtZXNzYWdlczpcIiwgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNsZWFyQWxsKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMuY2xlYXJJbmRleGVkREIoZGIpO1xuXHRcdFx0ZWxzZSBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0Y29uc29sZS5sb2coXCJbTWVzc2FnZVF1ZXVlXSBDbGVhcmVkIGFsbCBtZXNzYWdlc1wiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBjbGVhciBhbGwgbWVzc2FnZXM6XCIsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZ2V0U3RhdHMoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmdldFF1ZXVlZE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBieVByaW9yaXR5ID0ge1xuXHRcdFx0bG93OiAwLFxuXHRcdFx0bm9ybWFsOiAwLFxuXHRcdFx0aGlnaDogMFxuXHRcdH07XG5cdFx0Y29uc3QgYnlEZXN0aW5hdGlvbiA9IHt9O1xuXHRcdGxldCBleHBpcmVkID0gMDtcblx0XHRmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuXHRcdFx0YnlQcmlvcml0eVttc2cucHJpb3JpdHldKys7XG5cdFx0XHRpZiAobXNnLmRlc3RpbmF0aW9uKSBieURlc3RpbmF0aW9uW21zZy5kZXN0aW5hdGlvbl0gPSAoYnlEZXN0aW5hdGlvblttc2cuZGVzdGluYXRpb25dIHx8IDApICsgMTtcblx0XHRcdGlmIChtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPD0gbm93KSBleHBpcmVkKys7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3RhbDogbWVzc2FnZXMubGVuZ3RoLFxuXHRcdFx0YnlQcmlvcml0eSxcblx0XHRcdGJ5RGVzdGluYXRpb24sXG5cdFx0XHRleHBpcmVkXG5cdFx0fTtcblx0fVxuXHRhc3luYyBhZGRUb0luZGV4ZWREQihkYiwgbWVzc2FnZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5hZGQobWVzc2FnZSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRBbGxGcm9tSW5kZXhlZERCKGRiKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSkuZ2V0QWxsKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGRlbGV0ZUZyb21JbmRleGVkREIoZGIsIGlkKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpLmRlbGV0ZShpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyB1cGRhdGVJbkluZGV4ZWREQihkYiwgaWQsIHVwZGF0ZXMpIHtcblx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFt0aGlzLm9wdGlvbnMuc3RvcmVOYW1lXSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoaWQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRhc3luYyBjbGVhckluZGV4ZWREQihkYikge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5jbGVhcigpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fSk7XG5cdH1cblx0Z2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXkpO1xuXHRcdFx0cmV0dXJuIHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHRhZGRUb1Nlc3Npb25TdG9yYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCk7XG5cdFx0ZXhpc3RpbmcucHVzaChtZXNzYWdlKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSk7XG5cdH1cblx0ZGVsZXRlRnJvbVNlc3Npb25TdG9yYWdlKGlkKSB7XG5cdFx0Y29uc3QgZmlsdGVyZWQgPSB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpLmZpbHRlcigobXNnKSA9PiBtc2cuaWQgIT09IGlkKTtcblx0XHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMub3B0aW9ucy5mYWxsYmFja1N0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkKSk7XG5cdH1cblx0dXBkYXRlSW5TZXNzaW9uU3RvcmFnZShpZCwgdXBkYXRlcykge1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRjb25zdCBtZXNzYWdlID0gZXhpc3RpbmcuZmluZCgobXNnKSA9PiBtc2cuaWQgPT09IGlkKTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihtZXNzYWdlLCB1cGRhdGVzKTtcblx0XHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKTtcblx0XHR9XG5cdH1cblx0c3RhdGljIGlzSW5kZXhlZERCQXZhaWxhYmxlKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGluZGV4ZWREQiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgSURCVHJhbnNhY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIElEQktleVJhbmdlICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufTtcbnZhciBpbnN0YW5jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0Y29uc3Qga2V5ID0gb3B0aW9ucz8uZGJOYW1lID8/IFwiZGVmYXVsdFwiO1xuXHRpZiAoIWluc3RhbmNlcy5oYXMoa2V5KSkgaW5zdGFuY2VzLnNldChrZXksIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucykpO1xuXHRyZXR1cm4gaW5zdGFuY2VzLmdldChrZXkpO1xufVxuZnVuY3Rpb24gY3JlYXRlTWVzc2FnZVF1ZXVlKG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBNZXNzYWdlUXVldWUob3B0aW9ucyk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3V0aWxzL1dyYXBwZXJzLnRzXG52YXIgcnVudGltZUxpc3RlbmVyUmVnaXN0cnkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCA9IGZhbHNlO1xudmFyIGVuc3VyZVJ1bnRpbWVMaXN0ZW5lciA9ICgpID0+IHtcblx0aWYgKHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCkgcmV0dXJuO1xuXHRydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQgPSB0cnVlO1xuXHRjaHJvbWU/LnJ1bnRpbWU/Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXI/LigobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldDtcblx0XHRpZiAoIWNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gcnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIWxpc3RlbmVycyB8fCBsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0ZGF0YTogbWVzc2FnZSxcblx0XHRcdG9yaWdpbjogc2VuZGVyPy51cmwgfHwgXCJjaHJvbWUtZXh0ZW5zaW9uXCIsXG5cdFx0XHRzb3VyY2U6IHNlbmRlclxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRyeSB7XG5cdFx0XHRjb25zdCBvdXQgPSBsaXN0ZW5lcihldmVudCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdFx0aWYgKG91dCAmJiB0eXBlb2Ygb3V0Py5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSBvdXQuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcikpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWxdIExpc3RlbmVyIGVycm9yOlwiLCBlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCA9IGNsYXNzIHtcblx0Y2hhbm5lbE5hbWU7XG5cdGxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdGVuc3VyZVJ1bnRpbWVMaXN0ZW5lcigpO1xuXHR9XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHR0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuXHRcdGxldCBzZXQgPSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk7XG5cdFx0aWYgKCFzZXQpIHtcblx0XHRcdHNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdFx0XHRydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5zZXQodGhpcy5jaGFubmVsTmFtZSwgc2V0KTtcblx0XHR9XG5cdFx0c2V0LmFkZChsaXN0ZW5lcik7XG5cdH1cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0eXBlICE9PSBcIm1lc3NhZ2VcIikgcmV0dXJuO1xuXHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0cnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KHRoaXMuY2hhbm5lbE5hbWUpPy5kZWxldGUobGlzdGVuZXIpO1xuXHR9XG5cdHBvc3RNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBtZXNzYWdlV2l0aENoYW5uZWwgPSB7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwiYnJvYWRjYXN0LWNoYW5uZWxcIlxuXHRcdH07XG5cdFx0Y2hyb21lPy5ydW50aW1lPy5zZW5kTWVzc2FnZT8uKG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKCkgPT4gdm9pZCAwKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0dGhpcy5saXN0ZW5lcnMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCA9IGNsYXNzIHtcblx0d3JhcHBlZEJ5T3JpZ2luYWwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3cmFwcGVkTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y2hhbm5lbE5hbWU7XG5cdG1vZGUgPSBcImJyb2FkY2FzdFwiO1xuXHR0YWJGaWx0ZXI7XG5cdHRhYklkR2V0dGVyO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgb3B0aW9ucykge1xuXHRcdHRoaXMuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0XHR0aGlzLm1vZGUgPSBvcHRpb25zPy5tb2RlIHx8IFwiYnJvYWRjYXN0XCI7XG5cdFx0dGhpcy50YWJGaWx0ZXIgPSBvcHRpb25zPy50YWJGaWx0ZXI7XG5cdFx0dGhpcy50YWJJZEdldHRlciA9IG9wdGlvbnM/LnRhYklkR2V0dGVyIHx8IHRoaXMuZ2V0Q3VycmVudFRhYklkO1xuXHRcdHRoaXMuc3RhcnRMaXN0ZW5pbmcoKTtcblx0fVxuXHRzdGFydExpc3RlbmluZygpIHtcblx0XHRlbnN1cmVSdW50aW1lTGlzdGVuZXIoKTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0aWYgKHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZ2V0KGxpc3RlbmVyKSkgcmV0dXJuO1xuXHRcdGNvbnN0IHdyYXBwZWQgPSBhc3luYyAoZXZlbnQsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSA9PiB7XG5cdFx0XHRldmVudD8uZGF0YTtcblx0XHRcdGlmICghc2VuZGVyPy50YWIpIHJldHVybjtcblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIikge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRUYWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXI/LigpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHRhcmdldFRhYklkID09PSBcIm51bWJlclwiICYmIHNlbmRlci50YWIuaWQgIT09IHRhcmdldFRhYklkKSByZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5tb2RlID09PSBcImJyb2FkY2FzdFwiICYmIHRoaXMudGFiRmlsdGVyICYmICF0aGlzLnRhYkZpbHRlcihzZW5kZXIudGFiKSkgcmV0dXJuO1xuXHRcdFx0cmV0dXJuIGxpc3RlbmVyKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdG9yaWdpbjogc2VuZGVyLnVybCB8fCBcImNocm9tZS1leHRlbnNpb24tdGFiXCIsXG5cdFx0XHRcdHRhYjogc2VuZGVyLnRhYlxuXHRcdFx0fSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpO1xuXHRcdH07XG5cdFx0dGhpcy53cmFwcGVkQnlPcmlnaW5hbC5zZXQobGlzdGVuZXIsIHdyYXBwZWQpO1xuXHRcdHRoaXMud3JhcHBlZExpc3RlbmVycy5hZGQod3JhcHBlZCk7XG5cdFx0bGV0IHNldCA9IHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIXNldCkge1xuXHRcdFx0c2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LnNldCh0aGlzLmNoYW5uZWxOYW1lLCBzZXQpO1xuXHRcdH1cblx0XHRzZXQuYWRkKHdyYXBwZWQpO1xuXHR9XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHRjb25zdCB3cmFwcGVkID0gdGhpcy53cmFwcGVkQnlPcmlnaW5hbC5nZXQobGlzdGVuZXIpO1xuXHRcdGlmICghd3JhcHBlZCkgcmV0dXJuO1xuXHRcdHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuZGVsZXRlKHdyYXBwZWQpO1xuXHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKT8uZGVsZXRlKHdyYXBwZWQpO1xuXHR9XG5cdHNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZT8ucnVudGltZT8ubGFzdEVycm9yKSByZWplY3QobmV3IEVycm9yKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG5cdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBzZW5kVG9BY3RpdmVUYWIobWVzc2FnZSkge1xuXHRcdGlmICh0aGlzLm1vZGUgPT09IFwiY3VycmVudC10YWJcIiAmJiB0aGlzLnRhYklkR2V0dGVyKSB7XG5cdFx0XHRjb25zdCB0YWJJZCA9IGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRcdHJldHVybiB0aGlzLnNlbmRUb1RhYih0YWJJZCwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG5cdFx0XHRcdGFjdGl2ZTogdHJ1ZSxcblx0XHRcdFx0Y3VycmVudFdpbmRvdzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAodGFicy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFjdGl2ZSB0YWIgZm91bmRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZW5kVG9UYWIodGFic1swXS5pZCwgbWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvVGFicyhtZXNzYWdlLCBvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gXCJjdXJyZW50LXRhYlwiKSB0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRUb0FjdGl2ZVRhYihtZXNzYWdlKTtcblx0XHRcdHJldHVybiBbe1xuXHRcdFx0XHR0YWJJZDogYXdhaXQgdGhpcy50YWJJZEdldHRlcigpLFxuXHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0fV07XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJldHVybiBbeyBlcnJvciB9XTtcblx0XHR9XG5cdFx0Y29uc3QgcXVlcnkgPSB7IHN0YXR1czogXCJjb21wbGV0ZVwiIH07XG5cdFx0aWYgKCFvcHRpb25zPy5hbGxXaW5kb3dzKSBxdWVyeS5jdXJyZW50V2luZG93ID0gdHJ1ZTtcblx0XHRjb25zdCB0YXJnZXRUYWJzID0gKGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHF1ZXJ5KSkuZmlsdGVyKCh0YWIpID0+IHtcblx0XHRcdGlmIChvcHRpb25zPy50YWJGaWx0ZXIgJiYgIW9wdGlvbnMudGFiRmlsdGVyKHRhYikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmICh0aGlzLnRhYkZpbHRlciAmJiAhdGhpcy50YWJGaWx0ZXIodGFiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVzc2FnZVdpdGhDaGFubmVsID0ge1xuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwidGFicy1jaGFubmVsXCIsXG5cdFx0XHQuLi5tZXNzYWdlXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlcyA9IHRhcmdldFRhYnMubWFwKCh0YWIpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWIuaWQsIG1lc3NhZ2VXaXRoQ2hhbm5lbCwgKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChjaHJvbWU/LnJ1bnRpbWU/Lmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmUoe1xuXHRcdFx0XHRcdHRhYklkOiB0YWIuaWQsXG5cdFx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdH1cblx0YXN5bmMgcG9zdE1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IHRhYklkID0gYXdhaXQgdGhpcy50YWJJZEdldHRlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInRhYnMtY2hhbm5lbFwiLFxuXHRcdFx0Li4ubWVzc2FnZVxuXHRcdH07XG5cdFx0cmV0dXJuIGNocm9tZT8udGFicz8uc2VuZE1lc3NhZ2U/Lih0YWJJZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAoKSA9PiB2b2lkIDApO1xuXHR9XG5cdGFzeW5jIGdldEN1cnJlbnRUYWJJZCgpIHtcblx0XHRpZiAodGhpcy50YWJJZEdldHRlcikgcmV0dXJuIGF3YWl0IHRoaXMudGFiSWRHZXR0ZXIoKTtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRmb3IgKGNvbnN0IHdyYXBwZWQgb2YgdGhpcy53cmFwcGVkTGlzdGVuZXJzKSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZSh3cmFwcGVkKTtcblx0XHR0aGlzLndyYXBwZWRMaXN0ZW5lcnMuY2xlYXIoKTtcblx0XHR0aGlzLndyYXBwZWRCeU9yaWdpbmFsLmNsZWFyKCk7XG5cdH1cbn07XG52YXIgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwgPSBjbGFzcyB7XG5cdHBvcnQ7XG5cdGNoYW5uZWxOYW1lO1xuXHRsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3Rvcihwb3J0LCBjaGFubmVsTmFtZSkge1xuXHRcdHRoaXMucG9ydCA9IHBvcnQ7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdHRoaXMucG9ydD8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoKG1lc3NhZ2U/LmNoYW5uZWxOYW1lID8/IG1lc3NhZ2U/LnRhcmdldCkgIT09IHRoaXMuY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRcdGNvbnN0IGV2ZW50ID0ge1xuXHRcdFx0XHRkYXRhOiBtZXNzYWdlLFxuXHRcdFx0XHRvcmlnaW46IFwiY2hyb21lLWV4dGVuc2lvbi1wb3J0XCIsXG5cdFx0XHRcdHNvdXJjZTogdGhpcy5wb3J0XG5cdFx0XHR9O1xuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykgdHJ5IHtcblx0XHRcdFx0bGlzdGVuZXIoZXZlbnQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIltDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbF0gTGlzdGVuZXIgZXJyb3I6XCIsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcblx0fVxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0fVxuXHRwb3N0TWVzc2FnZShtZXNzYWdlKSB7XG5cdFx0dGhpcy5wb3J0Py5wb3N0TWVzc2FnZT8uKHtcblx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRjaGFubmVsTmFtZTogdGhpcy5jaGFubmVsTmFtZSxcblx0XHRcdHNvdXJjZTogXCJwb3J0LWNoYW5uZWxcIlxuXHRcdH0pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5wb3J0Py5kaXNjb25uZWN0Py4oKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvVXRpbHMudHNcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRsZXQgd29ya2VyO1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiQ2hyb21lIGV4dGVuc2lvbiB3b3JrZXIgY2hhbm5lbCByZXF1aXJlcyBjb25maWcuc2NyaXB0IHRvIGJlIGEgc3RyaW5nIHBhdGhcIik7XG5cdFx0d29ya2VyID0gbmV3IFdvcmtlcihjaHJvbWUucnVudGltZS5nZXRVUkwoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwic3RyaW5nXCIpIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0XHRlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCA9PT0gXCJmdW5jdGlvblwiKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0KCk7XG5cdFx0ZWxzZSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHR9XG5cdGNvbnN0IGNoYW5uZWwgPSBhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjb25maWcubmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0ID0gKGNoYW5uZWxOYW1lKSA9PiB7XG5cdHJldHVybiBuZXcgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwgPSAoY2hhbm5lbE5hbWUpID0+IHtcblx0Y29uc3Qgd29ya2VyID0gbmV3IENocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRjb25zdCBjaGFubmVsID0gY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIHt9LCB3b3JrZXIpO1xuXHRyZXR1cm4gY2hhbm5lbD8ucmVtb3RlID8/IGNoYW5uZWw7XG59O1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsID0gKGNoYW5uZWxOYW1lLCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHdvcmtlciA9IG5ldyBDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbChjaGFubmVsTmFtZSwgb3B0aW9ucyk7XG5cdGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsKGNoYW5uZWxOYW1lLCBvcHRpb25zKTtcbn07XG52YXIgaW5pdE1haW5DaGFubmVsID0gKG5hbWUgPSBcIiRob3N0JFwiKSA9PiB7XG5cdHJldHVybiBpbml0Q2hhbm5lbEhhbmRsZXIobmFtZSA/PyBcIiRob3N0JFwiKTtcbn07XG52YXIgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCA9IChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KSA9PiB7XG5cdHJldHVybiBuZXcgUXVldWVkV29ya2VyQ2hhbm5lbChjb25maWcsIG9uQ2hhbm5lbFJlYWR5KTtcbn07XG52YXIgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwgPSBhc3luYyAoY29uZmlnKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKGAke2NvbmZpZy5uYW1lfS1zdy1jaGFubmVsYCk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VJZCA9IFVVSUR2NCgpO1xuXHRcdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Y2hhbm5lbC5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBTZXJ2aWNlIHdvcmtlciByZXF1ZXN0IHRpbWVvdXQ6ICR7bWV0aG9kfWApKTtcblx0XHRcdFx0fSwgMWU0KTtcblx0XHRcdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IGlkLCByZXN1bHQsIGVycm9yIH0gPSBldmVudC5kYXRhO1xuXHRcdFx0XHRcdGlmIChpZCA9PT0gbWVzc2FnZUlkKSB7XG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZXJyb3IpIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y2hhbm5lbC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0aWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdFx0YXJnc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Y2xvc2UoKSB7fVxuXHR9O1xufTtcbnZhciBjcmVhdGVXb3JrZXJDaGFubmVsID0gYXN5bmMgKGNvbmZpZykgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gY29uZmlnLmNvbnRleHQ7XG5cdGlmIChjb250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBjcmVhdGVTZXJ2aWNlV29ya2VyQ2hhbm5lbChjb25maWcpO1xuXHRsZXQgd29ya2VyO1xuXHRpZiAodHlwZW9mIGNvbmZpZy5zY3JpcHQgPT09IFwiZnVuY3Rpb25cIikgd29ya2VyID0gY29uZmlnLnNjcmlwdCgpO1xuXHRlbHNlIGlmIChjb25maWcuc2NyaXB0IGluc3RhbmNlb2YgV29ya2VyKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0O1xuXHRlbHNlIGlmIChjb250ZXh0ID09PSBcImNocm9tZS1leHRlbnNpb25cIikgdHJ5IHtcblx0XHR3b3JrZXIgPSBuZXcgV29ya2VyKGNocm9tZS5ydW50aW1lLmdldFVSTChjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0fVxuXHRlbHNlIHdvcmtlciA9IG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoY29uZmlnLnNjcmlwdCksIGNvbmZpZy5vcHRpb25zKTtcblx0cmV0dXJuIGF3YWl0IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNvbmZpZy5uYW1lLCB7fSwgd29ya2VyKTtcbn07XG52YXIgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCA9IGFzeW5jIChjb25maWcsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgYmFzZUNoYW5uZWwgPSBhd2FpdCBjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZyk7XG5cdHJldHVybiBuZXcgT3B0aW1pemVkV29ya2VyQ2hhbm5lbChiYXNlQ2hhbm5lbCwgb3B0aW9ucyk7XG59O1xudmFyIGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwgPSAoY29uZmlnLCBvcHRpb25zLCBvbkNoYW5uZWxSZWFkeSkgPT4ge1xuXHRjb25zdCBvcHRpbWl6ZWRDaGFubmVsID0gbmV3IE9wdGltaXplZFdvcmtlckNoYW5uZWwobnVsbCwgb3B0aW9ucywgb25DaGFubmVsUmVhZHkpO1xuXHRjcmVhdGVXb3JrZXJDaGFubmVsKGNvbmZpZykudGhlbigoYmFzZUNoYW5uZWwpID0+IHtcblx0XHRvcHRpbWl6ZWRDaGFubmVsLnNldENoYW5uZWwoYmFzZUNoYW5uZWwpO1xuXHR9KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRjb25zb2xlLmVycm9yKFwiW2NyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWxdIEZhaWxlZCB0byBjcmVhdGUgYmFzZSBjaGFubmVsOlwiLCBlcnJvcik7XG5cdFx0b3B0aW1pemVkQ2hhbm5lbC5jbG9zZSgpO1xuXHR9KTtcblx0cmV0dXJuIG9wdGltaXplZENoYW5uZWw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbWVzc2FnaW5nL1Byb3RvY29sLnRzXG52YXIgUFVSUE9TRVMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXG5cdFwiaW52b2tlXCIsXG5cdFwibWFpbFwiLFxuXHRcImF0dGFjaFwiLFxuXHRcImRlbGl2ZXJcIixcblx0XCJkZWZlclwiXG5dKTtcbnZhciBERUZBVUxUX1BVUlBPU0UgPSBcIm1haWxcIjtcbnZhciBhc1N0cmluZyA9ICh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlID8/IFwiXCIpLnRyaW0oKTtcbnZhciBub3JtYWxpemVQYXRoID0gKHBhdGgpID0+IHtcblx0aWYgKCFwYXRoKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdKS5tYXAoYXNTdHJpbmcpLmZpbHRlcihCb29sZWFuKTtcblx0cmV0dXJuIG5vcm1hbGl6ZWQubGVuZ3RoID4gMCA/IG5vcm1hbGl6ZWQgOiB2b2lkIDA7XG59O1xudmFyIG5vcm1hbGl6ZUFyZ3MgPSAoYXJncykgPT4ge1xuXHRpZiAoYXJncyA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc107XG59O1xudmFyIG5vcm1hbGl6ZVRyYW5zZmVyID0gKHRyYW5zZmVyKSA9PiB7XG5cdGlmICh0cmFuc2ZlciA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh0cmFuc2ZlcikgPyB0cmFuc2ZlciA6IFt0cmFuc2Zlcl07XG59O1xudmFyIG5vcm1hbGl6ZVB1cnBvc2UgPSAocHVycG9zZSkgPT4ge1xuXHRjb25zdCBpbnB1dCA9IEFycmF5LmlzQXJyYXkocHVycG9zZSkgPyBwdXJwb3NlIDogcHVycG9zZSA/IFtwdXJwb3NlXSA6IFtERUZBVUxUX1BVUlBPU0VdO1xuXHRjb25zdCBkZWR1cGVkID0gW107XG5cdGZvciAoY29uc3QgZW50cnkgb2YgaW5wdXQpIGlmIChQVVJQT1NFUy5oYXMoZW50cnkpICYmICFkZWR1cGVkLmluY2x1ZGVzKGVudHJ5KSkgZGVkdXBlZC5wdXNoKGVudHJ5KTtcblx0cmV0dXJuIGRlZHVwZWQubGVuZ3RoID4gMCA/IGRlZHVwZWQgOiBbREVGQVVMVF9QVVJQT1NFXTtcbn07XG52YXIgaW5mZXJUeXBlID0gKGlucHV0KSA9PiB7XG5cdGNvbnN0IGV4cGxpY2l0ID0gYXNTdHJpbmcoaW5wdXQudHlwZSk7XG5cdGlmIChleHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0O1xuXHRjb25zdCBvcCA9IGFzU3RyaW5nKGlucHV0Lm9wKTtcblx0aWYgKG9wID09PSBcImdldFwiIHx8IG9wID09PSBcInNldFwiIHx8IG9wID09PSBcImFwcGx5XCIgfHwgb3AgPT09IFwiaW1wb3J0XCIpIHJldHVybiBcImludm9rZVwiO1xuXHRpZiAoaW5wdXQuZXJyb3IpIHJldHVybiBcInJlc3BvbnNlXCI7XG5cdHJldHVybiBcInJlcXVlc3RcIjtcbn07XG52YXIgaW5mZXJPcGVyYXRpb24gPSAoaW5wdXQsIHJlc29sdmVkVHlwZSkgPT4ge1xuXHRpZiAoaW5wdXQub3ApIHJldHVybiBpbnB1dC5vcDtcblx0aWYgKHJlc29sdmVkVHlwZSA9PT0gXCJpbnZva2VcIikgcmV0dXJuIFwiaW52b2tlXCI7XG5cdGlmIChyZXNvbHZlZFR5cGUgPT09IFwiYWN0XCIpIHJldHVybiBcImRlbGl2ZXJcIjtcblx0cmV0dXJuIFwibWFpbFwiO1xufTtcbnZhciBpbmZlclByb3RvY29sID0gKHByb3RvY29sKSA9PiB7XG5cdGNvbnN0IHZhbHVlID0gYXNTdHJpbmcocHJvdG9jb2wpLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghdmFsdWUpIHJldHVybiBcInVua25vd25cIjtcblx0cmV0dXJuIHZhbHVlO1xufTtcbnZhciByYW5kb21JZCA9ICgpID0+IHtcblx0aWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHRyZXR1cm4gYHVuaWZvcm1fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufTtcbnZhciBjcmVhdGVQcm90b2NvbEVudmVsb3BlID0gKGlucHV0KSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IE51bWJlci5pc0Zpbml0ZShpbnB1dC50aW1lc3RhbXApID8gTnVtYmVyKGlucHV0LnRpbWVzdGFtcCkgOiBEYXRlLm5vdygpO1xuXHRjb25zdCBzb3VyY2UgPSBhc1N0cmluZyhpbnB1dC5zcmNDaGFubmVsID8/IGlucHV0LnNvdXJjZSkgfHwgXCJ1bmlmb3JtXCI7XG5cdGNvbnN0IGRlc3RpbmF0aW9uID0gYXNTdHJpbmcoaW5wdXQuZGVzdGluYXRpb24pO1xuXHRjb25zdCBkc3RDaGFubmVsID0gaW5wdXQuZHN0Q2hhbm5lbCA/PyAoZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbiA6IHZvaWQgMCk7XG5cdGNvbnN0IHV1aWQgPSBhc1N0cmluZyhpbnB1dC51dWlkID8/IGlucHV0LmlkKSB8fCByYW5kb21JZCgpO1xuXHRjb25zdCB0eXBlID0gaW5mZXJUeXBlKGlucHV0KTtcblx0Y29uc3QgcGF5bG9hZCA9IGlucHV0LnBheWxvYWQgPz8gaW5wdXQuZGF0YTtcblx0Y29uc3QgbWV0YWRhdGEgPSB7IC4uLmlucHV0Lm1ldGFkYXRhID8/IHt9IH07XG5cdHJldHVybiB7XG5cdFx0cHVycG9zZTogbm9ybWFsaXplUHVycG9zZShpbnB1dC5wdXJwb3NlKSxcblx0XHRwcm90b2NvbDogaW5mZXJQcm90b2NvbChpbnB1dC5wcm90b2NvbCksXG5cdFx0cmVkaXJlY3Q6IEJvb2xlYW4oaW5wdXQucmVkaXJlY3QpLFxuXHRcdGZsYWdzOiB7IC4uLmlucHV0LmZsYWdzID8/IHt9IH0sXG5cdFx0dHlwZSxcblx0XHRwYXRoOiBub3JtYWxpemVQYXRoKGlucHV0LnBhdGgpLFxuXHRcdHJlc3VsdDogaW5wdXQucmVzdWx0LFxuXHRcdGFyZ3M6IG5vcm1hbGl6ZUFyZ3MoaW5wdXQuYXJncyksXG5cdFx0b3A6IGluZmVyT3BlcmF0aW9uKGlucHV0LCB0eXBlKSxcblx0XHRlcnJvcjogaW5wdXQuZXJyb3IgPyBTdHJpbmcoaW5wdXQuZXJyb3IpIDogdm9pZCAwLFxuXHRcdHRpbWVzdGFtcCxcblx0XHR3aGVyZTogYXNTdHJpbmcoaW5wdXQud2hlcmUpIHx8IHZvaWQgMCxcblx0XHR1dWlkLFxuXHRcdGJyaWRnZXM6IEFycmF5LmlzQXJyYXkoaW5wdXQuYnJpZGdlcykgPyBpbnB1dC5icmlkZ2VzLm1hcChhc1N0cmluZykuZmlsdGVyKEJvb2xlYW4pIDogW10sXG5cdFx0cGF5bG9hZCxcblx0XHR0cmFuc2Zlcjogbm9ybWFsaXplVHJhbnNmZXIoaW5wdXQudHJhbnNmZXIpLFxuXHRcdGV4dGVuc2lvbjogaW5wdXQuZXh0ZW5zaW9uLFxuXHRcdGRlZmVyOiBpbnB1dC5kZWZlcixcblx0XHRzcmNDaGFubmVsOiBzb3VyY2UsXG5cdFx0ZHN0Q2hhbm5lbCxcblx0XHRpZDogdXVpZCxcblx0XHRzb3VyY2UsXG5cdFx0ZGVzdGluYXRpb246IGRlc3RpbmF0aW9uIHx8IHZvaWQgMCxcblx0XHRkYXRhOiBwYXlsb2FkLFxuXHRcdGNvbnRlbnRUeXBlOiBhc1N0cmluZyhpbnB1dC5jb250ZW50VHlwZSkgfHwgdm9pZCAwLFxuXHRcdG1ldGFkYXRhXG5cdH07XG59O1xudmFyIGlzUHJvdG9jb2xFbnZlbG9wZSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcblx0cmV0dXJuIHR5cGVvZiBjYW5kaWRhdGUudXVpZCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgY2FuZGlkYXRlLnNyY0NoYW5uZWwgPT09IFwic3RyaW5nXCIgJiYgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucHVycG9zZSkgJiYgdHlwZW9mIGNhbmRpZGF0ZS50eXBlID09PSBcInN0cmluZ1wiO1xufTtcbnZhciBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlID0gKHZhbHVlKSA9PiBpc1Byb3RvY29sRW52ZWxvcGUodmFsdWUpID8gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh2YWx1ZSkgOiBjcmVhdGVQcm90b2NvbEVudmVsb3BlKHZhbHVlKTtcbnZhciBQcm90b2NvbFJlcGxheUd1YXJkID0gY2xhc3Mge1xuXHRzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0d2luZG93TXM7XG5cdGNvbnN0cnVjdG9yKHdpbmRvd01zID0gMzAwKSB7XG5cdFx0dGhpcy53aW5kb3dNcyA9IE1hdGgubWF4KDEwLCB3aW5kb3dNcyk7XG5cdH1cblx0YWNjZXB0KGVudmVsb3BlKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBrZXkgPSBlbnZlbG9wZS51dWlkO1xuXHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZWVuLmdldChrZXkpO1xuXHRcdHRoaXMucHJ1bmUobm93KTtcblx0XHRpZiAocHJldmlvdXMgJiYgbm93IC0gcHJldmlvdXMgPD0gdGhpcy53aW5kb3dNcykgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuc2Vlbi5zZXQoa2V5LCBub3cpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHBydW5lKG5vdykge1xuXHRcdGZvciAoY29uc3QgW2lkLCB0c10gb2YgdGhpcy5zZWVuLmVudHJpZXMoKSkgaWYgKG5vdyAtIHRzID4gdGhpcy53aW5kb3dNcykgdGhpcy5zZWVuLmRlbGV0ZShpZCk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvVW5pZmllZE1lc3NhZ2luZy50c1xudmFyIFBlbmRpbmdNZXNzYWdlU3RvcmUgPSBjbGFzcyB7XG5cdHN0b3JhZ2VLZXk7XG5cdG1heE1lc3NhZ2VzO1xuXHRkZWZhdWx0VFRMTXM7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHR0aGlzLnN0b3JhZ2VLZXkgPSBvcHRpb25zPy5zdG9yYWdlS2V5ID8/IFwidW5pZm9ybS1tZXNzYWdpbmctcGVuZGluZ1wiO1xuXHRcdHRoaXMubWF4TWVzc2FnZXMgPSBvcHRpb25zPy5tYXhNZXNzYWdlcyA/PyAyMDA7XG5cdFx0dGhpcy5kZWZhdWx0VFRMTXMgPSBvcHRpb25zPy5kZWZhdWx0VFRMTXMgPz8gODY0ZTU7XG5cdH1cblx0cmVhZCgpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgbG9jYWxTdG9yYWdlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gW107XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7XG5cdFx0XHRpZiAoIXJhdykgcmV0dXJuIFtdO1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IFtdO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXHR3cml0ZShlbnRyaWVzKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIGxvY2FsU3RvcmFnZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRcdHRyeSB7XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpKTtcblx0XHR9IGNhdGNoIHt9XG5cdH1cblx0ZW5xdWV1ZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybjtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGlmICgoTnVtYmVyKG1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpID8gTWF0aC5tYXgoMCwgTnVtYmVyKG1lc3NhZ2UubWV0YWRhdGEuZXhwaXJlc0F0KSAtIG5vdykgOiB0aGlzLmRlZmF1bHRUVExNcykgPD0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKS5maWx0ZXIoKGUpID0+IGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIpLmZpbHRlcigoZSkgPT4ge1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdztcblx0XHR9KTtcblx0XHRlbnRyaWVzLnB1c2goe1xuXHRcdFx0ZGVzdGluYXRpb24sXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0c3RvcmVkQXQ6IG5vd1xuXHRcdH0pO1xuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCA+IHRoaXMubWF4TWVzc2FnZXMpIGVudHJpZXMuc3BsaWNlKDAsIGVudHJpZXMubGVuZ3RoIC0gdGhpcy5tYXhNZXNzYWdlcyk7XG5cdFx0dGhpcy53cml0ZShlbnRyaWVzKTtcblx0fVxuXHRkcmFpbihkZXN0aW5hdGlvbikge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybiBbXTtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLnJlYWQoKTtcblx0XHRjb25zdCBrZWVwID0gW107XG5cdFx0Y29uc3Qgb3V0ID0gW107XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcblx0XHRcdGlmICgoTnVtYmVyKGU/Lm1lc3NhZ2U/Lm1ldGFkYXRhPy5leHBpcmVzQXQpIHx8IE51bWJlcihlPy5zdG9yZWRBdCkgKyB0aGlzLmRlZmF1bHRUVExNcykgPD0gbm93KSBjb250aW51ZTtcblx0XHRcdGlmIChlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb24gJiYgZT8ubWVzc2FnZSkgb3V0LnB1c2goZS5tZXNzYWdlKTtcblx0XHRcdGVsc2Uga2VlcC5wdXNoKGUpO1xuXHRcdH1cblx0XHR0aGlzLndyaXRlKGtlZXApO1xuXHRcdHJldHVybiBvdXQ7XG5cdH1cblx0aGFzKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0cmV0dXJuIHRoaXMucmVhZCgpLnNvbWUoKGUpID0+IHtcblx0XHRcdGlmICghZSB8fCB0eXBlb2YgZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuIChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA+IG5vdyAmJiBlPy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb247XG5cdFx0fSk7XG5cdH1cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy53cml0ZShbXSk7XG5cdH1cbn07XG52YXIgVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIgPSBjbGFzcyB7XG5cdGhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3b3JrZXJDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHZpZXdDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHBpcGVsaW5lcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdG1lc3NhZ2VRdWV1ZTtcblx0cGVuZGluZ1N0b3JlO1xuXHRpbml0aWFsaXplZFZpZXdzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0dmlld1JlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRleGVjdXRpb25Db250ZXh0O1xuXHRjaGFubmVsTWFwcGluZ3M7XG5cdGNvbXBvbmVudFJlZ2lzdHJ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVwbGF5R3VhcmQgPSBuZXcgUHJvdG9jb2xSZXBsYXlHdWFyZCgzMDApO1xuXHRsb2NhbENoYW5uZWxJZCA9IFwiXCI7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5leGVjdXRpb25Db250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRcdHRoaXMubG9jYWxDaGFubmVsSWQgPSBgJHt0aGlzLmV4ZWN1dGlvbkNvbnRleHR9OiR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWA7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSBjb25maWcuY2hhbm5lbE1hcHBpbmdzID8/IHt9O1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlID0gZ2V0TWVzc2FnZVF1ZXVlKGNvbmZpZy5xdWV1ZU9wdGlvbnMpO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlID0gbmV3IFBlbmRpbmdNZXNzYWdlU3RvcmUoY29uZmlnLnBlbmRpbmdTdG9yZU9wdGlvbnMpO1xuXHRcdHRoaXMuc2V0dXBHbG9iYWxMaXN0ZW5lcnMoKTtcblx0fVxuXHRyZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0XHRpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKGRlc3RpbmF0aW9uKSkgdGhpcy5oYW5kbGVycy5zZXQoZGVzdGluYXRpb24sIFtdKTtcblx0XHR0aGlzLmhhbmRsZXJzLmdldChkZXN0aW5hdGlvbikucHVzaChoYW5kbGVyKTtcblx0fVxuXHR1bnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcikge1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pO1xuXHRcdGlmIChoYW5kbGVycykge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBoYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIGhhbmRsZXJzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBmdWxsTWVzc2FnZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0aWYgKGF3YWl0IHRoaXMudHJ5RGVsaXZlck1lc3NhZ2UoZnVsbE1lc3NhZ2UpKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24pIHtcblx0XHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZnVsbE1lc3NhZ2UuZGVzdGluYXRpb24sIGZ1bGxNZXNzYWdlKTtcblx0XHRcdGF3YWl0IHRoaXMubWVzc2FnZVF1ZXVlLnF1ZXVlTWVzc2FnZShmdWxsTWVzc2FnZS50eXBlLCBmdWxsTWVzc2FnZSwge1xuXHRcdFx0XHRwcmlvcml0eTogZnVsbE1lc3NhZ2UubWV0YWRhdGE/LnByaW9yaXR5ID8/IFwibm9ybWFsXCIsXG5cdFx0XHRcdG1heFJldHJpZXM6IE51bWJlcihmdWxsTWVzc2FnZS5tZXRhZGF0YT8ubWF4UmV0cmllcyA/PyAzKSxcblx0XHRcdFx0ZGVzdGluYXRpb246IGZ1bGxNZXNzYWdlLmRlc3RpbmF0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAoIXRoaXMucmVwbGF5R3VhcmQuYWNjZXB0KG5vcm1hbGl6ZWQpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBub3JtYWxpemVkLmRlc3RpbmF0aW9uID8/IFwiZ2VuZXJhbFwiO1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5nZXQoZGVzdGluYXRpb24pID8/IFtdO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgaWYgKGhhbmRsZXIuY2FuSGFuZGxlKG5vcm1hbGl6ZWQpKSB0cnkge1xuXHRcdFx0YXdhaXQgaGFuZGxlci5oYW5kbGUobm9ybWFsaXplZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFtVbmlmaWVkTWVzc2FnaW5nXSBIYW5kbGVyIGVycm9yIGZvciAke2Rlc3RpbmF0aW9ufTpgLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIHRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZShtZXNzYWdlKTtcblx0XHRpZiAobm9ybWFsaXplZC5kZXN0aW5hdGlvbiAmJiB0aGlzLmhhbmRsZXJzLmhhcyhub3JtYWxpemVkLmRlc3RpbmF0aW9uKSkge1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzTWVzc2FnZShub3JtYWxpemVkKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjaGFubmVsTmFtZSA9IHRoaXMuZ2V0Q2hhbm5lbEZvckRlc3RpbmF0aW9uKG5vcm1hbGl6ZWQuZGVzdGluYXRpb24pO1xuXHRcdGlmIChjaGFubmVsTmFtZSAmJiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdFx0XHRpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIHRyeSB7XG5cdFx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2Uobm9ybWFsaXplZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHBvc3QgdG8gYnJvYWRjYXN0IGNoYW5uZWwgJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2hhbm5lbCAmJiBcInJlcXVlc3RcIiBpbiBjaGFubmVsKSB0cnkge1xuXHRcdFx0XHRhd2FpdCBjaGFubmVsLnJlcXVlc3Qobm9ybWFsaXplZC50eXBlLCBbbm9ybWFsaXplZF0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwb3N0IHRvIHdvcmtlciBjaGFubmVsICR7Y2hhbm5lbE5hbWV9OmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJlZ2lzdGVyVmlld0NoYW5uZWxzKHZpZXdIYXNoLCBjb25maWdzKSB7XG5cdFx0Y29uc3QgY2hhbm5lbE5hbWVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG5cdFx0XHRpZiAoIXRoaXMuaXNXb3JrZXJTdXBwb3J0ZWQoY29uZmlnKSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIFNraXBwaW5nIHdvcmtlciAnJHtjb25maWcubmFtZX0nIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IGNyZWF0ZVF1ZXVlZE9wdGltaXplZFdvcmtlckNoYW5uZWwoe1xuXHRcdFx0XHRuYW1lOiBjb25maWcubmFtZSxcblx0XHRcdFx0c2NyaXB0OiBjb25maWcuc2NyaXB0LFxuXHRcdFx0XHRvcHRpb25zOiBjb25maWcub3B0aW9ucyxcblx0XHRcdFx0Y29udGV4dDogdGhpcy5yZXNvbHZlV29ya2VyQ29udGV4dCgpXG5cdFx0XHR9LCBjb25maWcucHJvdG9jb2xPcHRpb25zLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjb25maWcubmFtZX0nIHJlYWR5IGZvciB2aWV3ICcke3ZpZXdIYXNofSdgKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgY2hhbm5lbEtleSA9IGAke3ZpZXdIYXNofToke2NvbmZpZy5uYW1lfWA7XG5cdFx0XHR0aGlzLndvcmtlckNoYW5uZWxzLnNldChjaGFubmVsS2V5LCBjaGFubmVsKTtcblx0XHRcdHRoaXMuY2hhbm5lbHMuc2V0KGNoYW5uZWxLZXksIGNoYW5uZWwpO1xuXHRcdFx0Y2hhbm5lbE5hbWVzLmFkZChjb25maWcubmFtZSk7XG5cdFx0fVxuXHRcdHRoaXMudmlld0NoYW5uZWxzLnNldCh2aWV3SGFzaCwgY2hhbm5lbE5hbWVzKTtcblx0fVxuXHRhc3luYyBpbml0aWFsaXplVmlld0NoYW5uZWxzKHZpZXdIYXNoKSB7XG5cdFx0aWYgKHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5oYXModmlld0hhc2gpKSByZXR1cm47XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmNyZWF0ZURlZmVycmVkKCk7XG5cdFx0dGhpcy52aWV3UmVhZHlQcm9taXNlcy5zZXQodmlld0hhc2gsIGRlZmVycmVkKTtcblx0XHRjb25zb2xlLmxvZyhgW1VuaWZpZWRNZXNzYWdpbmddIEluaXRpYWxpemluZyBjaGFubmVscyBmb3IgdmlldzogJHt2aWV3SGFzaH1gKTtcblx0XHRjb25zdCBjaGFubmVsTmFtZXMgPSB0aGlzLnZpZXdDaGFubmVscy5nZXQodmlld0hhc2gpO1xuXHRcdGlmICghY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGluaXRQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbE5hbWUgb2YgY2hhbm5lbE5hbWVzKSB7XG5cdFx0XHRjb25zdCBjaGFubmVsS2V5ID0gYCR7dmlld0hhc2h9OiR7Y2hhbm5lbE5hbWV9YDtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLndvcmtlckNoYW5uZWxzLmdldChjaGFubmVsS2V5KTtcblx0XHRcdGlmIChjaGFubmVsKSBpbml0UHJvbWlzZXMucHVzaChjaGFubmVsLnJlcXVlc3QoXCJwaW5nXCIsIHt9KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gQ2hhbm5lbCAnJHtjaGFubmVsTmFtZX0nIHF1ZXVlZCBmb3IgdmlldyAnJHt2aWV3SGFzaH0nYCk7XG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChpbml0UHJvbWlzZXMpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWRWaWV3cy5hZGQodmlld0hhc2gpO1xuXHRcdGRlZmVycmVkLnJlc29sdmUoKTtcblx0fVxuXHRnZXRXb3JrZXJDaGFubmVsKHZpZXdIYXNoLCB3b3JrZXJOYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMud29ya2VyQ2hhbm5lbHMuZ2V0KGAke3ZpZXdIYXNofToke3dvcmtlck5hbWV9YCkgPz8gbnVsbDtcblx0fVxuXHRnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsTmFtZSkpIHRyeSB7XG5cdFx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpO1xuXHRcdFx0Y2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVCcm9hZGNhc3RNZXNzYWdlKGV2ZW50LmRhdGEsIGNoYW5uZWxOYW1lKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIGNoYW5uZWwpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBCcm9hZGNhc3RDaGFubmVsIG5vdCBhdmFpbGFibGU6ICR7Y2hhbm5lbE5hbWV9YCwgZXJyb3IpO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbE5hbWUsIHtcblx0XHRcdFx0cG9zdE1lc3NhZ2U6ICgpID0+IHt9LFxuXHRcdFx0XHRjbG9zZTogKCkgPT4ge30sXG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXI6ICgpID0+IHt9LFxuXHRcdFx0XHRyZW1vdmVFdmVudExpc3RlbmVyOiAoKSA9PiB7fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdH1cblx0YXN5bmMgaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlLCBjaGFubmVsTmFtZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBlbnZlbG9wZSA9IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSA/PyB7fSwgY2hhbm5lbE5hbWUpO1xuXHRcdFx0aWYgKGVudmVsb3BlLnNyY0NoYW5uZWwgPT09IHRoaXMubG9jYWxDaGFubmVsSWQpIHJldHVybjtcblx0XHRcdGF3YWl0IHRoaXMucHJvY2Vzc01lc3NhZ2UoZW52ZWxvcGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbVW5pZmllZE1lc3NhZ2luZ10gRXJyb3IgaGFuZGxpbmcgYnJvYWRjYXN0IG1lc3NhZ2Ugb24gJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlclBpcGVsaW5lKGNvbmZpZykge1xuXHRcdHRoaXMucGlwZWxpbmVzLnNldChjb25maWcubmFtZSwgY29uZmlnKTtcblx0fVxuXHRhc3luYyBwcm9jZXNzVGhyb3VnaFBpcGVsaW5lKHBpcGVsaW5lTmFtZSwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuZ2V0KHBpcGVsaW5lTmFtZSk7XG5cdFx0aWYgKCFwaXBlbGluZSkgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAnJHtwaXBlbGluZU5hbWV9JyBub3QgZm91bmRgKTtcblx0XHRsZXQgY3VycmVudE1lc3NhZ2UgPSB7IC4uLm1lc3NhZ2UgfTtcblx0XHRjb25zdCB0aW1lb3V0ID0gcGlwZWxpbmUudGltZW91dCA/PyAzZTQ7XG5cdFx0Zm9yIChjb25zdCBzdGFnZSBvZiBwaXBlbGluZS5zdGFnZXMpIHtcblx0XHRcdGNvbnN0IHN0YWdlVGltZW91dCA9IHN0YWdlLnRpbWVvdXQgPz8gdGltZW91dDtcblx0XHRcdGNvbnN0IHJldHJpZXMgPSBzdGFnZS5yZXRyaWVzID8/IDA7XG5cdFx0XHRmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHRyeSB7XG5cdFx0XHRcdGN1cnJlbnRNZXNzYWdlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtzdGFnZS5oYW5kbGVyKGN1cnJlbnRNZXNzYWdlKSwgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgU3RhZ2UgJyR7c3RhZ2UubmFtZX0nIHRpbWVvdXRgKSksIHN0YWdlVGltZW91dCkpXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKGF0dGVtcHQgPT09IHJldHJpZXMpIHtcblx0XHRcdFx0XHRpZiAocGlwZWxpbmUuZXJyb3JIYW5kbGVyKSBwaXBlbGluZS5lcnJvckhhbmRsZXIoZXJyb3IsIHN0YWdlLCBjdXJyZW50TWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gUGlwZWxpbmUgJyR7cGlwZWxpbmVOYW1lfScgc3RhZ2UgJyR7c3RhZ2UubmFtZX0nIGF0dGVtcHQgJHthdHRlbXB0ICsgMX0gZmFpbGVkOmAsIGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRNZXNzYWdlO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHF1ZXVlZE1lc3NhZ2VzID0gYXdhaXQgdGhpcy5tZXNzYWdlUXVldWUuZ2V0UXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pO1xuXHRcdGZvciAoY29uc3QgcXVldWVkTWVzc2FnZSBvZiBxdWV1ZWRNZXNzYWdlcykge1xuXHRcdFx0Y29uc3QgZGF0YUFzTWVzc2FnZSA9IHF1ZXVlZE1lc3NhZ2UuZGF0YTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhQXNNZXNzYWdlICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBkYXRhQXNNZXNzYWdlLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGRhdGFBc01lc3NhZ2UuaWQgPT09IFwic3RyaW5nXCIgPyB0aGlzLnRvUHJvdG9jb2xNZXNzYWdlKGRhdGFBc01lc3NhZ2UpIDoge1xuXHRcdFx0XHQuLi50aGlzLnRvUHJvdG9jb2xNZXNzYWdlKHtcblx0XHRcdFx0XHRpZDogcXVldWVkTWVzc2FnZS5pZCxcblx0XHRcdFx0XHR0eXBlOiBxdWV1ZWRNZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0c291cmNlOiBcInF1ZXVlXCIsXG5cdFx0XHRcdFx0ZGVzdGluYXRpb246IHF1ZXVlZE1lc3NhZ2UuZGVzdGluYXRpb24sXG5cdFx0XHRcdFx0ZGF0YTogcXVldWVkTWVzc2FnZS5kYXRhLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHR0aW1lc3RhbXA6IHF1ZXVlZE1lc3NhZ2UudGltZXN0YW1wLFxuXHRcdFx0XHRcdFx0cmV0cnlDb3VudDogcXVldWVkTWVzc2FnZS5yZXRyeUNvdW50LFxuXHRcdFx0XHRcdFx0bWF4UmV0cmllczogcXVldWVkTWVzc2FnZS5tYXhSZXRyaWVzLFxuXHRcdFx0XHRcdFx0Li4ucXVldWVkTWVzc2FnZS5tZXRhZGF0YVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHR5cGU6IHF1ZXVlZE1lc3NhZ2UudHlwZVxuXHRcdFx0fTtcblx0XHRcdGlmIChhd2FpdCB0aGlzLnRyeURlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UpKSBhd2FpdCB0aGlzLm1lc3NhZ2VRdWV1ZS5yZW1vdmVNZXNzYWdlKHF1ZXVlZE1lc3NhZ2UuaWQpO1xuXHRcdH1cblx0fVxuXHRyZWdpc3RlckNvbXBvbmVudChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHR0aGlzLmNvbXBvbmVudFJlZ2lzdHJ5LnNldChjb21wb25lbnRJZCwgZGVzdGluYXRpb24pO1xuXHRcdHRoaXMucHJvY2Vzc1F1ZXVlZE1lc3NhZ2VzKGRlc3RpbmF0aW9uKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEZhaWxlZCB0byBwcm9jZXNzIHF1ZXVlZCBtZXNzYWdlcyBmb3IgJHtkZXN0aW5hdGlvbn06YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGluaXRpYWxpemVDb21wb25lbnQoY29tcG9uZW50SWQpIHtcblx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcG9uZW50UmVnaXN0cnkuZ2V0KGNvbXBvbmVudElkKTtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gW107XG5cdFx0dGhpcy5wcm9jZXNzUXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHJlcGxheSBxdWV1ZWQgbWVzc2FnZXMgZm9yICR7ZGVzdGluYXRpb259OmAsIGVycm9yKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5wZW5kaW5nU3RvcmUuZHJhaW4oZGVzdGluYXRpb24pO1xuXHR9XG5cdGhhc1BlbmRpbmdNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdHJldHVybiB0aGlzLnBlbmRpbmdTdG9yZS5oYXMoZGVzdGluYXRpb24pO1xuXHR9XG5cdGVucXVldWVQZW5kaW5nTWVzc2FnZShkZXN0aW5hdGlvbiwgbWVzc2FnZSkge1xuXHRcdGNvbnN0IGRlc3QgPSBTdHJpbmcoZGVzdGluYXRpb24gPz8gXCJcIikudHJpbSgpO1xuXHRcdGlmICghZGVzdCB8fCAhbWVzc2FnZSkgcmV0dXJuO1xuXHRcdHRoaXMucGVuZGluZ1N0b3JlLmVucXVldWUoZGVzdCwgbWVzc2FnZSk7XG5cdH1cblx0c2V0Q2hhbm5lbE1hcHBpbmdzKG1hcHBpbmdzKSB7XG5cdFx0dGhpcy5jaGFubmVsTWFwcGluZ3MgPSB7XG5cdFx0XHQuLi50aGlzLmNoYW5uZWxNYXBwaW5ncyxcblx0XHRcdC4uLm1hcHBpbmdzXG5cdFx0fTtcblx0fVxuXHRnZXRDaGFubmVsRm9yRGVzdGluYXRpb24oZGVzdGluYXRpb24pIHtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsTWFwcGluZ3NbZGVzdGluYXRpb25dID8/IG51bGw7XG5cdH1cblx0ZGV0ZWN0UHJvdG9jb2xOYW1lKCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWVcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBcInNlcnZpY2VcIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcIm1haW5cIikgcmV0dXJuIFwid2luZG93XCI7XG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cdHJlc29sdmVXb3JrZXJDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwibWFpblwiKSByZXR1cm4gXCJtYWluXCI7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJzZXJ2aWNlLXdvcmtlclwiKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gXCJjaHJvbWUtZXh0ZW5zaW9uXCI7XG5cdH1cblx0dG9Qcm90b2NvbE1lc3NhZ2UobWVzc2FnZSwgZmFsbGJhY2tTb3VyY2UpIHtcblx0XHRyZXR1cm4gY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSh7XG5cdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0aWQ6IG1lc3NhZ2UuaWQsXG5cdFx0XHR0eXBlOiBtZXNzYWdlLnR5cGUgPz8gXCJ1bmtub3duXCIsXG5cdFx0XHRzb3VyY2U6IG1lc3NhZ2Uuc291cmNlID8/IGZhbGxiYWNrU291cmNlID8/IHRoaXMubG9jYWxDaGFubmVsSWQsXG5cdFx0XHRkZXN0aW5hdGlvbjogbWVzc2FnZS5kZXN0aW5hdGlvbixcblx0XHRcdGRhdGE6IG1lc3NhZ2UuZGF0YSxcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0Li4ubWVzc2FnZS5tZXRhZGF0YSA/PyB7fVxuXHRcdFx0fSxcblx0XHRcdHByb3RvY29sOiB0aGlzLmRldGVjdFByb3RvY29sTmFtZSgpLFxuXHRcdFx0cHVycG9zZTogXCJtYWlsXCIsXG5cdFx0XHRzcmNDaGFubmVsOiBtZXNzYWdlLnNvdXJjZSA/PyB0aGlzLmxvY2FsQ2hhbm5lbElkLFxuXHRcdFx0ZHN0Q2hhbm5lbDogbWVzc2FnZS5kZXN0aW5hdGlvblxuXHRcdH0pO1xuXHR9XG5cdGlzV29ya2VyU3VwcG9ydGVkKF9jb25maWcpIHtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiB0cnVlO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSByZXR1cm4gc3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0c2V0dXBHbG9iYWxMaXN0ZW5lcnMoKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQuZGF0YSAmJiB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhLnR5cGUpIHRoaXMuaGFuZGxlQnJvYWRjYXN0TWVzc2FnZShldmVudC5kYXRhLCBcIndpbmRvdy1tZXNzYWdlXCIpO1xuXHRcdH0pO1xuXHR9XG5cdGNyZWF0ZURlZmVycmVkKCkge1xuXHRcdGxldCByZXNvbHZlO1xuXHRcdGxldCByZWplY3Q7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IHJlcztcblx0XHRcdHJlamVjdCA9IHJlajtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVzb2x2ZSxcblx0XHRcdHJlamVjdCxcblx0XHRcdHByb21pc2Vcblx0XHR9O1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbCBvZiB0aGlzLmNoYW5uZWxzLnZhbHVlcygpKSBpZiAoY2hhbm5lbCBpbnN0YW5jZW9mIEJyb2FkY2FzdENoYW5uZWwpIGNoYW5uZWwuY2xvc2UoKTtcblx0XHRlbHNlIGlmIChjaGFubmVsICYmIFwiY2xvc2VcIiBpbiBjaGFubmVsKSBjaGFubmVsLmNsb3NlKCk7XG5cdFx0dGhpcy5jaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMud29ya2VyQ2hhbm5lbHMuY2xlYXIoKTtcblx0XHR0aGlzLmhhbmRsZXJzLmNsZWFyKCk7XG5cdFx0dGhpcy5waXBlbGluZXMuY2xlYXIoKTtcblx0fVxufTtcbnZhciBkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gZ2V0VW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0aWYgKCFkZWZhdWx0SW5zdGFuY2UpIGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xuXHRyZXR1cm4gZGVmYXVsdEluc3RhbmNlO1xufVxuZnVuY3Rpb24gY3JlYXRlVW5pZmllZE1lc3NhZ2luZyhjb25maWcpIHtcblx0cmV0dXJuIG5ldyBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlcihjb25maWcpO1xufVxuZnVuY3Rpb24gcmVzZXRVbmlmaWVkTWVzc2FnaW5nKCkge1xuXHRpZiAoZGVmYXVsdEluc3RhbmNlKSB7XG5cdFx0ZGVmYXVsdEluc3RhbmNlLmRlc3Ryb3koKTtcblx0XHRkZWZhdWx0SW5zdGFuY2UgPSBudWxsO1xuXHR9XG59XG5mdW5jdGlvbiBzZW5kTWVzc2FnZShtZXNzYWdlKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuc2VuZE1lc3NhZ2UobWVzc2FnZSk7XG59XG5mdW5jdGlvbiByZWdpc3RlckhhbmRsZXIoZGVzdGluYXRpb24sIGhhbmRsZXIpIHtcblx0Z2V0VW5pZmllZE1lc3NhZ2luZygpLnJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcik7XG59XG5mdW5jdGlvbiBnZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBnZXRVbmlmaWVkTWVzc2FnaW5nKCkuZ2V0QnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvU2VydmljZUNoYW5uZWxNYW5hZ2VyLnRzXG52YXIgU2VydmljZUNoYW5uZWxNYW5hZ2VyID0gY2xhc3Mge1xuXHRjaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHJlYWR5UHJvbWlzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRtZXNzYWdlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjaGFubmVsQ29uZmlncztcblx0ZXhlY3V0aW9uQ29udGV4dDtcblx0bG9nUHJlZml4O1xuXHRjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbENvbmZpZ3MgPSBjb25maWcuY2hhbm5lbHMgPz8ge307XG5cdFx0dGhpcy5sb2dQcmVmaXggPSBjb25maWcubG9nUHJlZml4ID8/IFwiW1NlcnZpY2VDaGFubmVsc11cIjtcblx0XHR0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPSBkZXRlY3RFeGVjdXRpb25Db250ZXh0KCk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemVkIGluICR7dGhpcy5leGVjdXRpb25Db250ZXh0fSBjb250ZXh0YCk7XG5cdH1cblx0cmVnaXN0ZXJDb25maWdzKGNvbmZpZ3MpIHtcblx0XHR0aGlzLmNoYW5uZWxDb25maWdzID0ge1xuXHRcdFx0Li4udGhpcy5jaGFubmVsQ29uZmlncyxcblx0XHRcdC4uLmNvbmZpZ3Ncblx0XHR9O1xuXHR9XG5cdGdldENvbmZpZyhjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVsQ29uZmlnc1tjaGFubmVsSWRdO1xuXHR9XG5cdGdldEFsbENvbmZpZ3MoKSB7XG5cdFx0cmV0dXJuIHsgLi4udGhpcy5jaGFubmVsQ29uZmlncyB9O1xuXHR9XG5cdGFzeW5jIGluaXRDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGlmICh0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpKSByZXR1cm4gdGhpcy5jaGFubmVscy5nZXQoY2hhbm5lbElkKTtcblx0XHRjb25zdCBjb25maWcgPSB0aGlzLmNoYW5uZWxDb25maWdzW2NoYW5uZWxJZF07XG5cdFx0aWYgKCFjb25maWcpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWxJZH0uIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZmlyc3QuYCk7XG5cdFx0bGV0IHJlc29sdmVSZWFkeTtcblx0XHRjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0cmVzb2x2ZVJlYWR5ID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0XHR0aGlzLnJlYWR5UHJvbWlzZXMuc2V0KGNoYW5uZWxJZCwge1xuXHRcdFx0cHJvbWlzZTogcmVhZHlQcm9taXNlLFxuXHRcdFx0cmVzb2x2ZTogcmVzb2x2ZVJlYWR5XG5cdFx0fSk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEluaXRpYWxpemluZyBjaGFubmVsOiAke2NoYW5uZWxJZH0gLT4gJHtjb25maWcuYnJvYWRjYXN0TmFtZX1gKTtcblx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoY29uZmlnLmJyb2FkY2FzdE5hbWUpO1xuXHRcdGNoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzLmhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGV2ZW50LmRhdGEpO1xuXHRcdH07XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2VlcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gTWVzc2FnZSBlcnJvciBvbiAke2NoYW5uZWxJZH06YCwgZXZlbnQpO1xuXHRcdH07XG5cdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbElkLCBjaGFubmVsKTtcblx0XHRyZXNvbHZlUmVhZHkoKTtcblx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCByZWFkeTogJHtjaGFubmVsSWR9YCk7XG5cdFx0cmV0dXJuIGNoYW5uZWw7XG5cdH1cblx0Y2xvc2VDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmIChjaGFubmVsKSB7XG5cdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLmNoYW5uZWxzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5yZWFkeVByb21pc2VzLmRlbGV0ZShjaGFubmVsSWQpO1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZGVsZXRlKGNoYW5uZWxJZCk7XG5cdFx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gQ2hhbm5lbCBjbG9zZWQ6ICR7Y2hhbm5lbElkfWApO1xuXHRcdH1cblx0fVxuXHRjbG9zZUFsbCgpIHtcblx0XHRmb3IgKGNvbnN0IGNoYW5uZWxJZCBvZiB0aGlzLmNoYW5uZWxzLmtleXMoKSkgdGhpcy5jbG9zZUNoYW5uZWwoY2hhbm5lbElkKTtcblx0fVxuXHRhc3luYyB3YWl0Rm9yQ2hhbm5lbChjaGFubmVsSWQpIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMucmVhZHlQcm9taXNlcy5nZXQoY2hhbm5lbElkKTtcblx0XHRpZiAoZGVmZXJyZWQpIGF3YWl0IGRlZmVycmVkLnByb21pc2U7XG5cdFx0ZWxzZSBhd2FpdCB0aGlzLmluaXRDaGFubmVsKGNoYW5uZWxJZCk7XG5cdH1cblx0YXN5bmMgc2VuZCh0YXJnZXQsIHR5cGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGF3YWl0IHRoaXMud2FpdEZvckNoYW5uZWwodGFyZ2V0KTtcblx0XHRjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVscy5nZXQodGFyZ2V0KTtcblx0XHRpZiAoIWNoYW5uZWwpIHRocm93IG5ldyBFcnJvcihgQ2hhbm5lbCBub3QgcmVhZHk6ICR7dGFyZ2V0fWApO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0c291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyB0aGlzLmV4ZWN1dGlvbkNvbnRleHQsXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0Y29ycmVsYXRpb25JZDogb3B0aW9ucy5jb3JyZWxhdGlvbklkXG5cdFx0fTtcblx0XHRjaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBTZW50IG1lc3NhZ2UgdG8gJHt0YXJnZXR9OmAsIHR5cGUpO1xuXHR9XG5cdGJyb2FkY2FzdCh0eXBlLCBkYXRhLCBzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IFtjaGFubmVsSWQsIGNoYW5uZWxdIG9mIHRoaXMuY2hhbm5lbHMpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHNvdXJjZTogc291cmNlID8/IHRoaXMuZXhlY3V0aW9uQ29udGV4dCxcblx0XHRcdFx0dGFyZ2V0OiBjaGFubmVsSWQsXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fTtcblx0XHRcdGNoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBCcm9hZGNhc3QgbWVzc2FnZTpgLCB0eXBlKTtcblx0fVxuXHRzdWJzY3JpYmUoY2hhbm5lbElkLCBoYW5kbGVyKSB7XG5cdFx0aWYgKCF0aGlzLm1lc3NhZ2VIYW5kbGVycy5oYXMoY2hhbm5lbElkKSkgdGhpcy5tZXNzYWdlSGFuZGxlcnMuc2V0KGNoYW5uZWxJZCwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCkuYWRkKGhhbmRsZXIpO1xuXHRcdHRoaXMuaW5pdENoYW5uZWwoY2hhbm5lbElkKS5jYXRjaChjb25zb2xlLmVycm9yKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCk/LmRlbGV0ZShoYW5kbGVyKTtcblx0XHR9O1xuXHR9XG5cdGhhbmRsZUluY29taW5nTWVzc2FnZShjaGFubmVsSWQsIGRhdGEpIHtcblx0XHRjb25zdCBoYW5kbGVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmICghaGFuZGxlcnMgfHwgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IE5vIGhhbmRsZXJzIGZvciAke2NoYW5uZWxJZH0sIG1lc3NhZ2UgcXVldWVkYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2UgPSBkYXRhO1xuXHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykgdHJ5IHtcblx0XHRcdGhhbmRsZXIobWVzc2FnZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IEhhbmRsZXIgZXJyb3Igb24gJHtjaGFubmVsSWR9OmAsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0aXNJbml0aWFsaXplZChjaGFubmVsSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5jaGFubmVscy5oYXMoY2hhbm5lbElkKTtcblx0fVxuXHRnZXRJbml0aWFsaXplZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hhbm5lbHMua2V5cygpKTtcblx0fVxuXHRnZXRTdGF0dXMoKSB7XG5cdFx0Y29uc3Qgc3RhdHVzID0ge307XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsSWQgb2YgT2JqZWN0LmtleXModGhpcy5jaGFubmVsQ29uZmlncykpIHN0YXR1c1tjaGFubmVsSWRdID0ge1xuXHRcdFx0Y29ubmVjdGVkOiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpLFxuXHRcdFx0bGFzdEFjdGl2aXR5OiBEYXRlLm5vdygpLFxuXHRcdFx0cGVuZGluZ01lc3NhZ2VzOiAwXG5cdFx0fTtcblx0XHRyZXR1cm4gc3RhdHVzO1xuXHR9XG5cdGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpIHtcblx0cmV0dXJuIG5ldyBTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKTtcbn1cbnZhciBkZWZhdWx0TWFuYWdlciA9IG51bGw7XG5mdW5jdGlvbiBnZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoY29uZmlnKSB7XG5cdGlmICghZGVmYXVsdE1hbmFnZXIpIGRlZmF1bHRNYW5hZ2VyID0gbmV3IFNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpO1xuXHRlbHNlIGlmIChjb25maWc/LmNoYW5uZWxzKSBkZWZhdWx0TWFuYWdlci5yZWdpc3RlckNvbmZpZ3MoY29uZmlnLmNoYW5uZWxzKTtcblx0cmV0dXJuIGRlZmF1bHRNYW5hZ2VyO1xufVxuZnVuY3Rpb24gcmVzZXRTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIoKSB7XG5cdGlmIChkZWZhdWx0TWFuYWdlcikge1xuXHRcdGRlZmF1bHRNYW5hZ2VyLmNsb3NlQWxsKCk7XG5cdFx0ZGVmYXVsdE1hbmFnZXIgPSBudWxsO1xuXHR9XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLnRzXG5mdW5jdGlvbiBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3QgcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0cmV0dXJuIChzdWJzY3JpYmVyKSA9PiB7XG5cdFx0Y29uc3QgcmVzcG9uZCA9IChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkgcmV0dXJuIChyZXN1bHQpID0+IHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXF1ZXN0XCIpIHJldHVybiAocmVzdWx0LCB0cmFuc2ZlcikgPT4gc2VuZCh7XG5cdFx0XHRcdC4uLnJlc3VsdCxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0sIHRyYW5zZmVyKTtcblx0XHRcdHJldHVybiBzZW5kO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25NZXNzYWdlID0gKGRhdGEpID0+IHtcblx0XHRcdGlmICghc3Vic2NyaWJlci5hY3RpdmUpIHJldHVybjtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSBwZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHRwZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aGFuZGxlciA/IGhhbmRsZXIoZGF0YSwgcmVzcG9uZChkYXRhKSkgOiBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0fTtcblx0XHRjb25zdCBjbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCBvbk1lc3NhZ2UsIChlKSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xuXHRcdHN1YnNjcmliZXIucmVxdWVzdCA9IChtc2cpID0+IHtcblx0XHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdFx0bXNnLnJlcUlkID0gcmVxSWQ7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRwZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2VuZChtc2cpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gY2xlYW51cDtcblx0fTtcbn1cbnZhciBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF90cmFuc3BvcnQ7XG5cdF9jaGFubmVsTmFtZTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3NlbmQ7XG5cdF9hY3RpdmUgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3RyYW5zcG9ydCwgX2NoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5fdHJhbnNwb3J0ID0gX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKF90cmFuc3BvcnQpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9ic2VydmVyKTtcblx0XHRpZiAoIXRoaXMuX2FjdGl2ZSkgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4geyB1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzZXJ2ZXIpO1xuXHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCkgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdH0gfTtcblx0fVxuXHRuZXh0KG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKG1zZywgdHJhbnNmZXIpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubmV4dCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWRcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fYWN0aXZlKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3RyYW5zcG9ydCwgKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fSwgKGUpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5lcnJvcj8uKGUpKSwgKCkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSkpO1xuXHRcdHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gYXN5bmMgKGRhdGEsIHJlc3BvbmQpID0+IHtcblx0XHRpZiAoZGF0YS50eXBlICE9PSBcInJlcXVlc3RcIiB8fCBkYXRhLmNoYW5uZWwgIT09IGNoYW5uZWxOYW1lKSByZXR1cm47XG5cdFx0b3B0aW9ucy5vblJlcXVlc3Q/LihkYXRhLnBheWxvYWQpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZGF0YS5wYXlsb2FkLCBkYXRhLnJlcUlkLCBjaGFubmVsTmFtZSk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0b3B0aW9ucy5vblJlc3BvbnNlPy4ocmVzdWx0LnJlc3BvbnNlKTtcblx0XHRcdHJlc3BvbmQoe1xuXHRcdFx0XHQuLi5yZXN1bHQucmVzcG9uc2UsXG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9LCByZXN1bHQudHJhbnNmZXIpO1xuXHRcdH1cblx0fTtcbn1cbnZhciBPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X3RhcmdldENoYW5uZWw7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3N1YnNjcmliZXIgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIF90YXJnZXRDaGFubmVsKSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fdGFyZ2V0Q2hhbm5lbCA9IF90YXJnZXRDaGFubmVsO1xuXHR9XG5cdGNvbm5lY3Qoc3Vic2NyaWJlcikge1xuXHRcdHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0Zm9yIChjb25zdCBwIG9mIHRoaXMuX3BlbmRpbmcudmFsdWVzKCkpIHAucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJEaXNjb25uZWN0ZWRcIikpO1xuXHRcdHRoaXMuX3BlbmRpbmcuY2xlYXIoKTtcblx0XHR0aGlzLl9zdWJzY3JpYmVyID0gbnVsbDtcblx0fVxuXHRoYW5kbGVNZXNzYWdlKGRhdGEpIHtcblx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0aWYgKHApIHtcblx0XHRcdFx0cC5yZXNvbHZlKGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRkaXNwYXRjaChhY3Rpb24sIHBhdGgsIGFyZ3MpIHtcblx0XHRpZiAoIXRoaXMuX3N1YnNjcmliZXI/LmFjdGl2ZSkgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJOb3QgY29ubmVjdGVkXCIpKTtcblx0XHRjb25zdCByZXFJZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IG1zZyA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX3RhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdHJlc29sdmUsXG5cdFx0XHRyZWplY3QsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KSk7XG5cdFx0dGhpcy5fc3Vic2NyaWJlci5uZXh0KG1zZyk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9pbmRleC50c1xudmFyIHN5bmMgPSBhc3luYyAoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QgPSBudWxsKSA9PiBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QgPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpKTtcbnZhciBpbXBvcnRNb2R1bGVJbkNoYW5uZWwgPSBhc3luYyAoY2hhbm5lbCwgdXJsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpID0+IHtcblx0cmV0dXJuIChhd2FpdCBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zPy5jaGFubmVsT3B0aW9ucywgYnJvYWRjYXN0KSk/LmRvSW1wb3J0TW9kdWxlPy4odXJsLCBvcHRpb25zPy5pbXBvcnRPcHRpb25zKTtcbn07XG52YXIgY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNoYW5uZWxDb250ZXh0O1xudmFyIGdldFNoYXJlZENvbnRleHQgPSBnZXRPckNyZWF0ZUNvbnRleHQ7XG52YXIgY3JlYXRlTXVsdGlDaGFubmVsID0gY3JlYXRlQ2hhbm5lbHNJbkNvbnRleHQ7XG52YXIgaW1wb3J0SXNvbGF0ZWRNb2R1bGUgPSBpbXBvcnRNb2R1bGVJbkNvbnRleHQ7XG52YXIgY29ubmVjdFRvQ2hhbm5lbEFzTW9kdWxlID0gYXN5bmMgKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCwgaG9zdENoYW5uZWwgPSBcIiRob3N0JFwiKSA9PiB7XG5cdGNvbnN0IGhvc3QgPSBjcmVhdGVIb3N0Q2hhbm5lbChob3N0Q2hhbm5lbCA/PyBcIiRob3N0JFwiKTtcblx0YXdhaXQgaG9zdD8uY3JlYXRlUmVtb3RlQ2hhbm5lbChjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QpO1xuXHRyZXR1cm4gd3JhcENoYW5uZWwoY2hhbm5lbCwgaG9zdCA/PyBTRUxGX0NIQU5ORUw/Lmluc3RhbmNlKTtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gZGV0ZWN0RXhlY3V0aW9uQ29udGV4dCgpO1xuXHRpZiAoY29udGV4dCAhPT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2hyb21lIGV4dGVuc2lvbiBtZXNzYWdpbmcgbm90IGF2YWlsYWJsZSBpbiAke2NvbnRleHR9YCk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YXN5bmMgcmVxdWVzdChtZXRob2QsIGFyZ3MgPSBbXSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRpZDogYGNyeF8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMil9YCxcblx0XHRcdFx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdFx0XHRcdHNvdXJjZTogY29udGV4dCxcblx0XHRcdFx0XHRcdHRhcmdldDogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0XHRkYXRhOiBhcmdzPy5sZW5ndGggPT09IDEgPyBhcmdzWzBdIDogYXJncyxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdFx0XHRcdFx0Li4ub3B0aW9ucz8ubWV0YWRhdGEgPz8ge31cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJlamVjdChuZXcgRXJyb3IoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcblx0XHRcdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7ICRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCwgJGRlc2NyaXB0b3IsICRyZXF1ZXN0SGFuZGxlciwgQWJzdHJhY3RUcmFuc3BvcnQsIEF0b21pY3NCdWZmZXIsIEF0b21pY3NSaW5nQnVmZmVyLCBBdG9taWNzVHJhbnNwb3J0LCBBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSwgQmlkaXJlY3Rpb25hbEludm9rZXIsIEJyb2FkY2FzdENoYW5uZWxPYnNlcnZhYmxlLCBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0LCBDSEFOTkVMX01BUCwgQ2hhbm5lbENvbm5lY3Rpb24sIENoYW5uZWxDb250ZXh0LCBDaGFubmVsSGFuZGxlciwgQ2hhbm5lbEhhbmRsZXIgYXMgT2JzZXJ2YWJsZUNoYW5uZWxIYW5kbGVyLCBDaGFubmVsTWVzc2FnZU9ic2VydmFibGUsIE9ic2VydmFibGUgYXMgQ2hhbm5lbE5hdGl2ZU9ic2VydmFibGUsIE9ic2VydmFibGUsIENoYW5uZWxPYnNlcnZhYmxlLCBDaGFubmVsU3RvcmFnZSwgQ2hhbm5lbFN1YmplY3QsIENoYW5uZWxUcmFuc2FjdGlvbiwgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCwgQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwsIENocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsLCBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUsIENocm9tZUV4dGVybmFsVHJhbnNwb3J0LCBDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSwgQ2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVBvcnRUcmFuc3BvcnQsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlLCBDaHJvbWVSdW50aW1lVHJhbnNwb3J0LCBDaHJvbWVUYWJzT2JzZXJ2YWJsZSwgQ2hyb21lVGFic1RyYW5zcG9ydCwgQ29ubmVjdGlvblBvb2wsIERlZmF1bHRSZWZsZWN0LCBEaXNwYXRjaFByb3h5SGFuZGxlciBhcyBEaXNwYXRjaEhhbmRsZXIsIERpc3BhdGNoUHJveHlIYW5kbGVyLCBNZXNzYWdlT2JzZXJ2YWJsZSwgTWVzc2FnZVBvcnRPYnNlcnZhYmxlLCBNZXNzYWdlUG9ydFRyYW5zcG9ydCwgTWVzc2FnZVF1ZXVlLCBNZXNzYWdlUXVldWVTdG9yYWdlLCBPYnNlcnZhYmxlRmFjdG9yeSwgT2JzZXJ2YWJsZVJlcXVlc3REaXNwYXRjaGVyLCBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsLCBQUk9YWV9JTlRFUk5BTFMsIFBST1hZX01BUktFUiwgUGVuZGluZ01lc3NhZ2VTdG9yZSwgUG9ydFBvb2wsIFBvcnRUcmFuc3BvcnQsIFBvcnRUcmFuc3BvcnRGYWN0b3J5LCBQcm90b2NvbFJlcGxheUd1YXJkLCBQcm94eUJ1aWxkZXIsIFF1ZXVlZFdvcmtlckNoYW5uZWwsIFJFQUQsIFJUQ1BlZXJNYW5hZ2VyLCBSVENQZWVyVHJhbnNwb3J0LCBSVENUcmFuc3BvcnRGYWN0b3J5LCBSZW1vdGVDaGFubmVsSGVscGVyLCBSZW1vdGVDaGFubmVscywgUmVtb3RlUHJveHlIYW5kbGVyLCBSZXBsYXlDaGFubmVsU3ViamVjdCwgUmVxdWVzdG9yLCBSZXNwb25kZXIsIFNFTEZfQ0hBTk5FTCwgU2VsZk9ic2VydmFibGUsIFNlbGZUcmFuc3BvcnQsIFNlcnZpY2VDaGFubmVsTWFuYWdlciwgU2VydmljZVdvcmtlckNsaWVudCwgU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJIb3N0LCBTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUsIFNlcnZpY2VXb3JrZXJUcmFuc3BvcnQsIFNoYXJlZFdvcmtlckNsaWVudCwgU2hhcmVkV29ya2VySG9zdCwgU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnksIFNvY2tldElPT2JzZXJ2YWJsZSwgU29ja2V0SU9PYnNlcnZhYmxlRmFjdG9yeSwgU29ja2V0SU9Sb29tT2JzZXJ2YWJsZSwgVHJhbnNmZXJhYmxlU3RvcmFnZSwgVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnksIFRyYW5zcG9ydEFkYXB0ZXIsIENocm9tZVBvcnRPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUG9ydE9ic2VydmFibGUsIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lUnVudGltZU9ic2VydmFibGUsIENocm9tZVRhYnNPYnNlcnZhYmxlJDEgYXMgVHJhbnNwb3J0Q2hyb21lVGFic09ic2VydmFibGUsIFRyYW5zcG9ydENvcmVGYWN0b3J5LCBUcmFuc3BvcnRGYWN0b3J5LCBUcmFuc3BvcnRPYnNlcnZhYmxlLCBUcmFuc3BvcnRPYnNlcnZhYmxlRmFjdG9yeSwgVW5pZmllZENoYW5uZWwsIFVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyLCBVbmlmaWVkVHJhbnNwb3J0RmFjdG9yeSwgV1JlZmxlY3RBY3Rpb24sIFdTdGF0dXMsIFdUeXBlLCBXZWJTb2NrZXRPYnNlcnZhYmxlLCBXZWJTb2NrZXRUcmFuc3BvcnQsIFdpbmRvd1BvcnRDb25uZWN0b3IsIFdvcmtlckNvbnRleHQsIFdvcmtlck9ic2VydmFibGUsIFdvcmtlclRyYW5zcG9ydCwgYWRkQnJvYWRjYXN0Q2hhbm5lbCwgYWRkUG9ydENoYW5uZWwsIGFkZFNlbGZDaGFubmVsVG9EZWZhdWx0LCBhZGRXb3JrZXJDaGFubmVsLCBhdXRvSW52b2tlciwgYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlLCBidWlsZFJlc3BvbnNlLCBjbG9zZUFsbFN0b3JhZ2UsIGNsb3NlVW5pZmllZENoYW5uZWwsIGNvbm5lY3RUb0NoYW5uZWxBc01vZHVsZSwgY3JlYXRlQXRvbWljc0NoYW5uZWxQYWlyLCBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCwgY3JlYXRlQmlkaXJlY3Rpb25hbENoYW5uZWwkMSBhcyBjcmVhdGVCaWRpcmVjdGlvbmFsVHJhbnNwb3J0LCBjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmcsIGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCwgY3JlYXRlQ2hhbm5lbENvbnRleHQsIGNyZWF0ZUNoYW5uZWxQYWlyLCBjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIsIGNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0LCBjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3QsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkNoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvblJ1bnRpbWVDaGFubmVsLCBjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic01lc3NhZ2luZ0NoYW5uZWwsIGNyZWF0ZUNocm9tZUxpc3RlbmVyLCBjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciwgY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyLCBjcmVhdGVDb25uZWN0aW9uT2JzZXJ2ZXIsIGNyZWF0ZUNvbnRleHQsIGNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciwgY3JlYXRlRXhwb3NlSGFuZGxlciwgY3JlYXRlRnJvbVBvcnQsIGNyZWF0ZUhvc3RDaGFubmVsLCBjcmVhdGVIb3N0UHJveHksIGNyZWF0ZUludm9rZXIsIGNyZWF0ZUludm9rZXJPYnNlcnZhYmxlLCBjcmVhdGVNZXNzYWdlSWQsIGNyZWF0ZU1lc3NhZ2VRdWV1ZSwgY3JlYXRlTXVsdGlDaGFubmVsLCBjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCwgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwsIGNyZWF0ZVBvcnRQcm94eSwgY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSwgY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUmVmbGVjdEhhbmRsZXIsIGNyZWF0ZVJlbW90ZVByb3h5LCBjcmVhdGVSZXF1ZXN0b3IsIGNyZWF0ZVJlc3BvbmRlciwgY3JlYXRlU2VuZGVyUHJveHksIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlciwgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwsIGNyZWF0ZVNlcnZpY2VXb3JrZXJDbGllbnQsIGNyZWF0ZVNlcnZpY2VXb3JrZXJIb3N0LCBjcmVhdGVTaGFyZWRXb3JrZXJIb3N0T2JzZXJ2YWJsZSwgY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIsIGNyZWF0ZVRyYW5zcG9ydCwgY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsIGNyZWF0ZVRyYW5zcG9ydFNlbmRlciwgY3JlYXRlVW5pZmllZENoYW5uZWwsIGNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpciwgY3JlYXRlVW5pZmllZE1lc3NhZ2luZywgY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJDaGFubmVsLCBkZWJvdW5jZSwgZGVmZXJDaGFubmVsLCBkZWxheSwgZGVsZXRlQ29udGV4dCwgZGVzY01hcCwgZGV0ZWN0Q29udGV4dFR5cGUsIGRldGVjdEV4ZWN1dGlvbkNvbnRleHQsIGRldGVjdEluY29taW5nQ29udGV4dFR5cGUsIGRldGVjdFRyYW5zcG9ydFR5cGUgYXMgZGV0ZWN0VHJhbnNwb3J0LCBkZXRlY3RUcmFuc3BvcnRUeXBlJDEgYXMgZGV0ZWN0VHJhbnNwb3J0VHlwZSwgZXhlY3V0ZUFjdGlvbiwgZXhwb3NlRnJvbVVuaWZpZWQsIGV4cG9zZUZyb21Xb3JrZXIsIGV4cG9zZU92ZXJQb3J0LCBmaWx0ZXIsIGZyb21FdmVudCwgZnJvbVByb21pc2UsIGdldEJyb2FkY2FzdENoYW5uZWwsIGdldENoYW5uZWxGcm9tRGVmYXVsdCwgZ2V0Q2hhbm5lbFN0b3JhZ2UsIGdldENvbm5lY3Rpb24sIGdldENvbm5lY3Rpb25Qb29sLCBnZXRDb250ZXh0LCBnZXRDb250ZXh0TmFtZXMsIGdldEN1cnJlbnRUYWJJZCwgZ2V0RGVmYXVsdENvbnRleHQsIGdldEhvc3RDb25uZWN0aW9uLCBnZXRNZXNzYWdlUXVldWUsIGdldE9yQ3JlYXRlQ29udGV4dCwgZ2V0UHJveHlEZXNjcmlwdG9yLCBnZXRQcm94eUludGVybmFscywgZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCBnZXRTaGFyZWRDb250ZXh0LCBnZXRUcmFuc3BvcnRNZXRhLCBnZXRUcmFuc3BvcnRSZWdpc3RyeSwgZ2V0VW5pZmllZENoYW5uZWwsIGdldFVuaWZpZWRDaGFubmVsTmFtZXMsIGdldFVuaWZpZWRNZXNzYWdpbmcsIGdldFZpc2libGVUYWJJZCwgZ2V0V29ya2VyQ2hhbm5lbCwgZ2V0V29ya2VyQ29udGV4dCwgZ2V0V29ya2VySW52b2tlciwgZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwsIGdldFdvcmtlclJlc3BvbmRlciwgaGFuZE1hcCwgaGFuZGxlUmVxdWVzdCwgaGFzTm9QYXRoLCBpbXBvcnRJbkhvc3QsIGltcG9ydElzb2xhdGVkTW9kdWxlLCBpbXBvcnRNb2R1bGVJbkNoYW5uZWwsIGltcG9ydE1vZHVsZUluQ29udGV4dCwgaW5pdENoYW5uZWxIYW5kbGVyLCBpbml0RGVmZXJyZWRDaGFubmVsLCBpbml0TWFpbkNoYW5uZWwsIGluaXRXb3JrZXJDb250ZXh0LCBpbnRlcnZhbCwgaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0LCBpc1Byb3RvY29sRW52ZWxvcGUsIGlzUmVtb3RlUHJveHksIGlzU2VydmljZVdvcmtlckNvbnRleHQsIGxvYWRXb3JrZXIsIG1ha2VCcm9hZGNhc3RJbnZva2VyLCBtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyLCBtYWtlQ2hyb21lUnVudGltZUludm9rZXIsIG1ha2VNZXNzYWdlUG9ydEludm9rZXIsIG1ha2VPYnNlcnZhYmxlUmVxdWVzdFByb3h5LCBtYWtlUmVxdWVzdFByb3h5LCBtYWtlU2VsZkludm9rZXIsIG1ha2VTZXJ2aWNlV29ya2VyQ2xpZW50SW52b2tlciwgbWFrZVNlcnZpY2VXb3JrZXJIb3N0SW52b2tlciwgbWFrZVdlYlNvY2tldEludm9rZXIsIG1ha2VXb3JrZXJJbnZva2VyLCBtYXAsIG1lcmdlLCBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlLCBub3JtYWxpemVSZWYsIG9iamVjdFRvUmVmLCBvbldvcmtlckNoYW5uZWxDcmVhdGVkLCBvbldvcmtlckNvbm5lY3Rpb24sIG9uV29ya2VySW52b2NhdGlvbiwgcHJveHlCdWlsZGVyLCByZWFkQnlQYXRoLCByZWdpc3RlckhhbmRsZXIsIHJlZ2lzdGVyV29ya2VyQVBJLCByZWdpc3RlcmVkSW5QYXRoLCByZW1vdGVGcm9tVW5pZmllZCwgcmVtb3ZlQnlEYXRhLCByZW1vdmVCeVBhdGgsIHJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCByZXNldFVuaWZpZWRNZXNzYWdpbmcsIHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmLCBzZW5kTWVzc2FnZSwgc2V0dXBJbnZva2VyLCBzZXR1cFVuaWZpZWRDaGFubmVsLCBzdG9yZWREYXRhLCBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMsIHN5bmMsIHRha2UsIHRha2VVbnRpbCwgdGhyb3R0bGUsIHRyYXZlcnNlQnlQYXRoLCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5LCB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlLCB3aGVuLCBjdHggYXMgd29ya2VyQ29udGV4dCwgd3JhcENoYW5uZWwsIHdyYXBEZXNjcmlwdG9yLCB3cmFwTWFwLCB3cmFwT2JzZXJ2YWJsZUNoYW5uZWwsIHdyaXRlQnlQYXRoIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFBQSxJQUFVLFVBQUFDLEdBQVEsdUJBQUFDLElBQXFCLG1CQUFBQyxJQUFpQixpQkFBQUMsSUFBZSxxQkFBQUMsSUFBbUIsZUFBQUMsVUFBbUI7QUFHdEgsSUFBSUMsS0FBMEIsMEJBQVNBLEdBQVM7QUFDL0MsU0FBQUEsRUFBUSxVQUFhLFdBQ3JCQSxFQUFRLFFBQVcsU0FDWkE7QUFDUixHQUFFLENBQUMsQ0FBQyxHQUNBQyxLQUF3QiwwQkFBU0EsR0FBTztBQUMzQyxTQUFBQSxFQUFNLFlBQWUsYUFDckJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxTQUFZLFVBQ2xCQSxFQUFNLFVBQWEsV0FDbkJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxZQUFlLGFBQ3JCQSxFQUFNLE9BQVUsUUFDaEJBLEVBQU0sU0FBWSxVQUNsQkEsRUFBTSxXQUFjLFlBQ3BCQSxFQUFNLFFBQVcsU0FDakJBLEVBQU0sTUFBUyxPQUNmQSxFQUFNLE1BQVMsT0FDZkEsRUFBTSxTQUFZLFVBQ2xCQSxFQUFNLFdBQWMsV0FDcEJBLEVBQU0sVUFBYSxXQUNuQkEsRUFBTSxVQUFhLFdBQ1pBO0FBQ1IsR0FBRSxDQUFDLENBQUMsR0FD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QUFBLElBQ0EsUUFBUTtBQUFBLElBQUM7QUFBQSxFQUNWLElBQ087QUFBQSxJQUNOLE1BQU0sUUFBUW9NLEdBQVFuZixJQUFPLENBQUMsR0FBRztBQUNoQyxhQUFPLElBQUksUUFBUSxDQUFDcEUsR0FBU0MsTUFBVztBQUN2QyxZQUFJO0FBQ0gsaUJBQU8sUUFBUSxZQUFZO0FBQUEsWUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxZQUM1RCxNQUFNc2pCO0FBQUEsWUFDTixRQUFRcE07QUFBQSxZQUNSLFFBQVEvWTtBQUFBLFlBQ1IsTUFBTWdHLEdBQU0sV0FBVyxJQUFJQSxFQUFLLENBQUMsSUFBSUE7QUFBQSxZQUNyQyxVQUFVO0FBQUEsY0FDVCxXQUFXLEtBQUssSUFBSTtBQUFBLGNBQ3BCLEdBQUd4SSxHQUFTLFlBQVksQ0FBQztBQUFBLFlBQzFCO0FBQUEsVUFDRCxHQUFHLENBQUM4TixNQUFhO0FBQ2hCLFlBQUksT0FBTyxRQUFRLFlBQVd6SixFQUFPLElBQUksTUFBTSxPQUFPLFFBQVEsVUFBVSxPQUFPLENBQUMsSUFDM0VELEVBQVEwSixDQUFRO0FBQUEsVUFDdEIsQ0FBQztBQUFBLFFBQ0YsU0FBU2tSLEdBQU87QUFDZixVQUFBM2EsRUFBTzJhLENBQUs7QUFBQSxRQUNiO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQUM7QUFBQSxFQUNWO0FBQ0Q7IiwKICAibmFtZXMiOiBbIlByb21pc2VkIiwgIlVVSUR2NCIsICJkZWVwT3BlcmF0ZUFuZENsb25lIiwgImlzQ2FuSnVzdFJldHVybiIsICJpc0NhblRyYW5zZmVyIiwgImlzTm90Q29tcGxleEFycmF5IiwgImlzUHJpbWl0aXZlIiwgIldTdGF0dXMiLCAiV1R5cGUiLCAiV1JlZmxlY3RBY3Rpb24iLCAiVFJBTlNQT1JUX1RZUEVfQUxJQVNFUyIsICJub3JtYWxpemVUcmFuc3BvcnRUeXBlQWxpYXMiLCAidHJhbnNwb3J0IiwgInJhdyIsICJkZXRlY3RUcmFuc3BvcnRUeXBlJDEiLCAiZ2V0VHJhbnNwb3J0TWV0YSIsICJ0eXBlIiwgImNyZWF0ZVRyYW5zcG9ydFNlbmRlciIsICJvcHRpb25zIiwgIm1zZyIsICJ0cmFuc2ZlciIsICJ0cmFuc2ZlcmFibGUiLCAiXyIsICJkYXRhIiwgInRhYklkIiwgInBvcnROYW1lIiwgImV4dGVybmFsSWQiLCAicmVnIiwgImNsaWVudElkIiwgImFsbCIsICJjIiwgImNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyIiwgIm9uTWVzc2FnZSIsICJvbkVycm9yIiwgIm9uQ2xvc2UiLCAibXNnSGFuZGxlciIsICJlIiwgImVyciIsICJlcnJIYW5kbGVyIiwgImNsb3NlSGFuZGxlciIsICJsaXN0ZW5lciIsICJjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIiLCAicG9ydCIsICJoYW5kbGVyIiwgImNyZWF0ZUNocm9tZUxpc3RlbmVyIiwgIm1lc3NhZ2UiLCAic2VuZGVyIiwgInNlbmRSZXNwb25zZSIsICJjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQiLCAidXJsIiwgInNvY2tldCIsICJyZWNvbm5lY3RBdHRlbXB0cyIsICJyZWNvbm5lY3RUaW1lciIsICJzZW5kIiwgInJlY29ubmVjdCIsICJjbG9zZSIsICJoIiwgImNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydCIsICJjaGFubmVsTmFtZSIsICJjaGFubmVsIiwgIlRyYW5zcG9ydENvcmVGYWN0b3J5IiwgIkJhc2VTdWJzY3JpcHRpb24iLCAiX3Vuc3Vic2NyaWJlIiwgIk9ic2VydmFibGUiLCAiX3Byb2R1Y2VyIiwgIm9ic2VydmVyT3JOZXh0IiwgIm9wdHMiLCAib2JzZXJ2ZXIiLCAiY3RybCIsICJhY3RpdmUiLCAiY2xlYW51cCIsICJkb0NsZWFudXAiLCAic3Vic2NyaWJlciIsICJ2IiwgIm9wcyIsICJzIiwgIm9wIiwgIkNoYW5uZWxTdWJqZWN0IiwgInZhbHVlIiwgIm9icyIsICJSZXBsYXlDaGFubmVsU3ViamVjdCIsICJidWZmZXJTaXplIiwgIkNoYW5uZWxPYnNlcnZhYmxlIiwgIl90cmFuc3BvcnQiLCAiX2NoYW5uZWxOYW1lIiwgInJlcUlkIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInAiLCAiZCIsICJjcmVhdGVJbnZva2VyT2JzZXJ2YWJsZSIsICJyZXN1bHQiLCAiY3JlYXRlUmVmbGVjdEhhbmRsZXIiLCAicmVzcG9uZCIsICJoYW5kbGVSZXF1ZXN0IiwgIk1lc3NhZ2VPYnNlcnZhYmxlIiwgInNvdXJjZSIsICJtZXNzYWdlVHlwZSIsICJmaWx0ZXIiLCAicHJlZCIsICJzcmMiLCAic3ViIiwgIm1hcCIsICJmbiIsICJ0YWtlIiwgIm4iLCAidGFrZVVudGlsIiwgInNpZ25hbCIsICJzcyIsICJzaWciLCAiZGVib3VuY2UiLCAibXMiLCAidCIsICJ0aHJvdHRsZSIsICJsYXN0IiwgIm5vdyIsICJmcm9tRXZlbnQiLCAidGFyZ2V0IiwgImV2ZW50IiwgImZyb21Qcm9taXNlIiwgInByb21pc2UiLCAiZGVsYXkiLCAiaW50ZXJ2YWwiLCAibWVyZ2UiLCAic291cmNlcyIsICJzdWJzIiwgImNyZWF0ZU1lc3NhZ2VJZCIsICJtYWtlSW52b2tlciIsICJtYWtlV29ya2VySW52b2tlciIsICJ3b3JrZXIiLCAibWFrZU1lc3NhZ2VQb3J0SW52b2tlciIsICJtYWtlQnJvYWRjYXN0SW52b2tlciIsICJuYW1lIiwgIm1ha2VXZWJTb2NrZXRJbnZva2VyIiwgInByb3RvY29scyIsICJtYWtlQ2hyb21lUnVudGltZUludm9rZXIiLCAibWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyIiwgIm1ha2VTZXJ2aWNlV29ya2VySG9zdEludm9rZXIiLCAibWFrZVNlbGZJbnZva2VyIiwgImNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsIiwgImluYm91bmQiLCAid2hlbiIsICJldmVudE5hbWUiLCAiT2JzZXJ2YWJsZUZhY3RvcnkiLCAiZGV0ZWN0Q29udGV4dFR5cGUiLCAic2VydmljZVdvcmtlclNjb3BlIiwgInNoYXJlZFdvcmtlclNjb3BlIiwgImRlZGljYXRlZFdvcmtlclNjb3BlIiwgImRldGVjdFRyYW5zcG9ydFR5cGUiLCAiZGV0ZWN0ZWQiLCAiZGV0ZWN0SW5jb21pbmdDb250ZXh0VHlwZSIsICJEZWZhdWx0UmVmbGVjdCIsICJwcm9wIiwgInRoaXNBcmciLCAiYXJncyIsICJwcm90byIsICJSZXF1ZXN0b3IiLCAiY29uZmlnIiwgImNyZWF0ZVVuaWZpZWRDaGFubmVsIiwgInRhcmdldENoYW5uZWwiLCAiYWN0aW9uIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAiUmVzcG9uZGVyIiwgIm9iaiIsICJCaWRpcmVjdGlvbmFsSW52b2tlciIsICJjcmVhdGVSZXF1ZXN0b3IiLCAiY3JlYXRlUmVzcG9uZGVyIiwgImNyZWF0ZUludm9rZXIiLCAic2V0dXBJbnZva2VyIiwgImF1dG9JbnZva2VyIiwgImludm9rZXIiLCAiUFJPWFlfTUFSS0VSIiwgIlBST1hZX0lOVEVSTkFMUyIsICJSZW1vdGVQcm94eUhhbmRsZXIiLCAiX2ludm9rZXIiLCAicmVjZWl2ZXIiLCAicHJvcFN0ciIsICIkcmVxdWVzdEhhbmRsZXIiLCAiJGRlc2NyaXB0b3IiLCAiY2hpbGRQYXRoIiwgImNoaWxkUHJveHkiLCAiY3JlYXRlUmVtb3RlUHJveHkiLCAibmV3VGFyZ2V0IiwgIkRpc3BhdGNoUHJveHlIYW5kbGVyIiwgIl9kaXNwYXRjaCIsICJ3cmFwRGVzY3JpcHRvciIsICJkZXNjcmlwdG9yIiwgImNhY2hlZCIsICJkZXNjTWFwIiwgInByb3h5IiwgIndyYXBNYXAiLCAiaXNSZW1vdGVQcm94eSIsICJnZXRQcm94eURlc2NyaXB0b3IiLCAiZ2V0UHJveHlJbnRlcm5hbHMiLCAiaW50ZXJuYWxzIiwgImNyZWF0ZUV4cG9zZUhhbmRsZXIiLCAicmVmbGVjdCIsICJjcmVhdGVPYmplY3RIYW5kbGVyIiwgImNyZWF0ZVNlbmRlclByb3h5IiwgIlByb3h5QnVpbGRlciIsICJlbmFibGVkIiwgInByb3h5QnVpbGRlciIsICJtYWtlUmVxdWVzdFByb3h5IiwgImNyZWF0ZUNvbm5lY3Rpb25LZXkiLCAicGFyYW1zIiwgInF1ZXJ5Q29ubmVjdGlvbnMiLCAiY29ubmVjdGlvbnMiLCAicXVlcnkiLCAiaW5jbHVkZUNsb3NlZCIsICJkZXNpcmVkU3RhdHVzIiwgImNvbm5lY3Rpb24iLCAiYSIsICJiIiwgIkNvbm5lY3Rpb25SZWdpc3RyeSIsICJfY3JlYXRlSWQiLCAiX2VtaXRFdmVudCIsICJrZXkiLCAiZXhpc3RpbmciLCAicGF5bG9hZCIsICJVbmlmaWVkQ2hhbm5lbCIsICJjZmciLCAidHJhbnNwb3J0VHlwZSIsICJiaW5kaW5nIiwgInNvdXJjZUNoYW5uZWwiLCAid3JpdGVCeVBhdGgiLCAiZW50cmllcyIsICJpZCIsICJyZXNvbHZlcnMiLCAidGltZW91dCIsICJtb2R1bGVOYW1lIiwgImV2ZW50VHlwZSIsICJzZW50IiwgInRhcmdldHMiLCAidG9UcmFuc2ZlciIsICJuZXdQYXRoIiwgImV4ZWN1dGVBY3Rpb24iLCAicmF3UmVzdWx0IiwgImNvcmVSZXNwb25zZSIsICJidWlsZFJlc3BvbnNlIiwgInJlc3BvbnNlIiwgInJlbW90ZUNoYW5uZWwiLCAic2lnbmFsVHlwZSIsICJzZW5kZXJNZXRhIiwgInNldHVwVW5pZmllZENoYW5uZWwiLCAiY3JlYXRlVW5pZmllZENoYW5uZWxQYWlyIiwgIm5hbWUxIiwgIm5hbWUyIiwgIm1jIiwgIkNIQU5ORUxfUkVHSVNUUlkiLCAiZ2V0VW5pZmllZENoYW5uZWwiLCAiZ2V0VW5pZmllZENoYW5uZWxOYW1lcyIsICJjbG9zZVVuaWZpZWRDaGFubmVsIiwgIldPUktFUl9DSEFOTkVMIiwgImdldFdvcmtlckNoYW5uZWwiLCAiY29udGV4dFR5cGUiLCAiZXhwb3NlRnJvbVVuaWZpZWQiLCAicmVtb3RlRnJvbVVuaWZpZWQiLCAid3JhcENoYW5uZWwiLCAiY29ubmVjdENoYW5uZWwiLCAiaG9zdCIsICJ3cmFwT2JzZXJ2YWJsZUNoYW5uZWwiLCAiY2hhbm5lbE9icyIsICJtYWtlT2JzZXJ2YWJsZVJlcXVlc3RQcm94eSIsICJjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCIsICJUUyIsICJUcmFuc2ZlcmFibGUiLCAiRSIsICJpc1NlcnZpY2VXb3JrZXJDb250ZXh0IiwgIlNXR1MiLCAiaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0IiwgImRldGVjdEV4ZWN1dGlvbkNvbnRleHQiLCAic3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzIiwgImdldFdvcmtlclJlc29sdmVCYXNlVXJsIiwgImhyZWYiLCAicmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYiLCAic3BlYyIsICJiYXNlIiwgIm5vcm1hbGl6ZWQiLCAiUmVtb3RlQ2hhbm5lbHMiLCAiU0VMRl9DSEFOTkVMIiwgIkNIQU5ORUxfTUFQIiwgImlzUmVmbGVjdEFjdGlvbiQxIiwgImxvYWRXb3JrZXIiLCAiV1giLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciIsICJDaGFubmVsSGFuZGxlciIsICJicm9hZGNhc3QiLCAidG9DaGFubmVsIiwgInJlcXVlc3QiLCAicmVzcG9uc2VGbiIsICJpbml0Q2hhbm5lbEhhbmRsZXIiLCAiJGNoYW5uZWwiLCAiY3JlYXRlSG9zdENoYW5uZWwiLCAiY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwiLCAiJGhvc3QiLCAiJGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsIiwgImhhbmRNYXAiLCAiUkVBRCIsICJvYmplY3RUb1JlZiIsICJyZWdpc3RlcmVkSW5QYXRoIiwgIm5vcm1hbGl6ZVJlZiIsICJ1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5IiwgInVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUiLCAic3RvcmVkRGF0YSIsICJ0cmF2ZXJzZUJ5UGF0aCIsICIkZGVzYyIsICJyZWFkQnlQYXRoIiwgInJvb3QiLCAicmVtb3ZlQnlQYXRoIiwgInJlbW92ZUJ5RGF0YSIsICJoYXNOb1BhdGgiLCAiaXNPYmplY3QiLCAiZGVmYXVsdFJlZmxlY3QiLCAiY3R4IiwgImdvdCIsICJub3JtYWxpemVkVmFsdWUiLCAibm9ybWFsaXplZEFyZ3MiLCAiY2FuQmVSZXR1cm4iLCAiZmluYWxQYXRoIiwgImN0eEtleSIsICJlbCIsICJwYXJlbnQiLCAiY3VycmVudCIsICJpIiwgImNhbGxBcmdzIiwgImN0b3JBcmdzIiwgIkNoYW5uZWxDb25uZWN0aW9uIiwgIl9uYW1lIiwgIl90cmFuc3BvcnRUeXBlIiwgImZyb21DaGFubmVsIiwgIm0iLCAib3JpZ2luYWwiLCAiciIsICJzdGF0ZSIsICJDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uUG9vbCIsICJnZXRDb25uZWN0aW9uIiwgImdldEhvc3RDb25uZWN0aW9uIiwgIlRyYW5zcG9ydEFkYXB0ZXIiLCAiX29wdGlvbnMiLCAiY2FsbGJhY2siLCAiV29ya2VyVHJhbnNwb3J0IiwgIl93b3JrZXJTb3VyY2UiLCAiTWVzc2FnZVBvcnRUcmFuc3BvcnQiLCAiX3BvcnQiLCAiQnJvYWRjYXN0Q2hhbm5lbFRyYW5zcG9ydCIsICJfYmNOYW1lIiwgImlzTmV3IiwgIldlYlNvY2tldFRyYW5zcG9ydCIsICJfdXJsIiwgIl9wcm90b2NvbHMiLCAiQ2hyb21lUnVudGltZVRyYW5zcG9ydCIsICJDaHJvbWVUYWJzVHJhbnNwb3J0IiwgIl90YWJJZCIsICJDaHJvbWVQb3J0VHJhbnNwb3J0IiwgIl9wb3J0TmFtZSIsICJDaHJvbWVFeHRlcm5hbFRyYW5zcG9ydCIsICJfZXh0ZXJuYWxJZCIsICJTZXJ2aWNlV29ya2VyVHJhbnNwb3J0IiwgIl9pc0hvc3QiLCAiU2VsZlRyYW5zcG9ydCIsICJUcmFuc3BvcnRGYWN0b3J5IiwgImJjTmFtZSIsICJpc0hvc3QiLCAiY3JlYXRlQ29ubmVjdGlvbk9ic2VydmVyIiwgInRyYW5zcG9ydHMiLCAic3ViamVjdCIsICJjb25uIiwgIkRCX05BTUUiLCAiREJfVkVSU0lPTiIsICJTVE9SRVMiLCAiQ2hhbm5lbFN0b3JhZ2UiLCAiZGIiLCAibWVzc2FnZXNTdG9yZSIsICJtYWlsYm94U3RvcmUiLCAicGVuZGluZ1N0b3JlIiwgImV4Y2hhbmdlU3RvcmUiLCAic3RvcmVkTWVzc2FnZSIsICJ0eCIsICJzdG9yZSIsICJpbmRleCIsICJyZXN1bHRzIiwgImN1cnNvciIsICJtZXNzYWdlSWQiLCAic3RhdHVzIiwgIm1lc3NhZ2VzIiwgInN0YXRzIiwgImRlbGV0ZWRDb3VudCIsICJvcGVyYXRpb24iLCAicGVuZGluZyIsICJvcGVyYXRpb25JZCIsICJwb2xsSW50ZXJ2YWwiLCAic3RhcnRUaW1lIiwgInJlY29yZCIsICJnZXRSZXF1ZXN0IiwgIkNoYW5uZWxUcmFuc2FjdGlvbiIsICJvcGVyYXRpb25zIiwgInN0b3JlTmFtZXMiLCAiZ2V0UmVxIiwgIm1zZ1JlcXVlc3QiLCAibWFpbFJlcXVlc3QiLCAiX3N0b3JhZ2UiLCAidXBkYXRlcyIsICJfc3RvcmFnZUluc3RhbmNlcyIsICJnZXRDaGFubmVsU3RvcmFnZSIsICJjbG9zZUFsbFN0b3JhZ2UiLCAic3RvcmFnZSIsICJ3b3JrZXJCYXNlIiwgIndvcmtlckNvZGUiLCAiUmVtb3RlQ2hhbm5lbEhlbHBlciQxIiwgIl9jaGFubmVsIiwgIl9jb250ZXh0IiwgIm5vcm1hbGl6ZWRQYXRoIiwgIm5vcm1hbGl6ZWRBY3Rpb24iLCAiaXNSZWZsZWN0QWN0aW9uIiwgIkNoYW5uZWxIYW5kbGVyJDEiLCAibm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyIsICJnZXREeW5hbWljVHJhbnNwb3J0VHlwZSIsICJDaGFubmVsQ29udGV4dCIsICJob3N0TmFtZSIsICJlbmRwb2ludCIsICJjb25uZWN0ZWRUYXJnZXRzIiwgIm5hbWVzIiwgImluaXRGbiIsICJ3b3JrZXJJbnN0YW5jZSIsICJsb2FkV29ya2VyJDEiLCAicmVhZHkiLCAiYnJvYWRjYXN0TmFtZSIsICJiYyIsICJzZWxmVGFyZ2V0IiwgImhhbmRsZXIxIiwgImhhbmRsZXIyIiwgInJlYWR5MSIsICJyZWFkeTIiLCAiY2hhbm5lbDEiLCAiY2hhbm5lbDIiLCAibXNnQ2hhbm5lbCIsICJpbmZvIiwgImRpcmVjdGlvbiIsICJtYXBwZWRUcmFuc3BvcnRUeXBlIiwgInVuaWZpZWQiLCAic3Vic2NyaXB0aW9uIiwgImlzVHJhbnNwb3J0QmluZGluZyIsICJuYXRpdmVUYXJnZXQiLCAiZWZmZWN0aXZlVGFyZ2V0IiwgIkNPTlRFWFRfUkVHSVNUUlkiLCAiREVGQVVMVF9DT05URVhUIiwgImdldERlZmF1bHRDb250ZXh0IiwgImNyZWF0ZUNoYW5uZWxDb250ZXh0IiwgImdldE9yQ3JlYXRlQ29udGV4dCIsICJnZXRDb250ZXh0IiwgImRlbGV0ZUNvbnRleHQiLCAiZ2V0Q29udGV4dE5hbWVzIiwgImNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0IiwgImNoYW5uZWxOYW1lcyIsICJjb250ZXh0T3B0aW9ucyIsICJjb250ZXh0IiwgImltcG9ydE1vZHVsZUluQ29udGV4dCIsICJhZGRXb3JrZXJDaGFubmVsIiwgImFkZFBvcnRDaGFubmVsIiwgImFkZEJyb2FkY2FzdENoYW5uZWwiLCAiYWRkU2VsZkNoYW5uZWxUb0RlZmF1bHQiLCAiZGVmZXJDaGFubmVsIiwgImluaXREZWZlcnJlZENoYW5uZWwiLCAiZ2V0Q2hhbm5lbEZyb21EZWZhdWx0IiwgImNyZWF0ZURlZmF1bHRDaGFubmVsUGFpciIsICJUcmFuc3BvcnRPYnNlcnZhYmxlIiwgImZpcnN0IiwgIldvcmtlck9ic2VydmFibGUiLCAiX3dvcmtlciIsICJNZXNzYWdlUG9ydE9ic2VydmFibGUiLCAiQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUiLCAiV2ViU29ja2V0T2JzZXJ2YWJsZSIsICJjb2RlIiwgInJlYXNvbiIsICJDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSQxIiwgIkNocm9tZVRhYnNPYnNlcnZhYmxlJDEiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUkMSIsICJTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSIsICJTZXJ2aWNlV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2VsZk9ic2VydmFibGUiLCAiVHJhbnNwb3J0T2JzZXJ2YWJsZUZhY3RvcnkiLCAidyIsICJjaCIsICJjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCQxIiwgIm91dGJvdW5kIiwgIldvcmtlckNvbnRleHQiLCAiY2xvc2VkIiwgIldPUktFUl9DT05URVhUIiwgImdldFdvcmtlckNvbnRleHQiLCAiaW5pdFdvcmtlckNvbnRleHQiLCAib25Xb3JrZXJDb25uZWN0aW9uIiwgIm9uV29ya2VyQ2hhbm5lbENyZWF0ZWQiLCAiV09SS0VSX1JFU1BPTkRFUiIsICJXT1JLRVJfSU5WT0tFUiIsICJnZXRXb3JrZXJSZXNwb25kZXIiLCAiZ2V0V29ya2VySW52b2tlciIsICJleHBvc2VGcm9tV29ya2VyIiwgIm9uV29ya2VySW52b2NhdGlvbiIsICJjcmVhdGVIb3N0UHJveHkiLCAiaG9zdENoYW5uZWwiLCAiaW1wb3J0SW5Ib3N0IiwgIkJhc2VDaHJvbWVPYnNlcnZhYmxlIiwgIkNocm9tZVJ1bnRpbWVPYnNlcnZhYmxlIiwgIl9oYW5kbGVyIiwgIl9zZW5kZXIiLCAiX2ZyYW1lSWQiLCAiQ2hyb21lVGFic09ic2VydmFibGUiLCAiQ2hyb21lUG9ydE9ic2VydmFibGUiLCAiQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlIiwgIl9leHRlbnNpb25JZCIsICJjcmVhdGVDaHJvbWVSZXF1ZXN0SGFuZGxlciIsICJoYW5kbGVycyIsICJlcnJvciIsICJDaHJvbWVPYnNlcnZhYmxlRmFjdG9yeSIsICJleHRlbnNpb25JZCIsICJTb2NrZXRJT09ic2VydmFibGUiLCAiX3NvY2tldCIsICJhY2siLCAib25Db25uZWN0IiwgIm9uRGlzY29ubmVjdCIsICJTb2NrZXRJT1Jvb21PYnNlcnZhYmxlIiwgIl9wYXJlbnQiLCAiX3Jvb21OYW1lIiwgImNyZWF0ZVNvY2tldFJlcXVlc3RIYW5kbGVyIiwgIlNvY2tldElPT2JzZXJ2YWJsZUZhY3RvcnkiLCAicm9vbU5hbWUiLCAiY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSIsICJTaGFyZWRXb3JrZXJDbGllbnQiLCAiX3NjcmlwdFVybCIsICJTaGFyZWRXb3JrZXJIb3N0IiwgInBvcnRJZCIsICJyZWFsUG9ydElkIiwgImVudHJ5IiwgImV4Y2x1ZGVQb3J0SWQiLCAiY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSIsICJzY3JpcHRVcmwiLCAiY3JlYXRlU2hhcmVkV29ya2VySG9zdE9ic2VydmFibGUiLCAiU2hhcmVkV29ya2VyT2JzZXJ2YWJsZUZhY3RvcnkiLCAiY2JvckVuY29kZXIiLCAiZ2V0Q0JPUkVuY29kZXIiLCAiY2JvcngiLCAicmVwbGFjZXIiLCAicmV2aXZlciIsICJfa2V5IiwgIlR5cGVkQXJyYXlDdG9yIiwgIkhFQURFUl9TSVpFIiwgIkxPQ0tfT0ZGU0VUIiwgIlNFUV9PRkZTRVQiLCAiU0laRV9PRkZTRVQiLCAiRkxBR1NfT0ZGU0VUIiwgIlJFQURZX09GRlNFVCIsICJBQ0tfT0ZGU0VUIiwgIkRBVEFfT0ZGU0VUIiwgIkZMQUdfSEFTX1RSQU5TRkVSIiwgIkZMQUdfQ09NUFJFU1NFRCIsICJGTEFHX1JFU1BPTlNFIiwgIkF0b21pY3NCdWZmZXIiLCAiYnVmZmVyT3JTaXplIiwgIl9jb25maWciLCAiZmxhZ3MiLCAic2l6ZSIsICJzZXEiLCAiZXhwZWN0ZWRTZXEiLCAic3RhcnQiLCAiQXRvbWljc1RyYW5zcG9ydCIsICJzZW5kQnVmZmVyIiwgInJlY3ZCdWZmZXIiLCAiZW5jb2RlZCIsICJjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIiLCAiYnVmZmVyQSIsICJidWZmZXJCIiwgImNyZWF0ZVdvcmtlckF0b21pY3NUcmFuc3BvcnQiLCAiQXRvbWljc1JpbmdCdWZmZXIiLCAiYnVmZmVyT3JDb25maWciLCAidG90YWxTaXplIiwgIndyaXRlSWR4IiwgInJlYWRJZHgiLCAic2xvdCIsICJBdG9taWNzVHJhbnNwb3J0RmFjdG9yeSIsICJyZWN2IiwgInNpemVPckJ1ZmZlciIsICJERUZBVUxUX0lDRV9TRVJWRVJTIiwgIlJUQ1BlZXJUcmFuc3BvcnQiLCAicmVtb3RlSWQiLCAib2ZmZXIiLCAiYW5zd2VyIiwgImJpbmFyeSIsICJwZWVySWQiLCAiZGF0YUNoYW5uZWxMYWJlbCIsICJqc29uIiwgImJ1ZmZlciIsICJSVENQZWVyTWFuYWdlciIsICJwZWVyIiwgImNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZyIsICJSVENUcmFuc3BvcnRGYWN0b3J5IiwgIlBvcnRUcmFuc3BvcnQiLCAiY3JlYXRlQ2hhbm5lbFBhaXIiLCAiY3JlYXRlRnJvbVBvcnQiLCAiUG9ydFBvb2wiLCAiX2RlZmF1bHRDb25maWciLCAiV2luZG93UG9ydENvbm5lY3RvciIsICJfdGFyZ2V0IiwgImxvY2FsIiwgInJlbW90ZSIsICJjcmVhdGVQb3J0UHJveHkiLCAidGFyZ2V0UGF0aCIsICJleHBvc2VPdmVyUG9ydCIsICJQb3J0VHJhbnNwb3J0RmFjdG9yeSIsICJUcmFuc2ZlcmFibGVTdG9yYWdlIiwgImlkeCIsICJidWZmZXJzIiwgImJ1ZiIsICJhcnJheSIsICJza2lwcGVkIiwgIm9mZnNldCIsICJsaW1pdCIsICJleHBpcmVkIiwgIk1lc3NhZ2VRdWV1ZVN0b3JhZ2UiLCAiZGJOYW1lIiwgInF1ZXVlZE1lc3NhZ2UiLCAiVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnkiLCAiU2VydmljZVdvcmtlckhvc3QiLCAiY2xpZW50SW5mbyIsICJjbGllbnQiLCAic3Vic2NyaWJlcnMiLCAiZGVsaXZlcmVkQ291bnQiLCAic3RvcmVkIiwgIm1lc3NhZ2VTdWIiLCAiYWxsQ2xpZW50cyIsICJhY3RpdmVJZHMiLCAiU2VydmljZVdvcmtlckNsaWVudCIsICJjcmVhdGVTZXJ2aWNlV29ya2VySG9zdCIsICJjcmVhdGVTZXJ2aWNlV29ya2VyQ2xpZW50IiwgImJpbmRTZXJ2aWNlV29ya2VySG9zdEJyaWRnZSIsICJzY29wZSIsICJBYnN0cmFjdFRyYW5zcG9ydCIsICJfdHlwZSIsICJOYXRpdmVUcmFuc3BvcnQiLCAiY3JlYXRlVHJhbnNwb3J0IiwgImJhc2VDb25maWciLCAid3MiLCAibyIsICJicmlkZ2UiLCAibWFuYWdlciIsICJUcmFuc3BvcnRSZWdpc3RyeSIsICJfcmVnaXN0cnkiLCAiZ2V0VHJhbnNwb3J0UmVnaXN0cnkiLCAiVW5pZmllZFRyYW5zcG9ydEZhY3RvcnkiLCAiUXVldWVkV29ya2VyQ2hhbm5lbCIsICJvbkNoYW5uZWxSZWFkeSIsICJ1bmRlcmx5aW5nQ2hhbm5lbCIsICJtZXRob2QiLCAicXVldWVkUmVxdWVzdCIsICJxdWV1ZUNvcHkiLCAiZ2V0Q3VycmVudFRhYklkIiwgInRhYnMiLCAiZ2V0VmlzaWJsZVRhYklkIiwgInZpc2libGVUYWIiLCAidGFiIiwgInJlZ2lzdGVyV29ya2VyQVBJIiwgImFwaSIsICJjaGFubmVsSGFuZGxlciIsICJtZXRob2ROYW1lIiwgIk9wdGltaXplZFdvcmtlckNoYW5uZWwiLCAiZW52ZWxvcGUiLCAiY2h1bmsiLCAiYmF0Y2hFbnZlbG9wZSIsICJNZXNzYWdlUXVldWUiLCAiZGVzdGluYXRpb24iLCAicmV0cnlDb3VudCIsICJleHBpcmVkSWRzIiwgImJ5UHJpb3JpdHkiLCAiYnlEZXN0aW5hdGlvbiIsICJmaWx0ZXJlZCIsICJpbnN0YW5jZXMiLCAiZ2V0TWVzc2FnZVF1ZXVlIiwgImNyZWF0ZU1lc3NhZ2VRdWV1ZSIsICJydW50aW1lTGlzdGVuZXJSZWdpc3RyeSIsICJydW50aW1lTGlzdGVuZXJJbnN0YWxsZWQiLCAiZW5zdXJlUnVudGltZUxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJvdXQiLCAiQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCIsICJzZXQiLCAibWVzc2FnZVdpdGhDaGFubmVsIiwgIkNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgIndyYXBwZWQiLCAidGFyZ2V0VGFiSWQiLCAidGFyZ2V0VGFicyIsICJwcm9taXNlcyIsICJDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25DaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNNZXNzYWdpbmdDaGFubmVsIiwgImluaXRNYWluQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVNlcnZpY2VXb3JrZXJDaGFubmVsIiwgImNyZWF0ZVdvcmtlckNoYW5uZWwiLCAiY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCIsICJiYXNlQ2hhbm5lbCIsICJjcmVhdGVRdWV1ZWRPcHRpbWl6ZWRXb3JrZXJDaGFubmVsIiwgIm9wdGltaXplZENoYW5uZWwiLCAiUFVSUE9TRVMiLCAiREVGQVVMVF9QVVJQT1NFIiwgImFzU3RyaW5nIiwgIm5vcm1hbGl6ZVBhdGgiLCAibm9ybWFsaXplQXJncyIsICJub3JtYWxpemVUcmFuc2ZlciIsICJub3JtYWxpemVQdXJwb3NlIiwgInB1cnBvc2UiLCAiaW5wdXQiLCAiZGVkdXBlZCIsICJpbmZlclR5cGUiLCAiZXhwbGljaXQiLCAiaW5mZXJPcGVyYXRpb24iLCAicmVzb2x2ZWRUeXBlIiwgImluZmVyUHJvdG9jb2wiLCAicHJvdG9jb2wiLCAicmFuZG9tSWQiLCAiY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSIsICJ0aW1lc3RhbXAiLCAiZHN0Q2hhbm5lbCIsICJ1dWlkIiwgIm1ldGFkYXRhIiwgImlzUHJvdG9jb2xFbnZlbG9wZSIsICJjYW5kaWRhdGUiLCAibm9ybWFsaXplUHJvdG9jb2xFbnZlbG9wZSIsICJQcm90b2NvbFJlcGxheUd1YXJkIiwgIndpbmRvd01zIiwgInByZXZpb3VzIiwgInRzIiwgIlBlbmRpbmdNZXNzYWdlU3RvcmUiLCAicGFyc2VkIiwgImtlZXAiLCAiVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIiLCAiZnVsbE1lc3NhZ2UiLCAidmlld0hhc2giLCAiY29uZmlncyIsICJjaGFubmVsS2V5IiwgImRlZmVycmVkIiwgImluaXRQcm9taXNlcyIsICJ3b3JrZXJOYW1lIiwgInBpcGVsaW5lTmFtZSIsICJwaXBlbGluZSIsICJjdXJyZW50TWVzc2FnZSIsICJzdGFnZSIsICJzdGFnZVRpbWVvdXQiLCAicmV0cmllcyIsICJhdHRlbXB0IiwgInF1ZXVlZE1lc3NhZ2VzIiwgImRhdGFBc01lc3NhZ2UiLCAiY29tcG9uZW50SWQiLCAiZGVzdCIsICJtYXBwaW5ncyIsICJmYWxsYmFja1NvdXJjZSIsICJyZXMiLCAicmVqIiwgImRlZmF1bHRJbnN0YW5jZSIsICJnZXRVbmlmaWVkTWVzc2FnaW5nIiwgImNyZWF0ZVVuaWZpZWRNZXNzYWdpbmciLCAicmVzZXRVbmlmaWVkTWVzc2FnaW5nIiwgInNlbmRNZXNzYWdlIiwgInJlZ2lzdGVySGFuZGxlciIsICJnZXRCcm9hZGNhc3RDaGFubmVsIiwgIlNlcnZpY2VDaGFubmVsTWFuYWdlciIsICJjaGFubmVsSWQiLCAicmVzb2x2ZVJlYWR5IiwgInJlYWR5UHJvbWlzZSIsICJjcmVhdGVTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIiLCAiZGVmYXVsdE1hbmFnZXIiLCAiZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgInJlc2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgIm1ha2VDaGFubmVsTWVzc2FnZUhhbmRsZXIiLCAiQ2hhbm5lbE1lc3NhZ2VPYnNlcnZhYmxlIiwgImNyZWF0ZUNoYW5uZWxSZXF1ZXN0SGFuZGxlciIsICJPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIiLCAiX3RhcmdldENoYW5uZWwiLCAic3luYyIsICJpbXBvcnRNb2R1bGVJbkNoYW5uZWwiLCAiY3JlYXRlQ29udGV4dCIsICJnZXRTaGFyZWRDb250ZXh0IiwgImNyZWF0ZU11bHRpQ2hhbm5lbCIsICJpbXBvcnRJc29sYXRlZE1vZHVsZSIsICJjb25uZWN0VG9DaGFubmVsQXNNb2R1bGUiLCAiY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwiXQp9Cg==
8299
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidW5pZm9ybS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgTU9VTlRFRF9GU19FVkVOVCwgTU9VTlRFRF9GU19IVFRQX1BBVEgsIE1PVU5URURfRlNfV1NfUEFUSCwgUHJvbWlzZWQsIFVVSUR2NCwgY3JlYXRlTW91bnRlZEZzSWQsIGRlZXBPcGVyYXRlQW5kQ2xvbmUsIGlzQ2FuSnVzdFJldHVybiwgaXNDYW5UcmFuc2ZlciwgaXNNb3VudGVkRnNSZXF1ZXN0LCBpc01vdW50ZWRGc1Jlc3BvbnNlLCBpc05vdENvbXBsZXhBcnJheSwgaXNQcmltaXRpdmUsIHBhcnNlTW91bnRlZEZzTWVzc2FnZSB9IGZyb20gXCJAZmVzdC1saWIvY29yZVwiO1xuXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdHlwZXMvSW50ZXJmYWNlLnRzXG52YXIgV1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihXU3RhdHVzKSB7XG5cdFdTdGF0dXNbXCJTVUNDRVNTXCJdID0gXCJzdWNjZXNzXCI7XG5cdFdTdGF0dXNbXCJFUlJPUlwiXSA9IFwiZXJyb3JcIjtcblx0cmV0dXJuIFdTdGF0dXM7XG59KHt9KTtcbnZhciBXVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihXVHlwZSkge1xuXHRXVHlwZVtcIlBSSU1JVElWRVwiXSA9IFwicHJpbWl0aXZlXCI7XG5cdFdUeXBlW1wiTlVNQkVSXCJdID0gXCJudW1iZXJcIjtcblx0V1R5cGVbXCJTVFJJTkdcIl0gPSBcInN0cmluZ1wiO1xuXHRXVHlwZVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcblx0V1R5cGVbXCJCSUdJTlRcIl0gPSBcImJpZ2ludFwiO1xuXHRXVHlwZVtcIlVOREVGSU5FRFwiXSA9IFwidW5kZWZpbmVkXCI7XG5cdFdUeXBlW1wiTlVMTFwiXSA9IFwibnVsbFwiO1xuXHRXVHlwZVtcIk9CSkVDVFwiXSA9IFwib2JqZWN0XCI7XG5cdFdUeXBlW1wiRlVOQ1RJT05cIl0gPSBcImZ1bmN0aW9uXCI7XG5cdFdUeXBlW1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG5cdFdUeXBlW1wiTUFQXCJdID0gXCJtYXBcIjtcblx0V1R5cGVbXCJTRVRcIl0gPSBcInNldFwiO1xuXHRXVHlwZVtcIlNZTUJPTFwiXSA9IFwic3ltYm9sXCI7XG5cdFdUeXBlW1wiV0VBS19SRUZcIl0gPSBcIndlYWtSZWZcIjtcblx0V1R5cGVbXCJQUk9NSVNFXCJdID0gXCJwcm9taXNlXCI7XG5cdFdUeXBlW1wiVU5LTk9XTlwiXSA9IFwidW5rbm93blwiO1xuXHRyZXR1cm4gV1R5cGU7XG59KHt9KTtcbnZhciBXUmVmbGVjdEFjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihXUmVmbGVjdEFjdGlvbikge1xuXHRXUmVmbGVjdEFjdGlvbltcIkdFVFwiXSA9IFwiZ2V0XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiU0VUXCJdID0gXCJzZXRcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJDQUxMXCJdID0gXCJjYWxsXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiQVBQTFlcIl0gPSBcImFwcGx5XCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiQ09OU1RSVUNUXCJdID0gXCJjb25zdHJ1Y3RcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJERUxFVEVcIl0gPSBcImRlbGV0ZVwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkRFTEVURV9QUk9QRVJUWVwiXSA9IFwiZGVsZXRlUHJvcGVydHlcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJIQVNcIl0gPSBcImhhc1wiO1xuXHRXUmVmbGVjdEFjdGlvbltcIk9XTl9LRVlTXCJdID0gXCJvd25LZXlzXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiR0VUX09XTl9QUk9QRVJUWV9ERVNDUklQVE9SXCJdID0gXCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJHRVRfUFJPUEVSVFlfREVTQ1JJUFRPUlwiXSA9IFwiZ2V0UHJvcGVydHlEZXNjcmlwdG9yXCI7XG5cdFdSZWZsZWN0QWN0aW9uW1wiR0VUX1BST1RPVFlQRV9PRlwiXSA9IFwiZ2V0UHJvdG90eXBlT2ZcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJTRVRfUFJPVE9UWVBFX09GXCJdID0gXCJzZXRQcm90b3R5cGVPZlwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIklTX0VYVEVOU0lCTEVcIl0gPSBcImlzRXh0ZW5zaWJsZVwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIlBSRVZFTlRfRVhURU5TSU9OU1wiXSA9IFwicHJldmVudEV4dGVuc2lvbnNcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJUUkFOU0ZFUlwiXSA9IFwidHJhbnNmZXJcIjtcblx0V1JlZmxlY3RBY3Rpb25bXCJJTVBPUlRcIl0gPSBcImltcG9ydFwiO1xuXHRXUmVmbGVjdEFjdGlvbltcIkRJU1BPU0VcIl0gPSBcImRpc3Bvc2VcIjtcblx0cmV0dXJuIFdSZWZsZWN0QWN0aW9uO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9jb3JlL1RyYW5zcG9ydENvcmUudHNcbnZhciBUUkFOU1BPUlRfVFlQRV9BTElBU0VTID0ge1xuXHRcIndzXCI6IFwid2Vic29ja2V0XCIsXG5cdFwic29ja2V0XCI6IFwid2Vic29ja2V0XCIsXG5cdFwic29ja2V0aW9cIjogXCJzb2NrZXQtaW9cIixcblx0XCJzZXJ2aWNlXCI6IFwic2VydmljZS13b3JrZXJcIixcblx0XCJzd1wiOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFwic2VydmljZS13b3JrZXItY2xpZW50XCI6IFwic2VydmljZS13b3JrZXJcIixcblx0XCJzZXJ2aWNlLXdvcmtlci1ob3N0XCI6IFwic2VydmljZS13b3JrZXJcIixcblx0XCJyaW5nLWJ1ZmZlclwiOiBcImF0b21pY3NcIlxufTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRyYW5zcG9ydFR5cGVBbGlhcyh0cmFuc3BvcnQpIHtcblx0Y29uc3QgcmF3ID0gU3RyaW5nKHRyYW5zcG9ydCA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblx0aWYgKCFyYXcpIHJldHVybiBcImludGVybmFsXCI7XG5cdHJldHVybiBUUkFOU1BPUlRfVFlQRV9BTElBU0VTW3Jhd10gPz8gcmF3O1xufVxuZnVuY3Rpb24gZGV0ZWN0VHJhbnNwb3J0VHlwZSQxKHRyYW5zcG9ydCkge1xuXHRpZiAodHlwZW9mIHRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIG5vcm1hbGl6ZVRyYW5zcG9ydFR5cGVBbGlhcyh0cmFuc3BvcnQpO1xuXHRpZiAodHlwZW9mIFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBXb3JrZXIpIHJldHVybiBcIndvcmtlclwiO1xuXHRpZiAodHlwZW9mIFNoYXJlZFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBTaGFyZWRXb3JrZXIpIHJldHVybiBcInNoYXJlZC13b3JrZXJcIjtcblx0aWYgKHR5cGVvZiBNZXNzYWdlUG9ydCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkgcmV0dXJuIFwibWVzc2FnZS1wb3J0XCI7XG5cdGlmICh0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBCcm9hZGNhc3RDaGFubmVsKSByZXR1cm4gXCJicm9hZGNhc3RcIjtcblx0aWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0KSByZXR1cm4gXCJ3ZWJzb2NrZXRcIjtcblx0aWYgKHR5cGVvZiBSVENEYXRhQ2hhbm5lbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBSVENEYXRhQ2hhbm5lbCkgcmV0dXJuIFwicnRjLWRhdGFcIjtcblx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0ICYmIHR5cGVvZiB0cmFuc3BvcnQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRyYW5zcG9ydC5wb3N0TWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiICYmIHRyYW5zcG9ydC5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyKSByZXR1cm4gXCJjaHJvbWUtcG9ydFwiO1xuXHRyZXR1cm4gXCJpbnRlcm5hbFwiO1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNwb3J0TWV0YSh0cmFuc3BvcnQpIHtcblx0Y29uc3QgdHlwZSA9IGRldGVjdFRyYW5zcG9ydFR5cGUkMSh0cmFuc3BvcnQpO1xuXHRyZXR1cm4ge1xuXHRcdHR5cGUsXG5cdFx0c3VwcG9ydHM6IHtcblx0XHRcdFwid29ya2VyXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IHRydWUsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdFwic2hhcmVkLXdvcmtlclwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdFwic2VydmljZS13b3JrZXJcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogdHJ1ZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImJyb2FkY2FzdFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogZmFsc2UsXG5cdFx0XHRcdGJyb2FkY2FzdDogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcIm1lc3NhZ2UtcG9ydFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0XCJ3ZWJzb2NrZXRcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdFwiY2hyb21lLXJ1bnRpbWVcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS10YWJzXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdFwiY2hyb21lLXBvcnRcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogZmFsc2UsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImNocm9tZS1leHRlcm5hbFwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiBmYWxzZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRcInNvY2tldC1pb1wiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiBmYWxzZSxcblx0XHRcdFx0YmluYXJ5OiB0cnVlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcInJ0Yy1kYXRhXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImF0b21pY3NcIjoge1xuXHRcdFx0XHR0cmFuc2ZlcjogZmFsc2UsXG5cdFx0XHRcdGJpbmFyeTogdHJ1ZSxcblx0XHRcdFx0YmlkaXJlY3Rpb25hbDogdHJ1ZSxcblx0XHRcdFx0YnJvYWRjYXN0OiBmYWxzZSxcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdFwic2VsZlwiOiB7XG5cdFx0XHRcdHRyYW5zZmVyOiB0cnVlLFxuXHRcdFx0XHRiaW5hcnk6IHRydWUsXG5cdFx0XHRcdGJpZGlyZWN0aW9uYWw6IHRydWUsXG5cdFx0XHRcdGJyb2FkY2FzdDogZmFsc2UsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImludGVybmFsXCI6IHtcblx0XHRcdFx0dHJhbnNmZXI6IGZhbHNlLFxuXHRcdFx0XHRiaW5hcnk6IGZhbHNlLFxuXHRcdFx0XHRiaWRpcmVjdGlvbmFsOiB0cnVlLFxuXHRcdFx0XHRicm9hZGNhc3Q6IGZhbHNlLFxuXHRcdFx0XHRwZXJzaXN0ZW50OiBmYWxzZVxuXHRcdFx0fVxuXHRcdH1bdHlwZV1cblx0fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChtc2csIHRyYW5zZmVyKSA9PiB7XG5cdFx0Y29uc3QgdHJhbnNmZXJhYmxlID0gdHJhbnNmZXIgPz8gbXNnPy50cmFuc2ZlcmFibGUgPz8gW107XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGU6IF8sIC4uLmRhdGEgfSA9IG1zZztcblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV29ya2VyKSB7XG5cdFx0XHR0cmFuc3BvcnQucG9zdE1lc3NhZ2UoZGF0YSwgeyB0cmFuc2ZlcjogdHJhbnNmZXJhYmxlIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIFNoYXJlZFdvcmtlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cmFuc3BvcnQgaW5zdGFuY2VvZiBTaGFyZWRXb3JrZXIpIHtcblx0XHRcdHRyYW5zcG9ydC5wb3J0LnBvc3RNZXNzYWdlKGRhdGEsIHsgdHJhbnNmZXI6IHRyYW5zZmVyYWJsZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIE1lc3NhZ2VQb3J0KSB7XG5cdFx0XHR0cmFuc3BvcnQucG9zdE1lc3NhZ2UoZGF0YSwgeyB0cmFuc2ZlcjogdHJhbnNmZXJhYmxlIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkge1xuXHRcdFx0dHJhbnNwb3J0LnBvc3RNZXNzYWdlKGRhdGEpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgV2ViU29ja2V0KSB7XG5cdFx0XHRpZiAodHJhbnNwb3J0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XG5cdFx0XHRcdGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB0cmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHRcdFx0ZWxzZSB0cmFuc3BvcnQuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXJ1bnRpbWVcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY2hyb21lLnJ1bnRpbWUpIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKGRhdGEpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS10YWJzXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS50YWJzKSB7XG5cdFx0XHRcdGNvbnN0IHRhYklkID0gb3B0aW9ucz8udGFiSWQgPz8gbXNnPy5fdGFiSWQ7XG5cdFx0XHRcdGlmICh0YWJJZCAhPSBudWxsKSBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWJJZCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXBvcnRcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY2hyb21lLnJ1bnRpbWUpIHtcblx0XHRcdFx0Y29uc3QgcG9ydE5hbWUgPSBvcHRpb25zPy5wb3J0TmFtZSA/PyBtc2c/Ll9wb3J0TmFtZTtcblx0XHRcdFx0aWYgKHBvcnROYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGFiSWQgPSBvcHRpb25zPy50YWJJZCA/PyBtc2c/Ll90YWJJZDtcblx0XHRcdFx0XHQodGFiSWQgIT0gbnVsbCAmJiBjaHJvbWUudGFicz8uY29ubmVjdCA/IGNocm9tZS50YWJzLmNvbm5lY3QodGFiSWQsIHsgbmFtZTogcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogcG9ydE5hbWUgfSkpLnBvc3RNZXNzYWdlKGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLWV4dGVybmFsXCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsSWQgPSBvcHRpb25zPy5leHRlcm5hbElkID8/IG1zZz8uX2V4dGVybmFsSWQ7XG5cdFx0XHRcdGlmIChleHRlcm5hbElkKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShleHRlcm5hbElkLCBkYXRhKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIikge1xuXHRcdFx0aWYgKFwic2VydmljZVdvcmtlclwiIGluIG5hdmlnYXRvcikgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHkudGhlbigocmVnKSA9PiB7XG5cdFx0XHRcdHJlZy5hY3RpdmU/LnBvc3RNZXNzYWdlKGRhdGEsIHRyYW5zZmVyYWJsZSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIpIHtcblx0XHRcdGlmICh0eXBlb2YgY2xpZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRjb25zdCBjbGllbnRJZCA9IG9wdGlvbnM/LmNsaWVudElkID8/IG1zZz8uX2NsaWVudElkO1xuXHRcdFx0XHRpZiAoY2xpZW50SWQpIGNsaWVudHMuZ2V0KGNsaWVudElkKS50aGVuKChjKSA9PiBjPy5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcmFibGUpKTtcblx0XHRcdFx0ZWxzZSBjbGllbnRzLm1hdGNoQWxsKHsgaW5jbHVkZVVuY29udHJvbGxlZDogdHJ1ZSB9KS50aGVuKChhbGwpID0+IHtcblx0XHRcdFx0XHRhbGwuZm9yRWFjaCgoYykgPT4gYy5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcmFibGUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0cmFuc3BvcnQgPT09IFwic2VsZlwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJwb3N0TWVzc2FnZVwiIGluIHNlbGYpIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSwgeyB0cmFuc2ZlcjogdHJhbnNmZXJhYmxlIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRyYW5zcG9ydCwgb25NZXNzYWdlLCBvbkVycm9yLCBvbkNsb3NlLCBvcHRpb25zKSB7XG5cdGNvbnN0IG1zZ0hhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXZWJTb2NrZXQgJiYgdHlwZW9mIGUuZGF0YSA9PT0gXCJzdHJpbmdcIikgdHJ5IHtcblx0XHRcdG9uTWVzc2FnZShKU09OLnBhcnNlKGUuZGF0YSkpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0b25FcnJvcj8uKGVycik7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdlYlNvY2tldCAmJiBlLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgb25NZXNzYWdlKGUuZGF0YSk7XG5cdFx0ZWxzZSBvbk1lc3NhZ2UoZS5kYXRhKTtcblx0fTtcblx0Y29uc3QgZXJySGFuZGxlciA9IChlKSA9PiB7XG5cdFx0b25FcnJvcj8uKG5ldyBFcnJvcihlLm1lc3NhZ2UgPz8gXCJUcmFuc3BvcnQgZXJyb3JcIikpO1xuXHR9O1xuXHRjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiBvbkNsb3NlPy4oKTtcblx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIFdvcmtlcikge1xuXHRcdHRyYW5zcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0aWYgKHR5cGVvZiBTaGFyZWRXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdHJhbnNwb3J0IGluc3RhbmNlb2YgU2hhcmVkV29ya2VyKSB7XG5cdFx0dHJhbnNwb3J0LnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQucG9ydC5zdGFydCgpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRcdHRyYW5zcG9ydC5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucG9ydC5jbG9zZSgpO1xuXHRcdH07XG5cdH1cblx0aWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIE1lc3NhZ2VQb3J0KSB7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBCcm9hZGNhc3RDaGFubmVsKSB7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgaW5zdGFuY2VvZiBXZWJTb2NrZXQpIHtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0dHJhbnNwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR0cmFuc3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIGNsb3NlSGFuZGxlcik7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRyYW5zcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRcdHRyYW5zcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0XHR0cmFuc3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIGNsb3NlSGFuZGxlcik7XG5cdFx0XHRpZiAodHJhbnNwb3J0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB0cmFuc3BvcnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXJ1bnRpbWVcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0b25NZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0fVxuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwiY2hyb21lLXRhYnNcIikge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIGNocm9tZS5ydW50aW1lKSB7XG5cdFx0XHRjb25zdCB0YWJJZCA9IG9wdGlvbnM/LnRhYklkO1xuXHRcdFx0aWYgKHRhYklkICE9IG51bGwpIHJldHVybiBjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIodGFiSWQsIChtc2cpID0+IG9uTWVzc2FnZShtc2cpKTtcblx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4ge1xuXHRcdFx0XHRvbk1lc3NhZ2UobXNnKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR9XG5cdH1cblx0aWYgKHRyYW5zcG9ydCA9PT0gXCJjaHJvbWUtcG9ydFwiKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY2hyb21lLnJ1bnRpbWUpIHtcblx0XHRcdGNvbnN0IHBvcnROYW1lID0gb3B0aW9ucz8ucG9ydE5hbWU7XG5cdFx0XHRpZiAocG9ydE5hbWUpIHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IGNocm9tZS5ydW50aW1lLmNvbm5lY3QoeyBuYW1lOiBwb3J0TmFtZSB9KTtcblx0XHRcdFx0cG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIob25NZXNzYWdlKTtcblx0XHRcdFx0cG9ydC5vbkRpc2Nvbm5lY3QuYWRkTGlzdGVuZXIoY2xvc2VIYW5kbGVyKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHBvcnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcImNocm9tZS1leHRlcm5hbFwiKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY2hyb21lLnJ1bnRpbWU/Lm9uTWVzc2FnZUV4dGVybmFsKSB7XG5cdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0b25NZXNzYWdlKG1zZyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdH1cblx0fVxuXHRpZiAodHJhbnNwb3J0ID09PSBcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiKSB7XG5cdFx0aWYgKFwic2VydmljZVdvcmtlclwiIGluIG5hdmlnYXRvcikge1xuXHRcdFx0bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHRyZXR1cm4gKCkgPT4gbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0fVxuXHR9XG5cdGlmICh0cmFuc3BvcnQgPT09IFwic2VydmljZS13b3JrZXItaG9zdFwiIHx8IHRyYW5zcG9ydCA9PT0gXCJzZWxmXCIpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGNsaWVudElkID0gdHJhbnNwb3J0ID09PSBcInNlcnZpY2Utd29ya2VyLWhvc3RcIiA/IGUuc291cmNlPy5pZCA6IHZvaWQgMDtcblx0XHRcdG9uTWVzc2FnZShjbGllbnRJZCA/IHtcblx0XHRcdFx0Li4uZS5kYXRhLFxuXHRcdFx0XHRfY2xpZW50SWQ6IGNsaWVudElkXG5cdFx0XHR9IDogZS5kYXRhKTtcblx0XHR9O1xuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG5cdFx0cmV0dXJuICgpID0+IHNlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG5cdH1cblx0cmV0dXJuICgpID0+IHt9O1xufVxuZnVuY3Rpb24gY3JlYXRlQ2hyb21lTGlzdGVuZXIob25NZXNzYWdlLCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuICgpID0+IHt9O1xuXHRjb25zdCBsaXN0ZW5lciA9IChtZXNzYWdlLCBzZW5kZXIsIHNlbmRSZXNwb25zZSkgPT4gb25NZXNzYWdlKG1lc3NhZ2UsIHNlbmRSZXNwb25zZSwgc2VuZGVyKTtcblx0aWYgKG9wdGlvbnM/LmV4dGVybmFsICYmIGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsKSB7XG5cdFx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWwuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHJldHVybiAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdH1cblx0Y2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGxpc3RlbmVyKTtcblx0cmV0dXJuICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIodGFiSWQsIG9uTWVzc2FnZSkge1xuXHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybiAoKSA9PiB7fTtcblx0Y29uc3QgbGlzdGVuZXIgPSAobXNnLCBzZW5kZXIpID0+IHtcblx0XHRpZiAoc2VuZGVyLnRhYj8uaWQgPT09IHRhYklkKSBvbk1lc3NhZ2UobXNnLCBzZW5kZXIpO1xuXHR9O1xuXHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRyZXR1cm4gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdlYlNvY2tldFRyYW5zcG9ydCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuXHRsZXQgc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwsIG9wdGlvbnMucHJvdG9jb2xzKTtcblx0aWYgKG9wdGlvbnMuYmluYXJ5VHlwZSkgc29ja2V0LmJpbmFyeVR5cGUgPSBvcHRpb25zLmJpbmFyeVR5cGU7XG5cdGxldCByZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cdGxldCByZWNvbm5lY3RUaW1lciA9IG51bGw7XG5cdGNvbnN0IHNlbmQgPSAobXNnLCB0cmFuc2ZlcikgPT4ge1xuXHRcdGlmIChzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHJldHVybjtcblx0XHRpZiAobXNnIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KG1zZykpIHNvY2tldC5zZW5kKG1zZyk7XG5cdFx0ZWxzZSBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShtc2cpKTtcblx0fTtcblx0Y29uc3QgcmVjb25uZWN0ID0gKCkgPT4ge1xuXHRcdGlmIChyZWNvbm5lY3RBdHRlbXB0cyA+PSAob3B0aW9ucy5tYXhSZWNvbm5lY3RBdHRlbXB0cyA/PyA1KSkgcmV0dXJuO1xuXHRcdHJlY29ubmVjdEF0dGVtcHRzKys7XG5cdFx0c29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwsIG9wdGlvbnMucHJvdG9jb2xzKTtcblx0XHRpZiAob3B0aW9ucy5iaW5hcnlUeXBlKSBzb2NrZXQuYmluYXJ5VHlwZSA9IG9wdGlvbnMuYmluYXJ5VHlwZTtcblx0fTtcblx0Y29uc3QgY2xvc2UgPSAoKSA9PiB7XG5cdFx0aWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuXHRcdHNvY2tldC5jbG9zZSgpO1xuXHR9O1xuXHRpZiAob3B0aW9ucy5yZWNvbm5lY3QpIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgKCkgPT4ge1xuXHRcdHJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dChyZWNvbm5lY3QsIG9wdGlvbnMucmVjb25uZWN0SW50ZXJ2YWwgPz8gM2UzKTtcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0c29ja2V0LFxuXHRcdHNlbmQsXG5cdFx0bGlzdGVuOiAoaGFuZGxlcikgPT4ge1xuXHRcdFx0Y29uc3QgaCA9IChlKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZS5kYXRhID09PSBcInN0cmluZ1wiKSB0cnkge1xuXHRcdFx0XHRcdGhhbmRsZXIoSlNPTi5wYXJzZShlLmRhdGEpKTtcblx0XHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0XHRlbHNlIGhhbmRsZXIoZS5kYXRhKTtcblx0XHRcdH07XG5cdFx0XHRzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4gc29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGgpO1xuXHRcdH0sXG5cdFx0cmVjb25uZWN0LFxuXHRcdGNsb3NlXG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVCcm9hZGNhc3RUcmFuc3BvcnQoY2hhbm5lbE5hbWUpIHtcblx0Y29uc3QgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKTtcblx0cmV0dXJuIHtcblx0XHRjaGFubmVsLFxuXHRcdHNlbmQ6IChtc2cpID0+IGNoYW5uZWwucG9zdE1lc3NhZ2UobXNnKSxcblx0XHRsaXN0ZW46IChoYW5kbGVyKSA9PiB7XG5cdFx0XHRjb25zdCBoID0gKGUpID0+IGhhbmRsZXIoZS5kYXRhKTtcblx0XHRcdGNoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4gY2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoKTtcblx0XHR9LFxuXHRcdGNsb3NlOiAoKSA9PiBjaGFubmVsLmNsb3NlKClcblx0fTtcbn1cbnZhciBUcmFuc3BvcnRDb3JlRmFjdG9yeSA9IHtcblx0Y3JlYXRlU2VuZGVyOiBjcmVhdGVUcmFuc3BvcnRTZW5kZXIsXG5cdGNyZWF0ZUxpc3RlbmVyOiBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcixcblx0ZGV0ZWN0VHlwZTogZGV0ZWN0VHJhbnNwb3J0VHlwZSQxLFxuXHRnZXRNZXRhOiBnZXRUcmFuc3BvcnRNZXRhLFxuXHRjaHJvbWU6IHtcblx0XHRjcmVhdGVMaXN0ZW5lcjogY3JlYXRlQ2hyb21lTGlzdGVuZXIsXG5cdFx0Y3JlYXRlVGFic0xpc3RlbmVyOiBjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXJcblx0fSxcblx0d2Vic29ja2V0OiBjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQsXG5cdGJyb2FkY2FzdDogY3JlYXRlQnJvYWRjYXN0VHJhbnNwb3J0XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9vYnNlcnZhYmxlL09ic2VydmFibGUudHNcbnZhciBCYXNlU3Vic2NyaXB0aW9uID0gY2xhc3Mge1xuXHRfdW5zdWJzY3JpYmU7XG5cdF9jbG9zZWQgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3Vuc3Vic2NyaWJlKSB7XG5cdFx0dGhpcy5fdW5zdWJzY3JpYmUgPSBfdW5zdWJzY3JpYmU7XG5cdH1cblx0Z2V0IGNsb3NlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xvc2VkO1xuXHR9XG5cdHVuc3Vic2NyaWJlKCkge1xuXHRcdGlmICghdGhpcy5fY2xvc2VkKSB7XG5cdFx0XHR0aGlzLl9jbG9zZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5fdW5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdH1cbn07XG52YXIgT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3Byb2R1Y2VyO1xuXHRjb25zdHJ1Y3RvcihfcHJvZHVjZXIpIHtcblx0XHR0aGlzLl9wcm9kdWNlciA9IF9wcm9kdWNlcjtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXJPck5leHQsIG9wdHMpIHtcblx0XHRjb25zdCBvYnNlcnZlciA9IHR5cGVvZiBvYnNlcnZlck9yTmV4dCA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlck9yTmV4dCB9IDogb2JzZXJ2ZXJPck5leHQgPz8ge307XG5cdFx0Y29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblx0XHRvcHRzPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBjdHJsLmFib3J0KCkpO1xuXHRcdGxldCBhY3RpdmUgPSB0cnVlO1xuXHRcdGxldCBjbGVhbnVwO1xuXHRcdGNvbnN0IGRvQ2xlYW51cCA9ICgpID0+IHtcblx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0Y3RybC5hYm9ydCgpO1xuXHRcdFx0Y2xlYW51cD8uKCk7XG5cdFx0fTtcblx0XHRjb25zdCBzdWJzY3JpYmVyID0ge1xuXHRcdFx0bmV4dDogKHYpID0+IGFjdGl2ZSAmJiBvYnNlcnZlci5uZXh0Py4odiksXG5cdFx0XHRlcnJvcjogKGUpID0+IHtcblx0XHRcdFx0aWYgKGFjdGl2ZSkge1xuXHRcdFx0XHRcdG9ic2VydmVyLmVycm9yPy4oZSk7XG5cdFx0XHRcdFx0ZG9DbGVhbnVwKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb21wbGV0ZTogKCkgPT4ge1xuXHRcdFx0XHRpZiAoYWN0aXZlKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuY29tcGxldGU/LigpO1xuXHRcdFx0XHRcdGRvQ2xlYW51cCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2lnbmFsOiBjdHJsLnNpZ25hbCxcblx0XHRcdGdldCBhY3RpdmUoKSB7XG5cdFx0XHRcdHJldHVybiBhY3RpdmUgJiYgIWN0cmwuc2lnbmFsLmFib3J0ZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0Y2xlYW51cCA9IHRoaXMuX3Byb2R1Y2VyKHN1YnNjcmliZXIpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHN1YnNjcmliZXIuZXJyb3IoZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQmFzZVN1YnNjcmlwdGlvbihkb0NsZWFudXApO1xuXHR9XG5cdHBpcGUoLi4ub3BzKSB7XG5cdFx0cmV0dXJuIG9wcy5yZWR1Y2UoKHMsIG9wKSA9PiBvcChzKSwgdGhpcyk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbFN1YmplY3QgPSBjbGFzcyB7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X2J1ZmZlciA9IFtdO1xuXHRfbWF4QnVmZmVyO1xuXHRfcmVwbGF5O1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9tYXhCdWZmZXIgPSBvcHRpb25zLmJ1ZmZlclNpemUgPz8gMDtcblx0XHR0aGlzLl9yZXBsYXkgPSBvcHRpb25zLnJlcGxheU9uU3Vic2NyaWJlID8/IGZhbHNlO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHRpZiAodGhpcy5fbWF4QnVmZmVyID4gMCkge1xuXHRcdFx0dGhpcy5fYnVmZmVyLnB1c2godmFsdWUpO1xuXHRcdFx0aWYgKHRoaXMuX2J1ZmZlci5sZW5ndGggPiB0aGlzLl9tYXhCdWZmZXIpIHRoaXMuX2J1ZmZlci5zaGlmdCgpO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdHMubmV4dD8uKHZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHR9XG5cdGVycm9yKGVycikge1xuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZXJyKTtcblx0fVxuXHRjb21wbGV0ZSgpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlck9yTmV4dCkge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlck9yTmV4dCA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlck9yTmV4dCB9IDogb2JzZXJ2ZXJPck5leHQ7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAodGhpcy5fcmVwbGF5KSBmb3IgKGNvbnN0IHYgb2YgdGhpcy5fYnVmZmVyKSB0cnkge1xuXHRcdFx0b2JzLm5leHQ/Lih2KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvYnMuZXJyb3I/LihlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBCYXNlU3Vic2NyaXB0aW9uKCgpID0+IHtcblx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0fSk7XG5cdH1cblx0Z2V0VmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1ZmZlci5hdCgtMSk7XG5cdH1cblx0Z2V0QnVmZmVyKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fYnVmZmVyXTtcblx0fVxuXHRnZXQgc3Vic2NyaWJlckNvdW50KCkge1xuXHRcdHJldHVybiB0aGlzLl9zdWJzLnNpemU7XG5cdH1cbn07XG52YXIgUmVwbGF5Q2hhbm5lbFN1YmplY3QgPSBjbGFzcyBleHRlbmRzIENoYW5uZWxTdWJqZWN0IHtcblx0Y29uc3RydWN0b3IoYnVmZmVyU2l6ZSA9IDEpIHtcblx0XHRzdXBlcih7XG5cdFx0XHRidWZmZXJTaXplLFxuXHRcdFx0cmVwbGF5T25TdWJzY3JpYmU6IHRydWVcblx0XHR9KTtcblx0fVxufTtcbnZhciBDaGFubmVsT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3RyYW5zcG9ydDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfc2VuZDtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdHJhbnNwb3J0LCBfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl90cmFuc3BvcnQgPSBfdHJhbnNwb3J0O1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoX3RyYW5zcG9ydCk7XG5cdH1cblx0bmV4dChtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fc2VuZChtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKCF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIG5ldyBCYXNlU3Vic2NyaXB0aW9uKCgpID0+IHtcblx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0fSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5uZXh0KHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0X2hhbmRsZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3RyYW5zcG9ydCwgKGQpID0+IHRoaXMuX2hhbmRsZShkKSwgKGUpID0+IHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5lcnJvcj8uKGUpKSwgKCkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc0xpc3RlbmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5fbGlzdGVuaW5nO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlSW52b2tlck9ic2VydmFibGUodHJhbnNwb3J0LCBjaGFubmVsTmFtZSwgaGFuZGxlcikge1xuXHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRyYW5zcG9ydCk7XG5cdHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuXHRcdGNvbnN0IG9uTWVzc2FnZSA9IChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoIXN1YnNjcmliZXIuYWN0aXZlKSByZXR1cm47XG5cdFx0XHRjb25zdCByZXNwb25kID0gKHJlc3VsdCwgdHJhbnNmZXIpID0+IHtcblx0XHRcdFx0c2VuZCh7XG5cdFx0XHRcdFx0Li4ucmVzdWx0LFxuXHRcdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkXG5cdFx0XHRcdH0sIHRyYW5zZmVyKTtcblx0XHRcdH07XG5cdFx0XHRoYW5kbGVyID8gaGFuZGxlcihkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSA6IHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0XHR9O1xuXHRcdHJldHVybiBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0cmFuc3BvcnQsIG9uTWVzc2FnZSwgKGUpID0+IHN1YnNjcmliZXIuZXJyb3IoZSksICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVmbGVjdEhhbmRsZXIoY2hhbm5lbE5hbWUpIHtcblx0cmV0dXJuIGFzeW5jIChkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSA9PiB7XG5cdFx0aWYgKGRhdGEudHlwZSAhPT0gXCJyZXF1ZXN0XCIpIHtcblx0XHRcdHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUmVxdWVzdChkYXRhLnBheWxvYWQsIGRhdGEucmVxSWQsIGNoYW5uZWxOYW1lKTtcblx0XHRpZiAocmVzdWx0KSByZXNwb25kKHJlc3VsdC5yZXNwb25zZSwgcmVzdWx0LnRyYW5zZmVyKTtcblx0XHRzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdH07XG59XG52YXIgTWVzc2FnZU9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIENoYW5uZWxTdWJqZWN0IHtcblx0Y29uc3RydWN0b3Ioc291cmNlLCBtZXNzYWdlVHlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0c291cmNlLnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdGlmICghbWVzc2FnZVR5cGUgfHwgbXNnLnR5cGUgPT09IG1lc3NhZ2VUeXBlKSB0aGlzLm5leHQobXNnKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvcjogKGUpID0+IHRoaXMuZXJyb3IoZSksXG5cdFx0XHRjb21wbGV0ZTogKCkgPT4gdGhpcy5jb21wbGV0ZSgpXG5cdFx0fSk7XG5cdH1cbn07XG52YXIgZmlsdGVyID0gKHByZWQpID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiBwcmVkKHYpICYmIHN1Yi5uZXh0KHYpLFxuXHRcdGVycm9yOiAoZSkgPT4gc3ViLmVycm9yKGUpLFxuXHRcdGNvbXBsZXRlOiAoKSA9PiBzdWIuY29tcGxldGUoKVxuXHR9KTtcblx0cmV0dXJuICgpID0+IHMudW5zdWJzY3JpYmUoKTtcbn0pO1xudmFyIG1hcCA9IChmbikgPT4gKHNyYykgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCBzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHN1Yi5uZXh0KGZuKHYpKSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciB0YWtlID0gKG4pID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0bGV0IGMgPSAwO1xuXHRjb25zdCBzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHtcblx0XHRcdGlmIChjKysgPCBuKSB7XG5cdFx0XHRcdHN1Yi5uZXh0KHYpO1xuXHRcdFx0XHRpZiAoYyA+PSBuKSBzdWIuY29tcGxldGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGVycm9yOiAoZSkgPT4gc3ViLmVycm9yKGUpLFxuXHRcdGNvbXBsZXRlOiAoKSA9PiBzdWIuY29tcGxldGUoKVxuXHR9KTtcblx0cmV0dXJuICgpID0+IHMudW5zdWJzY3JpYmUoKTtcbn0pO1xudmFyIHRha2VVbnRpbCA9IChzaWduYWwpID0+IChzcmMpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0Y29uc3Qgc3MgPSBzcmMuc3Vic2NyaWJlKHtcblx0XHRuZXh0OiAodikgPT4gc3ViLm5leHQodiksXG5cdFx0ZXJyb3I6IChlKSA9PiBzdWIuZXJyb3IoZSksXG5cdFx0Y29tcGxldGU6ICgpID0+IHN1Yi5jb21wbGV0ZSgpXG5cdH0pO1xuXHRjb25zdCBzaWcgPSBzaWduYWwuc3Vic2NyaWJlKHsgbmV4dDogKCkgPT4gc3ViLmNvbXBsZXRlKCkgfSk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0c3MudW5zdWJzY3JpYmUoKTtcblx0XHRzaWcudW5zdWJzY3JpYmUoKTtcblx0fTtcbn0pO1xudmFyIGRlYm91bmNlID0gKG1zKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCB0O1xuXHRjb25zdCBzID0gc3JjLnN1YnNjcmliZSh7XG5cdFx0bmV4dDogKHYpID0+IHtcblx0XHRcdGNsZWFyVGltZW91dCh0KTtcblx0XHRcdHQgPSBzZXRUaW1lb3V0KCgpID0+IHN1Yi5uZXh0KHYpLCBtcyk7XG5cdFx0fSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHQpO1xuXHRcdHMudW5zdWJzY3JpYmUoKTtcblx0fTtcbn0pO1xudmFyIHRocm90dGxlID0gKG1zKSA9PiAoc3JjKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCBsYXN0ID0gMDtcblx0Y29uc3QgcyA9IHNyYy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiB7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0aWYgKG5vdyAtIGxhc3QgPj0gbXMpIHtcblx0XHRcdFx0bGFzdCA9IG5vdztcblx0XHRcdFx0c3ViLm5leHQodik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKSxcblx0XHRjb21wbGV0ZTogKCkgPT4gc3ViLmNvbXBsZXRlKClcblx0fSk7XG5cdHJldHVybiAoKSA9PiBzLnVuc3Vic2NyaWJlKCk7XG59KTtcbnZhciBmcm9tRXZlbnQgPSAodGFyZ2V0LCBldmVudCkgPT4gbmV3IE9ic2VydmFibGUoKHN1YikgPT4ge1xuXHRjb25zdCBoID0gKGUpID0+IHN1Yi5hY3RpdmUgJiYgc3ViLm5leHQoZSk7XG5cdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoKTtcblx0cmV0dXJuICgpID0+IHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoKTtcbn0pO1xudmFyIGZyb21Qcm9taXNlID0gKHByb21pc2UpID0+IG5ldyBPYnNlcnZhYmxlKChzdWIpID0+IHtcblx0cHJvbWlzZS50aGVuKCh2KSA9PiB7XG5cdFx0c3ViLm5leHQodik7XG5cdFx0c3ViLmNvbXBsZXRlKCk7XG5cdH0pLmNhdGNoKChlKSA9PiBzdWIuZXJyb3IoZSkpO1xufSk7XG52YXIgZGVsYXkgPSAodmFsdWUsIG1zKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRzdWIubmV4dCh2YWx1ZSk7XG5cdFx0c3ViLmNvbXBsZXRlKCk7XG5cdH0sIG1zKTtcblx0cmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbn0pO1xudmFyIGludGVydmFsID0gKG1zKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGxldCBuID0gMDtcblx0Y29uc3QgdCA9IHNldEludGVydmFsKCgpID0+IHN1Yi5uZXh0KG4rKyksIG1zKTtcblx0cmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwodCk7XG59KTtcbnZhciBtZXJnZSA9ICguLi5zb3VyY2VzKSA9PiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdGNvbnN0IHN1YnMgPSBzb3VyY2VzLm1hcCgocykgPT4gcy5zdWJzY3JpYmUoe1xuXHRcdG5leHQ6ICh2KSA9PiBzdWIubmV4dCh2KSxcblx0XHRlcnJvcjogKGUpID0+IHN1Yi5lcnJvcihlKVxuXHR9KSk7XG5cdHJldHVybiAoKSA9PiBzdWJzLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG59KTtcbnZhciBjcmVhdGVNZXNzYWdlSWQgPSAoKSA9PiBVVUlEdjQoKTtcbnZhciBtYWtlSW52b2tlciA9ICh0cmFuc3BvcnQsIGhhbmRsZXIpID0+IChzdWJzY3JpYmVyKSA9PiB7XG5cdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodHJhbnNwb3J0KTtcblx0Y29uc3QgcmVzcG9uZCA9IChyZXN1bHQsIHRyYW5zZmVyKSA9PiBzZW5kKHJlc3VsdCwgdHJhbnNmZXIpO1xuXHRyZXR1cm4gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodHJhbnNwb3J0LCAoZGF0YSkgPT4ge1xuXHRcdGlmICghc3Vic2NyaWJlci5hY3RpdmUpIHJldHVybjtcblx0XHRoYW5kbGVyID8gaGFuZGxlcihkYXRhLCByZXNwb25kLCBzdWJzY3JpYmVyKSA6IHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0fSwgKGVycikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnIpLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpO1xufTtcbnZhciBtYWtlV29ya2VySW52b2tlciA9ICh3b3JrZXIsIGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKHdvcmtlciwgaGFuZGxlcik7XG52YXIgbWFrZU1lc3NhZ2VQb3J0SW52b2tlciA9IChwb3J0LCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihwb3J0LCBoYW5kbGVyKTtcbnZhciBtYWtlQnJvYWRjYXN0SW52b2tlciA9IChuYW1lLCBoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihuZXcgQnJvYWRjYXN0Q2hhbm5lbChuYW1lKSwgaGFuZGxlcik7XG52YXIgbWFrZVdlYlNvY2tldEludm9rZXIgPSAodXJsLCBwcm90b2NvbHMsIGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKG5ldyBXZWJTb2NrZXQodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIiA/IHVybCA6IHVybC5ocmVmLCBwcm90b2NvbHMpLCBoYW5kbGVyKTtcbnZhciBtYWtlQ2hyb21lUnVudGltZUludm9rZXIgPSAoaGFuZGxlcikgPT4gbWFrZUludm9rZXIoXCJjaHJvbWUtcnVudGltZVwiLCBoYW5kbGVyKTtcbnZhciBtYWtlU2VydmljZVdvcmtlckNsaWVudEludm9rZXIgPSAoaGFuZGxlcikgPT4gbWFrZUludm9rZXIoXCJzZXJ2aWNlLXdvcmtlci1jbGllbnRcIiwgaGFuZGxlcik7XG52YXIgbWFrZVNlcnZpY2VXb3JrZXJIb3N0SW52b2tlciA9IChoYW5kbGVyKSA9PiBtYWtlSW52b2tlcihcInNlcnZpY2Utd29ya2VyLWhvc3RcIiwgaGFuZGxlcik7XG52YXIgbWFrZVNlbGZJbnZva2VyID0gKGhhbmRsZXIpID0+IG1ha2VJbnZva2VyKFwic2VsZlwiLCBoYW5kbGVyKTtcbmZ1bmN0aW9uIGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsKHRyYW5zcG9ydCwgY2hhbm5lbE5hbWUsIGhhbmRsZXIpIHtcblx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQpO1xuXHRjb25zdCBpbmJvdW5kID0gbmV3IE9ic2VydmFibGUoKHN1YikgPT4gbWFrZUludm9rZXIodHJhbnNwb3J0LCBoYW5kbGVyKShzdWIpKTtcblx0cmV0dXJuIHtcblx0XHRpbmJvdW5kLFxuXHRcdG91dGJvdW5kOiB7IG5leHQ6IHNlbmQgfSxcblx0XHRzdWJzY3JpYmU6IChvYnMpID0+IGluYm91bmQuc3Vic2NyaWJlKG9icyksXG5cdFx0c2VuZDogKHZhbHVlLCB0cmFuc2ZlcikgPT4gc2VuZCh2YWx1ZSwgdHJhbnNmZXIpXG5cdH07XG59XG5mdW5jdGlvbiB3aGVuKHRhcmdldCwgZXZlbnROYW1lKSB7XG5cdHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3ViKSA9PiB7XG5cdFx0Y29uc3QgaCA9IChlKSA9PiBzdWIuYWN0aXZlICYmIHN1Yi5uZXh0KGUpO1xuXHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaCk7XG5cdFx0cmV0dXJuICgpID0+IHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaCk7XG5cdH0pO1xufVxudmFyIE9ic2VydmFibGVGYWN0b3J5ID0ge1xuXHRjaGFubmVsOiAodHJhbnNwb3J0LCBuYW1lKSA9PiBuZXcgQ2hhbm5lbE9ic2VydmFibGUodHJhbnNwb3J0LCBuYW1lKSxcblx0aW52b2tlcjogKHRyYW5zcG9ydCwgbmFtZSwgaGFuZGxlcikgPT4gY3JlYXRlSW52b2tlck9ic2VydmFibGUodHJhbnNwb3J0LCBuYW1lLCBoYW5kbGVyKSxcblx0aGFuZGxlcjogKHRyYW5zcG9ydCwgbmFtZSkgPT4gY3JlYXRlSW52b2tlck9ic2VydmFibGUodHJhbnNwb3J0LCBuYW1lLCBjcmVhdGVSZWZsZWN0SGFuZGxlcihuYW1lKSksXG5cdGJpZGlyZWN0aW9uYWw6IGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsLFxuXHRmcm9tRXZlbnQsXG5cdGZyb21Qcm9taXNlLFxuXHRkZWxheSxcblx0aW50ZXJ2YWwsXG5cdG1lcmdlLFxuXHR3aGVuXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9wcm94eS9JbnZva2VyLnRzXG5mdW5jdGlvbiBkZXRlY3RDb250ZXh0VHlwZSgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzLkRlbm8gIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImRlbm9cIjtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzPy52ZXJzaW9ucz8ubm9kZSkgcmV0dXJuIFwibm9kZVwiO1xuXHRjb25zdCBzZXJ2aWNlV29ya2VyU2NvcGUgPSBnbG9iYWxUaGlzLlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTtcblx0Y29uc3Qgc2hhcmVkV29ya2VyU2NvcGUgPSBnbG9iYWxUaGlzLlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlO1xuXHRjb25zdCBkZWRpY2F0ZWRXb3JrZXJTY29wZSA9IGdsb2JhbFRoaXMuRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7XG5cdGlmIChzZXJ2aWNlV29ya2VyU2NvcGUgJiYgc2VsZiBpbnN0YW5jZW9mIHNlcnZpY2VXb3JrZXJTY29wZSkgcmV0dXJuIFwic2VydmljZS13b3JrZXJcIjtcblx0aWYgKHNoYXJlZFdvcmtlclNjb3BlICYmIHNlbGYgaW5zdGFuY2VvZiBzaGFyZWRXb3JrZXJTY29wZSkgcmV0dXJuIFwic2hhcmVkLXdvcmtlclwiO1xuXHRpZiAoZGVkaWNhdGVkV29ya2VyU2NvcGUgJiYgc2VsZiBpbnN0YW5jZW9mIGRlZGljYXRlZFdvcmtlclNjb3BlKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0aWYgKHR5cGVvZiBjaHJvbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY2hyb21lLnJ1bnRpbWU/LmlkKSB7XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUucnVudGltZS5nZXRCYWNrZ3JvdW5kUGFnZSA9PT0gXCJmdW5jdGlvblwiIHx8IChjaHJvbWUucnVudGltZS5nZXRNYW5pZmVzdD8uKCk/LmJhY2tncm91bmQpPy5zZXJ2aWNlX3dvcmtlcikgcmV0dXJuIFwiY2hyb21lLWJhY2tncm91bmRcIjtcblx0XHRpZiAodHlwZW9mIGNocm9tZS5kZXZ0b29scyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIFwiY2hyb21lLWRldnRvb2xzXCI7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWxUaGlzPy5sb2NhdGlvbj8ucHJvdG9jb2wgPT09IFwiY2hyb21lLWV4dGVuc2lvbjpcIikge1xuXHRcdFx0aWYgKChjaHJvbWUuZXh0ZW5zaW9uPy5nZXRWaWV3cz8uKHsgdHlwZTogXCJwb3B1cFwiIH0pID8/IFtdKS5pbmNsdWRlcyhnbG9iYWxUaGlzKSkgcmV0dXJuIFwiY2hyb21lLXBvcHVwXCI7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsVGhpcz8ubG9jYXRpb24/LnByb3RvY29sICE9PSBcImNocm9tZS1leHRlbnNpb246XCIpIHJldHVybiBcImNocm9tZS1jb250ZW50XCI7XG5cdH1cblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIFwid2luZG93XCI7XG5cdHJldHVybiBcInVua25vd25cIjtcbn1cbmZ1bmN0aW9uIGRldGVjdFRyYW5zcG9ydFR5cGUoc291cmNlKSB7XG5cdGlmICh0eXBlb2YgUlRDRGF0YUNoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgc291cmNlIGluc3RhbmNlb2YgUlRDRGF0YUNoYW5uZWwpIHJldHVybiBcInJ0Yy1kYXRhXCI7XG5cdGNvbnN0IGRldGVjdGVkID0gZGV0ZWN0VHJhbnNwb3J0VHlwZSQxKHNvdXJjZSk7XG5cdGlmIChkZXRlY3RlZCAmJiBkZXRlY3RlZCAhPT0gXCJpbnRlcm5hbFwiKSByZXR1cm4gZGV0ZWN0ZWQ7XG5cdGlmIChzb3VyY2UgPT09IHNlbGYgfHwgc291cmNlID09PSBnbG9iYWxUaGlzIHx8IHNvdXJjZSA9PT0gXCJzZWxmXCIpIHJldHVybiBcInNlbGZcIjtcblx0cmV0dXJuIFwiaW50ZXJuYWxcIjtcbn1cbmZ1bmN0aW9uIGRldGVjdEluY29taW5nQ29udGV4dFR5cGUoZGF0YSkge1xuXHRpZiAoIWRhdGEpIHJldHVybiBcInVua25vd25cIjtcblx0aWYgKGRhdGEuY29udGV4dFR5cGUpIHJldHVybiBkYXRhLmNvbnRleHRUeXBlO1xuXHRjb25zdCBzZW5kZXIgPSBkYXRhLnNlbmRlciA/PyBcIlwiO1xuXHRpZiAoc2VuZGVyLmluY2x1ZGVzKFwid29ya2VyXCIpKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0aWYgKHNlbmRlci5pbmNsdWRlcyhcInN3XCIpIHx8IHNlbmRlci5pbmNsdWRlcyhcInNlcnZpY2VcIikpIHJldHVybiBcInNlcnZpY2Utd29ya2VyXCI7XG5cdGlmIChzZW5kZXIuaW5jbHVkZXMoXCJjaHJvbWVcIikgfHwgc2VuZGVyLmluY2x1ZGVzKFwiY3J4XCIpKSByZXR1cm4gXCJjaHJvbWUtY29udGVudFwiO1xuXHRpZiAoc2VuZGVyLmluY2x1ZGVzKFwiYmFja2dyb3VuZFwiKSkgcmV0dXJuIFwiY2hyb21lLWJhY2tncm91bmRcIjtcblx0cmV0dXJuIFwidW5rbm93blwiO1xufVxudmFyIERlZmF1bHRSZWZsZWN0ID0ge1xuXHRnZXQ6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCksXG5cdHNldDogKHRhcmdldCwgcHJvcCwgdmFsdWUpID0+IFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpLFxuXHRoYXM6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcCksXG5cdGFwcGx5OiAodGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSA9PiBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJncyksXG5cdGNvbnN0cnVjdDogKHRhcmdldCwgYXJncykgPT4gUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmdzKSxcblx0ZGVsZXRlUHJvcGVydHk6ICh0YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSxcblx0b3duS2V5czogKHRhcmdldCkgPT4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCksXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKHRhcmdldCwgcHJvcCkgPT4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKSxcblx0Z2V0UHJvdG90eXBlT2Y6ICh0YXJnZXQpID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSxcblx0c2V0UHJvdG90eXBlT2Y6ICh0YXJnZXQsIHByb3RvKSA9PiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pLFxuXHRpc0V4dGVuc2libGU6ICh0YXJnZXQpID0+IFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldCksXG5cdHByZXZlbnRFeHRlbnNpb25zOiAodGFyZ2V0KSA9PiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbn07XG52YXIgUmVxdWVzdG9yID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHRUeXBlO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNvbmZpZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLl9jaGFubmVsID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogY29uZmlnLmNoYW5uZWwsXG5cdFx0XHR0aW1lb3V0OiBjb25maWcudGltZW91dCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0Y29ubmVjdCh0YXJnZXQsIG9wdGlvbnMpIHtcblx0XHR0aGlzLl9jaGFubmVsLmNvbm5lY3QodGFyZ2V0LCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzID0gW10pIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRnZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLmdldCh0YXJnZXRDaGFubmVsLCBwYXRoLCBwcm9wKTtcblx0fVxuXHRzZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5zZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCwgdmFsdWUpO1xuXHR9XG5cdGNhbGwodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuY2FsbCh0YXJnZXRDaGFubmVsLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRjb25zdHJ1Y3QodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwuY29uc3RydWN0KHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MpO1xuXHR9XG5cdGltcG9ydE1vZHVsZSh0YXJnZXRDaGFubmVsLCB1cmwpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5pbXBvcnQodXJsLCB0YXJnZXRDaGFubmVsKTtcblx0fVxuXHRjcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWwucHJveHkodGFyZ2V0Q2hhbm5lbCwgYmFzZVBhdGgpO1xuXHR9XG5cdGdldCBvblJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLm9uUmVzcG9uc2U7XG5cdH1cblx0Z2V0IGNvbnRleHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0VHlwZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jaGFubmVsLmNsb3NlKCk7XG5cdH1cbn07XG52YXIgUmVzcG9uZGVyID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHRUeXBlO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNvbmZpZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLl9jaGFubmVsID0gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogY29uZmlnLmNoYW5uZWwsXG5cdFx0XHR0aW1lb3V0OiBjb25maWcudGltZW91dCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0bGlzdGVuKHNvdXJjZSwgb3B0aW9ucykge1xuXHRcdHRoaXMuX2NoYW5uZWwubGlzdGVuKHNvdXJjZSwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhwb3NlKG5hbWUsIG9iaikge1xuXHRcdHRoaXMuX2NoYW5uZWwuZXhwb3NlKG5hbWUsIG9iaik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Z2V0IG9uSW52b2NhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5vbkludm9jYXRpb247XG5cdH1cblx0c3Vic2NyaWJlSW52b2NhdGlvbnMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsLm9uSW52b2NhdGlvbi5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0Z2V0IGNvbnRleHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0VHlwZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jaGFubmVsLmNsb3NlKCk7XG5cdH1cbn07XG52YXIgQmlkaXJlY3Rpb25hbEludm9rZXIgPSBjbGFzcyB7XG5cdHJlcXVlc3Rvcjtcblx0cmVzcG9uZGVyO1xuXHRfY29udGV4dFR5cGU7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZykge1xuXHRcdHRoaXMuX2NvbnRleHRUeXBlID0gY29uZmlnLmF1dG9EZXRlY3QgIT09IGZhbHNlID8gZGV0ZWN0Q29udGV4dFR5cGUoKSA6IFwidW5rbm93blwiO1xuXHRcdHRoaXMucmVxdWVzdG9yID0gbmV3IFJlcXVlc3Rvcihjb25maWcpO1xuXHRcdHRoaXMucmVzcG9uZGVyID0gbmV3IFJlc3BvbmRlcihjb25maWcpO1xuXHR9XG5cdGNvbm5lY3QodGFyZ2V0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0b3IuY29ubmVjdCh0YXJnZXQpO1xuXHRcdHRoaXMucmVzcG9uZGVyLmxpc3Rlbih0YXJnZXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4cG9zZShuYW1lLCBvYmopIHtcblx0XHR0aGlzLnJlc3BvbmRlci5leHBvc2UobmFtZSwgb2JqKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRjcmVhdGVQcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdG9yLmNyZWF0ZVByb3h5KHRhcmdldENoYW5uZWwsIGJhc2VQYXRoKTtcblx0fVxuXHRpbXBvcnRNb2R1bGUodGFyZ2V0Q2hhbm5lbCwgdXJsKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdG9yLmltcG9ydE1vZHVsZSh0YXJnZXRDaGFubmVsLCB1cmwpO1xuXHR9XG5cdGdldCBjb250ZXh0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dFR5cGU7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5yZXF1ZXN0b3IuY2xvc2UoKTtcblx0XHR0aGlzLnJlc3BvbmRlci5jbG9zZSgpO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdG9yKGNoYW5uZWwsIGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFJlcXVlc3Rvcih7XG5cdFx0Y2hhbm5lbCxcblx0XHQuLi5jb25maWdcblx0fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVSZXNwb25kZXIoY2hhbm5lbCwgY29uZmlnKSB7XG5cdHJldHVybiBuZXcgUmVzcG9uZGVyKHtcblx0XHRjaGFubmVsLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXIoY2hhbm5lbCwgY29uZmlnKSB7XG5cdHJldHVybiBuZXcgQmlkaXJlY3Rpb25hbEludm9rZXIoe1xuXHRcdGNoYW5uZWwsXG5cdFx0Li4uY29uZmlnXG5cdH0pO1xufVxuZnVuY3Rpb24gc2V0dXBJbnZva2VyKGNoYW5uZWwsIHRhcmdldCwgY29uZmlnKSB7XG5cdHJldHVybiBjcmVhdGVJbnZva2VyKGNoYW5uZWwsIGNvbmZpZykuY29ubmVjdCh0YXJnZXQpO1xufVxuZnVuY3Rpb24gYXV0b0ludm9rZXIoY2hhbm5lbCwgY29uZmlnKSB7XG5cdGNvbnN0IGludm9rZXIgPSBjcmVhdGVJbnZva2VyKGNoYW5uZWwsIHtcblx0XHRhdXRvRGV0ZWN0OiB0cnVlLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KTtcblx0c3dpdGNoIChkZXRlY3RDb250ZXh0VHlwZSgpKSB7XG5cdFx0Y2FzZSBcIndvcmtlclwiOlxuXHRcdGNhc2UgXCJzZXJ2aWNlLXdvcmtlclwiOlxuXHRcdGNhc2UgXCJzaGFyZWQtd29ya2VyXCI6XG5cdFx0XHRpbnZva2VyLmNvbm5lY3Qoc2VsZik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY2hyb21lLWNvbnRlbnRcIjpcblx0XHRjYXNlIFwiY2hyb21lLWJhY2tncm91bmRcIjpcblx0XHRjYXNlIFwiY2hyb21lLXBvcHVwXCI6IGludm9rZXIuY29ubmVjdChcImNocm9tZS1ydW50aW1lXCIpO1xuXHR9XG5cdHJldHVybiBpbnZva2VyO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9wcm94eS9Qcm94eS50c1xudmFyIFBST1hZX01BUktFUiA9IFN5bWJvbC5mb3IoXCJ1bmlmb3JtLnByb3h5XCIpO1xudmFyIFBST1hZX0lOVEVSTkFMUyA9IFN5bWJvbC5mb3IoXCJ1bmlmb3JtLnByb3h5LmludGVybmFsc1wiKTtcbnZhciBSZW1vdGVQcm94eUhhbmRsZXIgPSBjbGFzcyB7XG5cdF9pbnZva2VyO1xuXHRfY29uZmlnO1xuXHRfY2hpbGRDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0cnVjdG9yKF9pbnZva2VyLCBjb25maWcpIHtcblx0XHR0aGlzLl9pbnZva2VyID0gX2ludm9rZXI7XG5cdFx0dGhpcy5fY29uZmlnID0ge1xuXHRcdFx0Y2hhbm5lbDogY29uZmlnLmNoYW5uZWwsXG5cdFx0XHRiYXNlUGF0aDogY29uZmlnLmJhc2VQYXRoID8/IFtdLFxuXHRcdFx0aW52b2tlcjogX2ludm9rZXIsXG5cdFx0XHRjYWNoZTogY29uZmlnLmNhY2hlID8/IHRydWUsXG5cdFx0XHR0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyAzZTRcblx0XHR9O1xuXHR9XG5cdGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG5cdFx0Y29uc3QgcHJvcFN0ciA9IFN0cmluZyhwcm9wKTtcblx0XHRpZiAocHJvcCA9PT0gUFJPWFlfTUFSS0VSKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocHJvcCA9PT0gUFJPWFlfSU5URVJOQUxTKSByZXR1cm4gdGhpcy5fY29uZmlnO1xuXHRcdGlmIChwcm9wID09PSAkcmVxdWVzdEhhbmRsZXIpIHJldHVybiB0cnVlO1xuXHRcdGlmIChwcm9wID09PSAkZGVzY3JpcHRvcikgcmV0dXJuIHRoaXMuX2dldERlc2NyaXB0b3IoKTtcblx0XHRpZiAocHJvcCA9PT0gXCJ0aGVuXCIgfHwgcHJvcCA9PT0gXCJjYXRjaFwiIHx8IHByb3AgPT09IFwiZmluYWxseVwiKSByZXR1cm4gdm9pZCAwO1xuXHRcdGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHZvaWQgMDtcblx0XHRpZiAocHJvcCA9PT0gXCIkcGF0aFwiKSByZXR1cm4gdGhpcy5fY29uZmlnLmJhc2VQYXRoO1xuXHRcdGlmIChwcm9wID09PSBcIiRjaGFubmVsXCIpIHJldHVybiB0aGlzLl9jb25maWcuY2hhbm5lbDtcblx0XHRpZiAocHJvcCA9PT0gXCIkZGVzY3JpcHRvclwiKSByZXR1cm4gdGhpcy5fZ2V0RGVzY3JpcHRvcigpO1xuXHRcdGlmIChwcm9wID09PSBcIiRpbnZva2VcIikgcmV0dXJuIHRoaXMuX2ludm9rZXI7XG5cdFx0Y29uc3QgY2hpbGRQYXRoID0gWy4uLnRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgcHJvcFN0cl07XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5jYWNoZSAmJiB0aGlzLl9jaGlsZENhY2hlLmhhcyhwcm9wU3RyKSkgcmV0dXJuIHRoaXMuX2NoaWxkQ2FjaGUuZ2V0KHByb3BTdHIpO1xuXHRcdGNvbnN0IGNoaWxkUHJveHkgPSBjcmVhdGVSZW1vdGVQcm94eSh0aGlzLl9pbnZva2VyLCB7XG5cdFx0XHQuLi50aGlzLl9jb25maWcsXG5cdFx0XHRiYXNlUGF0aDogY2hpbGRQYXRoXG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5jYWNoZSkgdGhpcy5fY2hpbGRDYWNoZS5zZXQocHJvcFN0ciwgY2hpbGRQcm94eSk7XG5cdFx0cmV0dXJuIGNoaWxkUHJveHk7XG5cdH1cblx0c2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wID09PSBcInN5bWJvbFwiKSByZXR1cm4gdHJ1ZTtcblx0XHR0aGlzLl9pbnZva2VyKFdSZWZsZWN0QWN0aW9uLlNFVCwgWy4uLnRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgU3RyaW5nKHByb3ApXSwgW3ZhbHVlXSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0YXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uQVBQTFksIHRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgW2FyZ3NdKTtcblx0fVxuXHRjb25zdHJ1Y3QodGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpIHtcblx0XHRyZXR1cm4gdGhpcy5faW52b2tlcihXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1QsIHRoaXMuX2NvbmZpZy5iYXNlUGF0aCwgW2FyZ3NdKTtcblx0fVxuXHRoYXModGFyZ2V0LCBwcm9wKSB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wID09PSBcInN5bWJvbFwiKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uSEFTLCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFtwcm9wXSk7XG5cdH1cblx0ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wID09PSBcInN5bWJvbFwiKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcy5faW52b2tlcihXUmVmbGVjdEFjdGlvbi5ERUxFVEVfUFJPUEVSVFksIFsuLi50aGlzLl9jb25maWcuYmFzZVBhdGgsIFN0cmluZyhwcm9wKV0sIFtdKTtcblx0fVxuXHRvd25LZXlzKHRhcmdldCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH07XG5cdH1cblx0Z2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZTtcblx0fVxuXHRzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uU0VUX1BST1RPVFlQRV9PRiwgdGhpcy5fY29uZmlnLmJhc2VQYXRoLCBbcHJvdG9dKTtcblx0fVxuXHRpc0V4dGVuc2libGUodGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9rZXIoV1JlZmxlY3RBY3Rpb24uUFJFVkVOVF9FWFRFTlNJT05TLCB0aGlzLl9jb25maWcuYmFzZVBhdGgsIFtdKTtcblx0fVxuXHRfZ2V0RGVzY3JpcHRvcigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aDogdGhpcy5fY29uZmlnLmJhc2VQYXRoLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY29uZmlnLmNoYW5uZWwsXG5cdFx0XHRwcmltaXRpdmU6IGZhbHNlXG5cdFx0fTtcblx0fVxufTtcbnZhciBEaXNwYXRjaFByb3h5SGFuZGxlciA9IGNsYXNzIHtcblx0X2Rpc3BhdGNoO1xuXHRjb25zdHJ1Y3RvcihfZGlzcGF0Y2gpIHtcblx0XHR0aGlzLl9kaXNwYXRjaCA9IF9kaXNwYXRjaDtcblx0fVxuXHRnZXQoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5HRVQsIGFyZ3MpO1xuXHR9XG5cdHNldCguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLlNFVCwgYXJncyk7XG5cdH1cblx0aGFzKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uSEFTLCBhcmdzKTtcblx0fVxuXHRkZWxldGVQcm9wZXJ0eSguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkRFTEVURV9QUk9QRVJUWSwgYXJncyk7XG5cdH1cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uR0VUX09XTl9QUk9QRVJUWV9ERVNDUklQVE9SLCBhcmdzKTtcblx0fVxuXHRnZXRQcm90b3R5cGVPZiguLi5hcmdzKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BhdGNoKFdSZWZsZWN0QWN0aW9uLkdFVF9QUk9UT1RZUEVfT0YsIGFyZ3MpO1xuXHR9XG5cdHNldFByb3RvdHlwZU9mKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uU0VUX1BST1RPVFlQRV9PRiwgYXJncyk7XG5cdH1cblx0aXNFeHRlbnNpYmxlKC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uSVNfRVhURU5TSUJMRSwgYXJncyk7XG5cdH1cblx0cHJldmVudEV4dGVuc2lvbnMoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5QUkVWRU5UX0VYVEVOU0lPTlMsIGFyZ3MpO1xuXHR9XG5cdG93bktleXMoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5PV05fS0VZUywgYXJncykgPz8gW107XG5cdH1cblx0YXBwbHkoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLl9kaXNwYXRjaChXUmVmbGVjdEFjdGlvbi5BUFBMWSwgYXJncyk7XG5cdH1cblx0Y29uc3RydWN0KC4uLmFyZ3MpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzcGF0Y2goV1JlZmxlY3RBY3Rpb24uQ09OU1RSVUNULCBhcmdzKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVByb3h5KGludm9rZXIsIGNvbmZpZykge1xuXHRjb25zdCBmbiA9IGZ1bmN0aW9uKCkge307XG5cdGNvbnN0IGhhbmRsZXIgPSBuZXcgUmVtb3RlUHJveHlIYW5kbGVyKGludm9rZXIsIGNvbmZpZyk7XG5cdHJldHVybiBuZXcgUHJveHkoZm4sIGhhbmRsZXIpO1xufVxuZnVuY3Rpb24gd3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgaW52b2tlciwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgdHlwZW9mIGRlc2NyaXB0b3IgIT09IFwib2JqZWN0XCIpIHJldHVybiBkZXNjcmlwdG9yO1xuXHRpZiAoZGVzY3JpcHRvci5wcmltaXRpdmUpIHJldHVybiBkZXNjcmlwdG9yO1xuXHRjb25zdCBjYWNoZWQgPSBkZXNjTWFwLmdldChkZXNjcmlwdG9yKTtcblx0aWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblx0Y29uc3QgcHJveHkgPSBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCB7XG5cdFx0Y2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCA/PyBkZXNjcmlwdG9yLmNoYW5uZWwgPz8gXCJ1bmtub3duXCIsXG5cdFx0YmFzZVBhdGg6IGRlc2NyaXB0b3IucGF0aCA/PyBbXVxuXHR9KTtcblx0ZGVzY01hcC5zZXQoZGVzY3JpcHRvciwgcHJveHkpO1xuXHR3cmFwTWFwLnNldChwcm94eSwgZGVzY3JpcHRvcik7XG5cdHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIGlzUmVtb3RlUHJveHkodmFsdWUpIHtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIFJlZmxlY3QuZ2V0KHZhbHVlLCBQUk9YWV9NQVJLRVIpID09PSB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFByb3h5RGVzY3JpcHRvcih2YWx1ZSkge1xuXHRpZiAoIWlzUmVtb3RlUHJveHkodmFsdWUpKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHZhbHVlLiRkZXNjcmlwdG9yID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRQcm94eUludGVybmFscyh2YWx1ZSkge1xuXHRpZiAoIWlzUmVtb3RlUHJveHkodmFsdWUpKSByZXR1cm4gbnVsbDtcblx0dHJ5IHtcblx0XHRjb25zdCBpbnRlcm5hbHMgPSBSZWZsZWN0LmdldCh2YWx1ZSwgUFJPWFlfSU5URVJOQUxTKTtcblx0XHRpZiAoIWludGVybmFscyB8fCB0eXBlb2YgaW50ZXJuYWxzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gaW50ZXJuYWxzO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuZnVuY3Rpb24gY3JlYXRlRXhwb3NlSGFuZGxlcih0YXJnZXQsIHJlZmxlY3QpIHtcblx0cmV0dXJuIGNyZWF0ZU9iamVjdEhhbmRsZXIodGFyZ2V0LCByZWZsZWN0KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNlbmRlclByb3h5KHNlbmRlciwgYmFzZVBhdGggPSBbXSkge1xuXHRjb25zdCBpbnZva2VyID0gKGFjdGlvbiwgcGF0aCwgYXJncykgPT4ge1xuXHRcdHJldHVybiBzZW5kZXIucmVxdWVzdCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBzZW5kZXIuY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IHNlbmRlci5zZW5kZXJJZCA/PyBcInByb3h5XCIsXG5cdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRhcmdzXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cdHJldHVybiBjcmVhdGVSZW1vdGVQcm94eShpbnZva2VyLCB7XG5cdFx0Y2hhbm5lbDogc2VuZGVyLmNoYW5uZWxOYW1lLFxuXHRcdGJhc2VQYXRoXG5cdH0pO1xufVxudmFyIFByb3h5QnVpbGRlciA9IGNsYXNzIHtcblx0X2NvbmZpZyA9IHt9O1xuXHRfaW52b2tlciA9IG51bGw7XG5cdGNoYW5uZWwobmFtZSkge1xuXHRcdHRoaXMuX2NvbmZpZy5jaGFubmVsID0gbmFtZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRwYXRoKGJhc2VQYXRoKSB7XG5cdFx0dGhpcy5fY29uZmlnLmJhc2VQYXRoID0gYmFzZVBhdGg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0aW52b2tlcihmbikge1xuXHRcdHRoaXMuX2ludm9rZXIgPSBmbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0aW1lb3V0KG1zKSB7XG5cdFx0dGhpcy5fY29uZmlnLnRpbWVvdXQgPSBtcztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRjYWNoZShlbmFibGVkKSB7XG5cdFx0dGhpcy5fY29uZmlnLmNhY2hlID0gZW5hYmxlZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRidWlsZCgpIHtcblx0XHRpZiAoIXRoaXMuX2ludm9rZXIpIHRocm93IG5ldyBFcnJvcihcIkludm9rZXIgaXMgcmVxdWlyZWQuIENhbGwgLmludm9rZXIoKSBiZWZvcmUgLmJ1aWxkKClcIik7XG5cdFx0aWYgKCF0aGlzLl9jb25maWcuY2hhbm5lbCkgdGhyb3cgbmV3IEVycm9yKFwiQ2hhbm5lbCBpcyByZXF1aXJlZC4gQ2FsbCAuY2hhbm5lbCgpIGJlZm9yZSAuYnVpbGQoKVwiKTtcblx0XHRyZXR1cm4gY3JlYXRlUmVtb3RlUHJveHkodGhpcy5faW52b2tlciwgdGhpcy5fY29uZmlnKTtcblx0fVxufTtcbmZ1bmN0aW9uIHByb3h5QnVpbGRlcigpIHtcblx0cmV0dXJuIG5ldyBQcm94eUJ1aWxkZXIoKTtcbn1cbnZhciBtYWtlUmVxdWVzdFByb3h5ID0gd3JhcERlc2NyaXB0b3I7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvaW50ZXJuYWwvQ29ubmVjdGlvbk1vZGVsLnRzXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uS2V5KHBhcmFtcykge1xuXHRyZXR1cm4gW1xuXHRcdHBhcmFtcy5sb2NhbENoYW5uZWwsXG5cdFx0cGFyYW1zLnJlbW90ZUNoYW5uZWwsXG5cdFx0cGFyYW1zLnNlbmRlcixcblx0XHRwYXJhbXMudHJhbnNwb3J0VHlwZSxcblx0XHRwYXJhbXMuZGlyZWN0aW9uXG5cdF0uam9pbihcIjo6XCIpO1xufVxuZnVuY3Rpb24gcXVlcnlDb25uZWN0aW9ucyhjb25uZWN0aW9ucywgcXVlcnkgPSB7fSkge1xuXHRjb25zdCBpbmNsdWRlQ2xvc2VkID0gcXVlcnkuaW5jbHVkZUNsb3NlZCA/PyBmYWxzZTtcblx0Y29uc3QgZGVzaXJlZFN0YXR1cyA9IHF1ZXJ5LnN0YXR1cyA/PyAoaW5jbHVkZUNsb3NlZCA/IHZvaWQgMCA6IFwiYWN0aXZlXCIpO1xuXHRyZXR1cm4gWy4uLmNvbm5lY3Rpb25zXS5maWx0ZXIoKGNvbm5lY3Rpb24pID0+IHtcblx0XHRpZiAoZGVzaXJlZFN0YXR1cyAmJiBjb25uZWN0aW9uLnN0YXR1cyAhPT0gZGVzaXJlZFN0YXR1cykgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS5jaGFubmVsICYmIGNvbm5lY3Rpb24ubG9jYWxDaGFubmVsICE9PSBxdWVyeS5jaGFubmVsICYmIGNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCAhPT0gcXVlcnkuY2hhbm5lbCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS5sb2NhbENoYW5uZWwgJiYgY29ubmVjdGlvbi5sb2NhbENoYW5uZWwgIT09IHF1ZXJ5LmxvY2FsQ2hhbm5lbCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS5yZW1vdGVDaGFubmVsICYmIGNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCAhPT0gcXVlcnkucmVtb3RlQ2hhbm5lbCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS5zZW5kZXIgJiYgY29ubmVjdGlvbi5zZW5kZXIgIT09IHF1ZXJ5LnNlbmRlcikgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS50cmFuc3BvcnRUeXBlICYmIGNvbm5lY3Rpb24udHJhbnNwb3J0VHlwZSAhPT0gcXVlcnkudHJhbnNwb3J0VHlwZSkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChxdWVyeS5kaXJlY3Rpb24gJiYgY29ubmVjdGlvbi5kaXJlY3Rpb24gIT09IHF1ZXJ5LmRpcmVjdGlvbikgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9KS5zb3J0KChhLCBiKSA9PiBiLnVwZGF0ZWRBdCAtIGEudXBkYXRlZEF0KTtcbn1cbnZhciBDb25uZWN0aW9uUmVnaXN0cnkgPSBjbGFzcyB7XG5cdF9jcmVhdGVJZDtcblx0X2VtaXRFdmVudDtcblx0X2Nvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3RydWN0b3IoX2NyZWF0ZUlkLCBfZW1pdEV2ZW50KSB7XG5cdFx0dGhpcy5fY3JlYXRlSWQgPSBfY3JlYXRlSWQ7XG5cdFx0dGhpcy5fZW1pdEV2ZW50ID0gX2VtaXRFdmVudDtcblx0fVxuXHRyZWdpc3RlcihwYXJhbXMpIHtcblx0XHRjb25zdCBrZXkgPSBjcmVhdGVDb25uZWN0aW9uS2V5KHBhcmFtcyk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMuX2Nvbm5lY3Rpb25zLmdldChrZXkpO1xuXHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0ZXhpc3RpbmcudXBkYXRlZEF0ID0gbm93O1xuXHRcdFx0ZXhpc3Rpbmcuc3RhdHVzID0gXCJhY3RpdmVcIjtcblx0XHRcdGV4aXN0aW5nLm1ldGFkYXRhID0ge1xuXHRcdFx0XHQuLi5leGlzdGluZy5tZXRhZGF0YSxcblx0XHRcdFx0Li4ucGFyYW1zLm1ldGFkYXRhXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHRcdH1cblx0XHRjb25zdCBjb25uZWN0aW9uID0ge1xuXHRcdFx0aWQ6IHRoaXMuX2NyZWF0ZUlkKCksXG5cdFx0XHRsb2NhbENoYW5uZWw6IHBhcmFtcy5sb2NhbENoYW5uZWwsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiBwYXJhbXMucmVtb3RlQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogcGFyYW1zLnNlbmRlcixcblx0XHRcdHRyYW5zcG9ydFR5cGU6IHBhcmFtcy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0ZGlyZWN0aW9uOiBwYXJhbXMuZGlyZWN0aW9uLFxuXHRcdFx0c3RhdHVzOiBcImFjdGl2ZVwiLFxuXHRcdFx0Y3JlYXRlZEF0OiBub3csXG5cdFx0XHR1cGRhdGVkQXQ6IG5vdyxcblx0XHRcdG1ldGFkYXRhOiBwYXJhbXMubWV0YWRhdGFcblx0XHR9O1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25zLnNldChrZXksIGNvbm5lY3Rpb24pO1xuXHRcdHRoaXMuX2VtaXRFdmVudD8uKHtcblx0XHRcdHR5cGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRjb25uZWN0aW9uLFxuXHRcdFx0dGltZXN0YW1wOiBub3dcblx0XHR9KTtcblx0XHRyZXR1cm4gY29ubmVjdGlvbjtcblx0fVxuXHRtYXJrTm90aWZpZWQoY29ubmVjdGlvbiwgcGF5bG9hZCkge1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29ubmVjdGlvbi5sYXN0Tm90aWZ5QXQgPSBub3c7XG5cdFx0Y29ubmVjdGlvbi51cGRhdGVkQXQgPSBub3c7XG5cdFx0dGhpcy5fZW1pdEV2ZW50Py4oe1xuXHRcdFx0dHlwZTogXCJub3RpZmllZFwiLFxuXHRcdFx0Y29ubmVjdGlvbixcblx0XHRcdHRpbWVzdGFtcDogbm93LFxuXHRcdFx0cGF5bG9hZFxuXHRcdH0pO1xuXHR9XG5cdGNsb3NlQnlDaGFubmVsKGNoYW5uZWwpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiB0aGlzLl9jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKGNvbm5lY3Rpb24ubG9jYWxDaGFubmVsICE9PSBjaGFubmVsICYmIGNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCAhPT0gY2hhbm5lbCkgY29udGludWU7XG5cdFx0XHRpZiAoY29ubmVjdGlvbi5zdGF0dXMgPT09IFwiY2xvc2VkXCIpIGNvbnRpbnVlO1xuXHRcdFx0Y29ubmVjdGlvbi5zdGF0dXMgPSBcImNsb3NlZFwiO1xuXHRcdFx0Y29ubmVjdGlvbi51cGRhdGVkQXQgPSBub3c7XG5cdFx0XHR0aGlzLl9lbWl0RXZlbnQ/Lih7XG5cdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdGNvbm5lY3Rpb24sXG5cdFx0XHRcdHRpbWVzdGFtcDogbm93XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0Y2xvc2VBbGwoKSB7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcblx0XHRcdGlmIChjb25uZWN0aW9uLnN0YXR1cyA9PT0gXCJjbG9zZWRcIikgY29udGludWU7XG5cdFx0XHRjb25uZWN0aW9uLnN0YXR1cyA9IFwiY2xvc2VkXCI7XG5cdFx0XHRjb25uZWN0aW9uLnVwZGF0ZWRBdCA9IG5vdztcblx0XHRcdHRoaXMuX2VtaXRFdmVudD8uKHtcblx0XHRcdFx0dHlwZTogXCJkaXNjb25uZWN0ZWRcIixcblx0XHRcdFx0Y29ubmVjdGlvbixcblx0XHRcdFx0dGltZXN0YW1wOiBub3dcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRxdWVyeShxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHF1ZXJ5Q29ubmVjdGlvbnModGhpcy5fY29ubmVjdGlvbnMudmFsdWVzKCksIHF1ZXJ5KTtcblx0fVxuXHR2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9jb25uZWN0aW9ucy52YWx1ZXMoKV07XG5cdH1cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuY2xlYXIoKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvY2hhbm5lbC9VbmlmaWVkQ2hhbm5lbC50c1xudmFyIFVuaWZpZWRDaGFubmVsID0gY2xhc3Mge1xuXHRfbmFtZTtcblx0X2NvbnRleHRUeXBlO1xuXHRfY29uZmlnO1xuXHRfdHJhbnNwb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9kZWZhdWx0VHJhbnNwb3J0ID0gbnVsbDtcblx0X2Nvbm5lY3Rpb25FdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAyMDAgfSk7XG5cdF9jb25uZWN0aW9uUmVnaXN0cnkgPSBuZXcgQ29ubmVjdGlvblJlZ2lzdHJ5KCgpID0+IFVVSUR2NCgpLCAoZXZlbnQpID0+IHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMubmV4dChldmVudCkpO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9zdWJzY3JpcHRpb25zID0gW107XG5cdF9pbmJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMTAwIH0pO1xuXHRfb3V0Ym91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9pbnZvY2F0aW9ucyA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X3Jlc3BvbnNlcyA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X2V4cG9zZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfcHJveHlDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuXHRfX2dldFByaXZhdGUoa2V5KSB7XG5cdFx0cmV0dXJuIHRoaXNba2V5XTtcblx0fVxuXHRfX3NldFByaXZhdGUoa2V5LCB2YWx1ZSkge1xuXHRcdHRoaXNba2V5XSA9IHZhbHVlO1xuXHR9XG5cdGNvbnN0cnVjdG9yKGNvbmZpZykge1xuXHRcdGNvbnN0IGNmZyA9IHR5cGVvZiBjb25maWcgPT09IFwic3RyaW5nXCIgPyB7IG5hbWU6IGNvbmZpZyB9IDogY29uZmlnO1xuXHRcdHRoaXMuX25hbWUgPSBjZmcubmFtZTtcblx0XHR0aGlzLl9jb250ZXh0VHlwZSA9IGNmZy5hdXRvRGV0ZWN0ICE9PSBmYWxzZSA/IGRldGVjdENvbnRleHRUeXBlKCkgOiBcInVua25vd25cIjtcblx0XHR0aGlzLl9jb25maWcgPSB7XG5cdFx0XHRuYW1lOiBjZmcubmFtZSxcblx0XHRcdGF1dG9EZXRlY3Q6IGNmZy5hdXRvRGV0ZWN0ID8/IHRydWUsXG5cdFx0XHR0aW1lb3V0OiBjZmcudGltZW91dCA/PyAzZTQsXG5cdFx0XHRyZWZsZWN0OiBjZmcucmVmbGVjdCA/PyBEZWZhdWx0UmVmbGVjdCxcblx0XHRcdGJ1ZmZlclNpemU6IGNmZy5idWZmZXJTaXplID8/IDEwMCxcblx0XHRcdGF1dG9MaXN0ZW46IGNmZy5hdXRvTGlzdGVuID8/IHRydWVcblx0XHR9O1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0xpc3RlbiAmJiB0aGlzLl9pc1dvcmtlckNvbnRleHQoKSkgdGhpcy5saXN0ZW4oc2VsZik7XG5cdH1cblx0Y29ubmVjdCh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBkZXRlY3RUcmFuc3BvcnRUeXBlKHRhcmdldCk7XG5cdFx0Y29uc3QgdGFyZ2V0Q2hhbm5lbCA9IG9wdGlvbnMudGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9pbmZlclRhcmdldENoYW5uZWwodGFyZ2V0LCB0cmFuc3BvcnRUeXBlKTtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5fY3JlYXRlVHJhbnNwb3J0QmluZGluZyh0YXJnZXQsIHRyYW5zcG9ydFR5cGUsIHRhcmdldENoYW5uZWwsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3RyYW5zcG9ydHMuc2V0KHRhcmdldENoYW5uZWwsIGJpbmRpbmcpO1xuXHRcdGlmICghdGhpcy5fZGVmYXVsdFRyYW5zcG9ydCkgdGhpcy5fZGVmYXVsdFRyYW5zcG9ydCA9IGJpbmRpbmc7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX3JlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHRoaXMuX25hbWUsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJvdXRnb2luZ1wiLFxuXHRcdFx0bWV0YWRhdGE6IHsgcGhhc2U6IFwiY29ubmVjdFwiIH1cblx0XHR9KTtcblx0XHR0aGlzLl9lbWl0Q29ubmVjdGlvblNpZ25hbChiaW5kaW5nLCBcImNvbm5lY3RcIiwge1xuXHRcdFx0Y29ubmVjdGlvbklkOiBjb25uZWN0aW9uLmlkLFxuXHRcdFx0ZnJvbTogdGhpcy5fbmFtZSxcblx0XHRcdHRvOiB0YXJnZXRDaGFubmVsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0bGlzdGVuKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgdHJhbnNwb3J0VHlwZSA9IGRldGVjdFRyYW5zcG9ydFR5cGUoc291cmNlKTtcblx0XHRjb25zdCBzb3VyY2VDaGFubmVsID0gb3B0aW9ucy50YXJnZXRDaGFubmVsID8/IHRoaXMuX2luZmVyVGFyZ2V0Q2hhbm5lbChzb3VyY2UsIHRyYW5zcG9ydFR5cGUpO1xuXHRcdGNvbnN0IGhhbmRsZXIgPSAoZGF0YSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZGF0YSk7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX3JlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHRoaXMuX25hbWUsXG5cdFx0XHRyZW1vdGVDaGFubmVsOiBzb3VyY2VDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBzb3VyY2VDaGFubmVsLFxuXHRcdFx0dHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJpbmNvbWluZ1wiLFxuXHRcdFx0bWV0YWRhdGE6IHsgcGhhc2U6IFwibGlzdGVuXCIgfVxuXHRcdH0pO1xuXHRcdHN3aXRjaCAodHJhbnNwb3J0VHlwZSkge1xuXHRcdFx0Y2FzZSBcIndvcmtlclwiOlxuXHRcdFx0Y2FzZSBcIm1lc3NhZ2UtcG9ydFwiOlxuXHRcdFx0Y2FzZSBcImJyb2FkY2FzdFwiOlxuXHRcdFx0XHRpZiAob3B0aW9ucy5hdXRvU3RhcnQgIT09IGZhbHNlICYmIHNvdXJjZS5zdGFydCkgc291cmNlLnN0YXJ0KCk7XG5cdFx0XHRcdHNvdXJjZS5hZGRFdmVudExpc3RlbmVyPy4oXCJtZXNzYWdlXCIsICgoZSkgPT4gaGFuZGxlcihlLmRhdGEpKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIndlYnNvY2tldFwiOlxuXHRcdFx0XHRzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCAoKGUpID0+IHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcihKU09OLnBhcnNlKGUuZGF0YSkpO1xuXHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtcnVudGltZVwiOlxuXHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1zZywgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRoYW5kbGVyKG1zZyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtdGFic1wiOlxuXHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1zZywgc2VuZGVyKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGFiSWQgIT0gbnVsbCAmJiBzZW5kZXI/LnRhYj8uaWQgIT09IG9wdGlvbnMudGFiSWQpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRoYW5kbGVyKG1zZyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjaHJvbWUtcG9ydFwiOlxuXHRcdFx0XHRzb3VyY2U/Lm9uTWVzc2FnZT8uYWRkTGlzdGVuZXI/LigobXNnKSA9PiB7XG5cdFx0XHRcdFx0aGFuZGxlcihtc2cpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLWV4dGVybmFsXCI6XG5cdFx0XHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5hZGRMaXN0ZW5lcj8uKChtc2cpID0+IHtcblx0XHRcdFx0XHRoYW5kbGVyKG1zZyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxmXCI6XG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgKChlKSA9PiBoYW5kbGVyKGUuZGF0YSkpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBpZiAob3B0aW9ucy5vbk1lc3NhZ2UpIG9wdGlvbnMub25NZXNzYWdlKGhhbmRsZXIpO1xuXHRcdH1cblx0XHR0aGlzLl9zZW5kU2lnbmFsVG9UYXJnZXQoc291cmNlLCB0cmFuc3BvcnRUeXBlLCB7XG5cdFx0XHRjb25uZWN0aW9uSWQ6IGNvbm5lY3Rpb24uaWQsXG5cdFx0XHRmcm9tOiB0aGlzLl9uYW1lLFxuXHRcdFx0dG86IHNvdXJjZUNoYW5uZWwsXG5cdFx0XHR0YWJJZDogb3B0aW9ucy50YWJJZCxcblx0XHRcdGV4dGVybmFsSWQ6IG9wdGlvbnMuZXh0ZXJuYWxJZFxuXHRcdH0sIFwibm90aWZ5XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGF0dGFjaCh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLmNvbm5lY3QodGFyZ2V0LCBvcHRpb25zKTtcblx0fVxuXHRleHBvc2UobmFtZSwgb2JqKSB7XG5cdFx0Y29uc3QgcGF0aCA9IFtuYW1lXTtcblx0XHR3cml0ZUJ5UGF0aChwYXRoLCBvYmopO1xuXHRcdHRoaXMuX2V4cG9zZWQuc2V0KG5hbWUsIHtcblx0XHRcdG5hbWUsXG5cdFx0XHRvYmosXG5cdFx0XHRwYXRoXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhwb3NlQWxsKGVudHJpZXMpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB0aGlzLmV4cG9zZShuYW1lLCBvYmopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGFzeW5jIGltcG9ydCh1cmwsIHRhcmdldENoYW5uZWwpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9nZXREZWZhdWx0VGFyZ2V0KCksIFdSZWZsZWN0QWN0aW9uLklNUE9SVCwgW10sIFt1cmxdKTtcblx0fVxuXHRpbnZva2UodGFyZ2V0Q2hhbm5lbCwgYWN0aW9uLCBwYXRoLCBhcmdzID0gW10pIHtcblx0XHRjb25zdCBpZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVycygpO1xuXHRcdHRoaXMuX3BlbmRpbmcuc2V0KGlkLCByZXNvbHZlcnMpO1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wZW5kaW5nLmhhcyhpZCkpIHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoaWQpO1xuXHRcdFx0XHRyZXNvbHZlcnMucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHthY3Rpb259IG9uICR7cGF0aC5qb2luKFwiLlwiKX1gKSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcy5fY29uZmlnLnRpbWVvdXQpO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSB7XG5cdFx0XHRpZCxcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Y2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGFyZ3Ncblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdHRoaXMuX3NlbmQodGFyZ2V0Q2hhbm5lbCwgbWVzc2FnZSk7XG5cdFx0dGhpcy5fb3V0Ym91bmQubmV4dChtZXNzYWdlKTtcblx0XHRyZXR1cm4gcmVzb2x2ZXJzLnByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xuXHR9XG5cdGdldCh0YXJnZXRDaGFubmVsLCBwYXRoLCBwcm9wKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwsIFdSZWZsZWN0QWN0aW9uLkdFVCwgcGF0aCwgW3Byb3BdKTtcblx0fVxuXHRzZXQodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgcHJvcCwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZva2UodGFyZ2V0Q2hhbm5lbCwgV1JlZmxlY3RBY3Rpb24uU0VULCBwYXRoLCBbcHJvcCwgdmFsdWVdKTtcblx0fVxuXHRjYWxsKHRhcmdldENoYW5uZWwsIHBhdGgsIGFyZ3MgPSBbXSkge1xuXHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBXUmVmbGVjdEFjdGlvbi5BUFBMWSwgcGF0aCwgW2FyZ3NdKTtcblx0fVxuXHRjb25zdHJ1Y3QodGFyZ2V0Q2hhbm5lbCwgcGF0aCwgYXJncyA9IFtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52b2tlKHRhcmdldENoYW5uZWwsIFdSZWZsZWN0QWN0aW9uLkNPTlNUUlVDVCwgcGF0aCwgW2FyZ3NdKTtcblx0fVxuXHRwcm94eSh0YXJnZXRDaGFubmVsLCBiYXNlUGF0aCA9IFtdKSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGFyZ2V0Q2hhbm5lbCA/PyB0aGlzLl9nZXREZWZhdWx0VGFyZ2V0KCk7XG5cdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZVByb3h5KHRhcmdldCwgYmFzZVBhdGgpO1xuXHR9XG5cdHJlbW90ZShtb2R1bGVOYW1lLCB0YXJnZXRDaGFubmVsKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJveHkodGFyZ2V0Q2hhbm5lbCwgW21vZHVsZU5hbWVdKTtcblx0fVxuXHR3cmFwRGVzY3JpcHRvcihkZXNjcmlwdG9yLCB0YXJnZXRDaGFubmVsKSB7XG5cdFx0Y29uc3QgaW52b2tlciA9IChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSB0YXJnZXRDaGFubmVsID8/IGRlc2NyaXB0b3I/LmNoYW5uZWwgPz8gdGhpcy5fZ2V0RGVmYXVsdFRhcmdldCgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuaW52b2tlKGNoYW5uZWwsIGFjdGlvbiwgcGF0aCwgYXJncyk7XG5cdFx0fTtcblx0XHRyZXR1cm4gd3JhcERlc2NyaXB0b3IoZGVzY3JpcHRvciwgaW52b2tlciwgdGFyZ2V0Q2hhbm5lbCA/PyBkZXNjcmlwdG9yPy5jaGFubmVsID8/IHRoaXMuX2dldERlZmF1bHRUYXJnZXQoKSk7XG5cdH1cblx0c3Vic2NyaWJlKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5ib3VuZC5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0bmV4dChtZXNzYWdlKSB7XG5cdFx0dGhpcy5fc2VuZChtZXNzYWdlLmNoYW5uZWwsIG1lc3NhZ2UpO1xuXHRcdHRoaXMuX291dGJvdW5kLm5leHQobWVzc2FnZSk7XG5cdH1cblx0ZW1pdCh0YXJnZXRDaGFubmVsLCBldmVudFR5cGUsIGRhdGEpIHtcblx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dHlwZTogZXZlbnRUeXBlLFxuXHRcdFx0XHRkYXRhXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fTtcblx0XHR0aGlzLm5leHQobWVzc2FnZSk7XG5cdH1cblx0bm90aWZ5KHRhcmdldENoYW5uZWwsIHBheWxvYWQgPSB7fSwgdHlwZSA9IFwibm90aWZ5XCIpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gdGhpcy5fdHJhbnNwb3J0cy5nZXQodGFyZ2V0Q2hhbm5lbCk7XG5cdFx0aWYgKCFiaW5kaW5nKSByZXR1cm4gZmFsc2U7XG5cdFx0dGhpcy5fZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgdHlwZSwge1xuXHRcdFx0ZnJvbTogdGhpcy5fbmFtZSxcblx0XHRcdHRvOiB0YXJnZXRDaGFubmVsLFxuXHRcdFx0Li4ucGF5bG9hZFxuXHRcdH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGdldCBvbk1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luYm91bmQ7XG5cdH1cblx0Z2V0IG9uT3V0Ym91bmQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX291dGJvdW5kO1xuXHR9XG5cdGdldCBvbkludm9jYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludm9jYXRpb25zO1xuXHR9XG5cdGdldCBvblJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZXNwb25zZXM7XG5cdH1cblx0Z2V0IG9uQ29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkV2ZW50cztcblx0fVxuXHRzdWJzY3JpYmVDb25uZWN0aW9ucyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXHR9XG5cdHF1ZXJ5Q29ubmVjdGlvbnMocXVlcnkgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkucXVlcnkocXVlcnkpO1xuXHR9XG5cdG5vdGlmeUNvbm5lY3Rpb25zKHBheWxvYWQgPSB7fSwgcXVlcnkgPSB7fSkge1xuXHRcdGxldCBzZW50ID0gMDtcblx0XHRjb25zdCB0YXJnZXRzID0gdGhpcy5xdWVyeUNvbm5lY3Rpb25zKHtcblx0XHRcdC4uLnF1ZXJ5LFxuXHRcdFx0c3RhdHVzOiBcImFjdGl2ZVwiLFxuXHRcdFx0aW5jbHVkZUNsb3NlZDogZmFsc2Vcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGFyZ2V0cykge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KGNvbm5lY3Rpb24ucmVtb3RlQ2hhbm5lbCk7XG5cdFx0XHRpZiAoIWJpbmRpbmcpIGNvbnRpbnVlO1xuXHRcdFx0dGhpcy5fZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgXCJub3RpZnlcIiwge1xuXHRcdFx0XHRjb25uZWN0aW9uSWQ6IGNvbm5lY3Rpb24uaWQsXG5cdFx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHRcdHRvOiBjb25uZWN0aW9uLnJlbW90ZUNoYW5uZWwsXG5cdFx0XHRcdC4uLnBheWxvYWRcblx0XHRcdH0pO1xuXHRcdFx0c2VudCsrO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VudDtcblx0fVxuXHRnZXQgbmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbmFtZTtcblx0fVxuXHRnZXQgY29udGV4dFR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHRUeXBlO1xuXHR9XG5cdGdldCBjb25maWcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbmZpZztcblx0fVxuXHRnZXQgY29ubmVjdGVkQ2hhbm5lbHMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl90cmFuc3BvcnRzLmtleXMoKV07XG5cdH1cblx0Z2V0IGV4cG9zZWRNb2R1bGVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fZXhwb3NlZC5rZXlzKCldO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zID0gW107XG5cdFx0dGhpcy5fcGVuZGluZy5jbGVhcigpO1xuXHRcdHRoaXMuX21hcmtBbGxDb25uZWN0aW9uc0Nsb3NlZCgpO1xuXHRcdGZvciAoY29uc3QgYmluZGluZyBvZiB0aGlzLl90cmFuc3BvcnRzLnZhbHVlcygpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRiaW5kaW5nLmNsZWFudXA/LigpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0aWYgKGJpbmRpbmcudHJhbnNwb3J0VHlwZSA9PT0gXCJtZXNzYWdlLXBvcnRcIiB8fCBiaW5kaW5nLnRyYW5zcG9ydFR5cGUgPT09IFwiYnJvYWRjYXN0XCIpIHRyeSB7XG5cdFx0XHRcdGJpbmRpbmcudGFyZ2V0Py5jbG9zZT8uKCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0fVxuXHRcdHRoaXMuX3RyYW5zcG9ydHMuY2xlYXIoKTtcblx0XHR0aGlzLl9kZWZhdWx0VHJhbnNwb3J0ID0gbnVsbDtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xlYXIoKTtcblx0XHR0aGlzLl9pbmJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fb3V0Ym91bmQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9pbnZvY2F0aW9ucy5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX3Jlc3BvbnNlcy5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMuY29tcGxldGUoKTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuXHRcdHRoaXMuX2luYm91bmQubmV4dChkYXRhKTtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSBcInJlcXVlc3RcIjpcblx0XHRcdFx0aWYgKGRhdGEuY2hhbm5lbCA9PT0gdGhpcy5fbmFtZSkgdGhpcy5faGFuZGxlUmVxdWVzdChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicmVzcG9uc2VcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlUmVzcG9uc2UoZGF0YSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV2ZW50XCI6IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNpZ25hbFwiOiB0aGlzLl9oYW5kbGVTaWduYWwoZGF0YSk7XG5cdFx0fVxuXHR9XG5cdF9oYW5kbGVSZXNwb25zZShkYXRhKSB7XG5cdFx0Y29uc3QgaWQgPSBkYXRhLnJlcUlkID8/IGRhdGEuaWQ7XG5cdFx0Y29uc3QgcmVzb2x2ZXJzID0gdGhpcy5fcGVuZGluZy5nZXQoaWQpO1xuXHRcdGlmIChyZXNvbHZlcnMpIHtcblx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGlkKTtcblx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSByZXNvbHZlcnMucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBkYXRhLnBheWxvYWQ/LnJlc3VsdDtcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IGRhdGEucGF5bG9hZD8uZGVzY3JpcHRvcjtcblx0XHRcdFx0aWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCkgcmVzb2x2ZXJzLnJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0ZWxzZSBpZiAoZGVzY3JpcHRvcikgcmVzb2x2ZXJzLnJlc29sdmUodGhpcy53cmFwRGVzY3JpcHRvcihkZXNjcmlwdG9yLCBkYXRhLnNlbmRlcikpO1xuXHRcdFx0XHRlbHNlIHJlc29sdmVycy5yZXNvbHZlKHZvaWQgMCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9yZXNwb25zZXMubmV4dCh7XG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHJlc3VsdDogZGF0YS5wYXlsb2FkPy5yZXN1bHQsXG5cdFx0XHRcdGRlc2NyaXB0b3I6IGRhdGEucGF5bG9hZD8uZGVzY3JpcHRvcixcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0YXN5bmMgX2hhbmRsZVJlcXVlc3QoZGF0YSkge1xuXHRcdGNvbnN0IHBheWxvYWQgPSBkYXRhLnBheWxvYWQ7XG5cdFx0aWYgKCFwYXlsb2FkKSByZXR1cm47XG5cdFx0Y29uc3QgeyBhY3Rpb24sIHBhdGgsIGFyZ3MsIHNlbmRlciB9ID0gcGF5bG9hZDtcblx0XHRjb25zdCByZXFJZCA9IGRhdGEucmVxSWQgPz8gZGF0YS5pZDtcblx0XHR0aGlzLl9pbnZvY2F0aW9ucy5uZXh0KHtcblx0XHRcdGlkOiByZXFJZCxcblx0XHRcdGNoYW5uZWw6IHRoaXMuX25hbWUsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHRwYXRoLFxuXHRcdFx0YXJnczogYXJncyA/PyBbXSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdGNvbnRleHRUeXBlOiBkZXRlY3RJbmNvbWluZ0NvbnRleHRUeXBlKGRhdGEpXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyByZXN1bHQsIHRvVHJhbnNmZXIsIG5ld1BhdGggfSA9IGF3YWl0IHRoaXMuX2V4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzID8/IFtdLCBzZW5kZXIpO1xuXHRcdGF3YWl0IHRoaXMuX3NlbmRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBzZW5kZXIsIG5ld1BhdGgsIHJlc3VsdCwgdG9UcmFuc2Zlcik7XG5cdH1cblx0YXN5bmMgX2V4ZWN1dGVBY3Rpb24oYWN0aW9uLCBwYXRoLCBhcmdzLCBzZW5kZXIpIHtcblx0XHRjb25zdCB7IHJlc3VsdCwgdG9UcmFuc2ZlciwgcGF0aDogbmV3UGF0aCB9ID0gZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHBhdGgsIGFyZ3MsIHtcblx0XHRcdGNoYW5uZWw6IHRoaXMuX25hbWUsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRyZWZsZWN0OiB0aGlzLl9jb25maWcucmVmbGVjdFxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXN1bHQ6IGF3YWl0IHJlc3VsdCxcblx0XHRcdHRvVHJhbnNmZXIsXG5cdFx0XHRuZXdQYXRoXG5cdFx0fTtcblx0fVxuXHRhc3luYyBfc2VuZFJlc3BvbnNlKHJlcUlkLCBhY3Rpb24sIHNlbmRlciwgcGF0aCwgcmF3UmVzdWx0LCB0b1RyYW5zZmVyKSB7XG5cdFx0Y29uc3QgeyByZXNwb25zZTogY29yZVJlc3BvbnNlLCB0cmFuc2ZlciB9ID0gYXdhaXQgYnVpbGRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCB0aGlzLl9uYW1lLCBzZW5kZXIsIHBhdGgsIHJhd1Jlc3VsdCwgdG9UcmFuc2Zlcik7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSB7XG5cdFx0XHRpZDogcmVxSWQsXG5cdFx0XHQuLi5jb3JlUmVzcG9uc2UsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHR0cmFuc2ZlcmFibGU6IHRyYW5zZmVyXG5cdFx0fTtcblx0XHR0aGlzLl9zZW5kKHNlbmRlciwgcmVzcG9uc2UsIHRyYW5zZmVyKTtcblx0fVxuXHRfaGFuZGxlU2lnbmFsKGRhdGEpIHtcblx0XHRjb25zdCBwYXlsb2FkID0gZGF0YT8ucGF5bG9hZCA/PyB7fTtcblx0XHRjb25zdCByZW1vdGVDaGFubmVsID0gcGF5bG9hZC5mcm9tID8/IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiO1xuXHRcdGNvbnN0IHRyYW5zcG9ydFR5cGUgPSBkYXRhLnRyYW5zcG9ydFR5cGUgPz8gdGhpcy5fdHJhbnNwb3J0cy5nZXQoZGF0YS5jaGFubmVsKT8udHJhbnNwb3J0VHlwZSA/PyBcImludGVybmFsXCI7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX3JlZ2lzdGVyQ29ubmVjdGlvbih7XG5cdFx0XHRsb2NhbENoYW5uZWw6IHRoaXMuX25hbWUsXG5cdFx0XHRyZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyByZW1vdGVDaGFubmVsLFxuXHRcdFx0dHJhbnNwb3J0VHlwZSxcblx0XHRcdGRpcmVjdGlvbjogXCJpbmNvbWluZ1wiXG5cdFx0fSk7XG5cdFx0dGhpcy5fbWFya0Nvbm5lY3Rpb25Ob3RpZmllZChjb25uZWN0aW9uLCBwYXlsb2FkKTtcblx0fVxuXHRfcmVnaXN0ZXJDb25uZWN0aW9uKHBhcmFtcykge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkucmVnaXN0ZXIocGFyYW1zKTtcblx0fVxuXHRfbWFya0Nvbm5lY3Rpb25Ob3RpZmllZChjb25uZWN0aW9uLCBwYXlsb2FkKSB7XG5cdFx0dGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5Lm1hcmtOb3RpZmllZChjb25uZWN0aW9uLCBwYXlsb2FkKTtcblx0fVxuXHRfZW1pdENvbm5lY3Rpb25TaWduYWwoYmluZGluZywgc2lnbmFsVHlwZSwgcGF5bG9hZCA9IHt9KSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRjaGFubmVsOiBiaW5kaW5nLnRhcmdldENoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX25hbWUsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBiaW5kaW5nLnRyYW5zcG9ydFR5cGUsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IHNpZ25hbFR5cGUsXG5cdFx0XHRcdGZyb206IHRoaXMuX25hbWUsXG5cdFx0XHRcdHRvOiBiaW5kaW5nLnRhcmdldENoYW5uZWwsXG5cdFx0XHRcdC4uLnBheWxvYWRcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdChiaW5kaW5nPy5zZW5kZXIgPz8gYmluZGluZz8ucG9zdE1lc3NhZ2UpPy5jYWxsKGJpbmRpbmcsIG1lc3NhZ2UpO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9yZWdpc3RlckNvbm5lY3Rpb24oe1xuXHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9uYW1lLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogYmluZGluZy50YXJnZXRDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogYmluZGluZy50cmFuc3BvcnRUeXBlLFxuXHRcdFx0ZGlyZWN0aW9uOiBcIm91dGdvaW5nXCJcblx0XHR9KTtcblx0XHR0aGlzLl9tYXJrQ29ubmVjdGlvbk5vdGlmaWVkKGNvbm5lY3Rpb24sIG1lc3NhZ2UucGF5bG9hZCk7XG5cdH1cblx0X3NlbmRTaWduYWxUb1RhcmdldCh0YXJnZXQsIHRyYW5zcG9ydFR5cGUsIHBheWxvYWQsIHNpZ25hbFR5cGUpIHtcblx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdGNoYW5uZWw6IHBheWxvYWQudG8gPz8gdGhpcy5fbmFtZSxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHRyYW5zcG9ydFR5cGUsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IHNpZ25hbFR5cGUsXG5cdFx0XHRcdC4uLnBheWxvYWRcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJ3ZWJzb2NrZXRcIikge1xuXHRcdFx0XHR0YXJnZXQ/LnNlbmQ/LihKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcImNocm9tZS1ydW50aW1lXCIpIHtcblx0XHRcdFx0Y2hyb21lLnJ1bnRpbWU/LnNlbmRNZXNzYWdlPy4obWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcImNocm9tZS10YWJzXCIpIHtcblx0XHRcdFx0Y29uc3QgdGFiSWQgPSBwYXlsb2FkLnRhYklkO1xuXHRcdFx0XHRpZiAodGFiSWQgIT0gbnVsbCkgY2hyb21lLnRhYnM/LnNlbmRNZXNzYWdlPy4odGFiSWQsIG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJjaHJvbWUtcG9ydFwiKSB7XG5cdFx0XHRcdHRhcmdldD8ucG9zdE1lc3NhZ2U/LihtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRyYW5zcG9ydFR5cGUgPT09IFwiY2hyb21lLWV4dGVybmFsXCIpIHtcblx0XHRcdFx0aWYgKHBheWxvYWQuZXh0ZXJuYWxJZCkgY2hyb21lLnJ1bnRpbWU/LnNlbmRNZXNzYWdlPy4ocGF5bG9hZC5leHRlcm5hbElkLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFyZ2V0Py5wb3N0TWVzc2FnZT8uKG1lc3NhZ2UsIHsgdHJhbnNmZXI6IFtdIH0pO1xuXHRcdH0gY2F0Y2gge31cblx0fVxuXHRfbWFya0FsbENvbm5lY3Rpb25zQ2xvc2VkKCkge1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5jbG9zZUFsbCgpO1xuXHR9XG5cdF9jcmVhdGVUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCwgdHJhbnNwb3J0VHlwZSwgdGFyZ2V0Q2hhbm5lbCwgb3B0aW9ucykge1xuXHRcdGxldCBzZW5kZXI7XG5cdFx0bGV0IGNsZWFudXA7XG5cdFx0c3dpdGNoICh0cmFuc3BvcnRUeXBlKSB7XG5cdFx0XHRjYXNlIFwid29ya2VyXCI6XG5cdFx0XHRjYXNlIFwibWVzc2FnZS1wb3J0XCI6XG5cdFx0XHRjYXNlIFwiYnJvYWRjYXN0XCI6XG5cdFx0XHRcdGlmIChvcHRpb25zLmF1dG9TdGFydCAhPT0gZmFsc2UgJiYgdGFyZ2V0LnN0YXJ0KSB0YXJnZXQuc3RhcnQoKTtcblx0XHRcdFx0c2VuZGVyID0gKG1zZywgdHJhbnNmZXIpID0+IHRhcmdldC5wb3N0TWVzc2FnZShtc2csIHsgdHJhbnNmZXIgfSk7XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9ICgoZSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZS5kYXRhKSk7XG5cdFx0XHRcdFx0dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCBsaXN0ZW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwid2Vic29ja2V0XCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHRhcmdldC5zZW5kKEpTT04uc3RyaW5naWZ5KG1zZykpO1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAoKGUpID0+IHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nKEpTT04ucGFyc2UoZS5kYXRhKSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgbGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCBsaXN0ZW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXJ1bnRpbWVcIjpcblx0XHRcdFx0c2VuZGVyID0gKG1zZykgPT4gY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UobXNnKTtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKTtcblx0XHRcdFx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2U/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNocm9tZS10YWJzXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHtcblx0XHRcdFx0XHRpZiAob3B0aW9ucy50YWJJZCAhPSBudWxsKSBjaHJvbWUudGFicz8uc2VuZE1lc3NhZ2U/LihvcHRpb25zLnRhYklkLCBtc2cpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnLCBzZW5kZXJNZXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob3B0aW9ucy50YWJJZCAhPSBudWxsICYmIHNlbmRlck1ldGE/LnRhYj8uaWQgIT09IG9wdGlvbnMudGFiSWQpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZT8uYWRkTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZT8ucmVtb3ZlTGlzdGVuZXI/LihsaXN0ZW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLXBvcnRcIjpcblx0XHRcdFx0aWYgKHRhcmdldD8ucG9zdE1lc3NhZ2UgJiYgdGFyZ2V0Py5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyKSB7XG5cdFx0XHRcdFx0c2VuZGVyID0gKG1zZykgPT4gdGFyZ2V0LnBvc3RNZXNzYWdlKG1zZyk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpO1xuXHRcdFx0XHRcdHRhcmdldC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGNsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC5kaXNjb25uZWN0Py4oKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHBvcnROYW1lID0gb3B0aW9ucy5wb3J0TmFtZSA/PyB0YXJnZXRDaGFubmVsO1xuXHRcdFx0XHRcdGNvbnN0IHBvcnQgPSBvcHRpb25zLnRhYklkICE9IG51bGwgJiYgY2hyb21lLnRhYnM/LmNvbm5lY3QgPyBjaHJvbWUudGFicy5jb25uZWN0KG9wdGlvbnMudGFiSWQsIHsgbmFtZTogcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogcG9ydE5hbWUgfSk7XG5cdFx0XHRcdFx0c2VuZGVyID0gKG1zZykgPT4gcG9ydC5wb3N0TWVzc2FnZShtc2cpO1xuXHRcdFx0XHRcdGNvbnN0IGxpc3RlbmVyID0gKG1zZykgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcobXNnKTtcblx0XHRcdFx0XHRwb3J0Lm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHBvcnQub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge31cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHBvcnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY2hyb21lLWV4dGVybmFsXCI6XG5cdFx0XHRcdHNlbmRlciA9IChtc2cpID0+IHtcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5leHRlcm5hbElkKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShvcHRpb25zLmV4dGVybmFsSWQsIG1zZyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsaXN0ZW5lciA9IChtc2cpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2hhbmRsZUluY29taW5nKG1zZyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5hZGRMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRjbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWw/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGZcIjpcblx0XHRcdFx0c2VuZGVyID0gKG1zZywgdHJhbnNmZXIpID0+IGdsb2JhbFRoaXMucG9zdE1lc3NhZ2U/Lihtc2csIHsgdHJhbnNmZXI6IHRyYW5zZmVyID8/IFtdIH0pO1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAoKGUpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGUuZGF0YSkpO1xuXHRcdFx0XHRcdGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCBsaXN0ZW5lcik7XG5cdFx0XHRcdFx0Y2xlYW51cCA9ICgpID0+IGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcj8uKFwibWVzc2FnZVwiLCBsaXN0ZW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAob3B0aW9ucy5vbk1lc3NhZ2UpIGNsZWFudXAgPSBvcHRpb25zLm9uTWVzc2FnZSgobXNnKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhtc2cpKTtcblx0XHRcdFx0c2VuZGVyID0gKG1zZykgPT4gdGFyZ2V0Py5wb3N0TWVzc2FnZT8uKG1zZyk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXQsXG5cdFx0XHR0YXJnZXRDaGFubmVsLFxuXHRcdFx0dHJhbnNwb3J0VHlwZSxcblx0XHRcdHNlbmRlcixcblx0XHRcdGNsZWFudXAsXG5cdFx0XHRwb3N0TWVzc2FnZTogKG1lc3NhZ2UsIG9wdGlvbnMpID0+IHNlbmRlcj8uKG1lc3NhZ2UsIG9wdGlvbnMpLFxuXHRcdFx0c3RhcnQ6ICgpID0+IHRhcmdldD8uc3RhcnQ/LigpLFxuXHRcdFx0Y2xvc2U6ICgpID0+IHRhcmdldD8uY2xvc2U/LigpXG5cdFx0fTtcblx0fVxuXHRfc2VuZCh0YXJnZXRDaGFubmVsLCBtZXNzYWdlLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSB0aGlzLl90cmFuc3BvcnRzLmdldCh0YXJnZXRDaGFubmVsKSA/PyB0aGlzLl9kZWZhdWx0VHJhbnNwb3J0O1xuXHRcdChiaW5kaW5nPy5zZW5kZXIgPz8gYmluZGluZz8ucG9zdE1lc3NhZ2UpPy5jYWxsKGJpbmRpbmcsIG1lc3NhZ2UsIHRyYW5zZmVyKTtcblx0fVxuXHRfZ2V0RGVmYXVsdFRhcmdldCgpIHtcblx0XHRpZiAodGhpcy5fZGVmYXVsdFRyYW5zcG9ydCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRUcmFuc3BvcnQudGFyZ2V0Q2hhbm5lbDtcblx0XHRyZXR1cm4gXCJ3b3JrZXJcIjtcblx0fVxuXHRfaW5mZXJUYXJnZXRDaGFubmVsKHRhcmdldCwgdHJhbnNwb3J0VHlwZSkge1xuXHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcIndvcmtlclwiKSByZXR1cm4gXCJ3b3JrZXJcIjtcblx0XHRpZiAodHJhbnNwb3J0VHlwZSA9PT0gXCJicm9hZGNhc3RcIiAmJiB0YXJnZXQubmFtZSkgcmV0dXJuIHRhcmdldC5uYW1lO1xuXHRcdGlmICh0cmFuc3BvcnRUeXBlID09PSBcInNlbGZcIikgcmV0dXJuIFwic2VsZlwiO1xuXHRcdHJldHVybiBgJHt0cmFuc3BvcnRUeXBlfS0ke1VVSUR2NCgpLnNsaWNlKDAsIDgpfWA7XG5cdH1cblx0X2NyZWF0ZVByb3h5KHRhcmdldENoYW5uZWwsIGJhc2VQYXRoKSB7XG5cdFx0Y29uc3QgaW52b2tlciA9IChhY3Rpb24sIHBhdGgsIGFyZ3MpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmludm9rZSh0YXJnZXRDaGFubmVsLCBhY3Rpb24sIHBhdGgsIGFyZ3MpO1xuXHRcdH07XG5cdFx0cmV0dXJuIGNyZWF0ZVJlbW90ZVByb3h5KGludm9rZXIsIHtcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwsXG5cdFx0XHRiYXNlUGF0aCxcblx0XHRcdGNhY2hlOiB0cnVlLFxuXHRcdFx0dGltZW91dDogdGhpcy5fY29uZmlnLnRpbWVvdXRcblx0XHR9KTtcblx0fVxuXHRfaXNXb3JrZXJDb250ZXh0KCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHRcIndvcmtlclwiLFxuXHRcdFx0XCJzaGFyZWQtd29ya2VyXCIsXG5cdFx0XHRcInNlcnZpY2Utd29ya2VyXCJcblx0XHRdLmluY2x1ZGVzKHRoaXMuX2NvbnRleHRUeXBlKTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVVuaWZpZWRDaGFubmVsKGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFVuaWZpZWRDaGFubmVsKGNvbmZpZyk7XG59XG5mdW5jdGlvbiBzZXR1cFVuaWZpZWRDaGFubmVsKG5hbWUsIHRhcmdldCwgb3B0aW9ucykge1xuXHRyZXR1cm4gY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdG5hbWUsXG5cdFx0Li4ub3B0aW9uc1xuXHR9KS5hdHRhY2godGFyZ2V0LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMpIHtcblx0Y29uc3QgbWMgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0bWMucG9ydDEuc3RhcnQoKTtcblx0bWMucG9ydDIuc3RhcnQoKTtcblx0cmV0dXJuIHtcblx0XHRjaGFubmVsMTogY3JlYXRlVW5pZmllZENoYW5uZWwoe1xuXHRcdFx0bmFtZTogbmFtZTEsXG5cdFx0XHRhdXRvTGlzdGVuOiBmYWxzZSxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KS5hdHRhY2gobWMucG9ydDEsIHsgdGFyZ2V0Q2hhbm5lbDogbmFtZTIgfSksXG5cdFx0Y2hhbm5lbDI6IGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRcdG5hbWU6IG5hbWUyLFxuXHRcdFx0YXV0b0xpc3RlbjogZmFsc2UsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSkuYXR0YWNoKG1jLnBvcnQyLCB7IHRhcmdldENoYW5uZWw6IG5hbWUxIH0pLFxuXHRcdG1lc3NhZ2VDaGFubmVsOiBtY1xuXHR9O1xufVxudmFyIENIQU5ORUxfUkVHSVNUUlkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0VW5pZmllZENoYW5uZWwobmFtZSwgY29uZmlnKSB7XG5cdGlmICghQ0hBTk5FTF9SRUdJU1RSWS5oYXMobmFtZSkpIENIQU5ORUxfUkVHSVNUUlkuc2V0KG5hbWUsIGNyZWF0ZVVuaWZpZWRDaGFubmVsKHtcblx0XHRuYW1lLFxuXHRcdC4uLmNvbmZpZ1xuXHR9KSk7XG5cdHJldHVybiBDSEFOTkVMX1JFR0lTVFJZLmdldChuYW1lKTtcbn1cbmZ1bmN0aW9uIGdldFVuaWZpZWRDaGFubmVsTmFtZXMoKSB7XG5cdHJldHVybiBbLi4uQ0hBTk5FTF9SRUdJU1RSWS5rZXlzKCldO1xufVxuZnVuY3Rpb24gY2xvc2VVbmlmaWVkQ2hhbm5lbChuYW1lKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBDSEFOTkVMX1JFR0lTVFJZLmdldChuYW1lKTtcblx0aWYgKGNoYW5uZWwpIHtcblx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0cmV0dXJuIENIQU5ORUxfUkVHSVNUUlkuZGVsZXRlKG5hbWUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbnZhciBXT1JLRVJfQ0hBTk5FTCA9IG51bGw7XG5mdW5jdGlvbiBnZXRXb3JrZXJDaGFubmVsKCkge1xuXHRpZiAoIVdPUktFUl9DSEFOTkVMKSB7XG5cdFx0Y29uc3QgY29udGV4dFR5cGUgPSBkZXRlY3RDb250ZXh0VHlwZSgpO1xuXHRcdGlmIChbXG5cdFx0XHRcIndvcmtlclwiLFxuXHRcdFx0XCJzaGFyZWQtd29ya2VyXCIsXG5cdFx0XHRcInNlcnZpY2Utd29ya2VyXCJcblx0XHRdLmluY2x1ZGVzKGNvbnRleHRUeXBlKSkgV09SS0VSX0NIQU5ORUwgPSBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBcIndvcmtlclwiLFxuXHRcdFx0YXV0b0xpc3RlbjogdHJ1ZVxuXHRcdH0pO1xuXHRcdGVsc2UgV09SS0VSX0NIQU5ORUwgPSBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBcImhvc3RcIixcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIFdPUktFUl9DSEFOTkVMO1xufVxuZnVuY3Rpb24gZXhwb3NlRnJvbVVuaWZpZWQobmFtZSwgb2JqKSB7XG5cdGdldFdvcmtlckNoYW5uZWwoKS5leHBvc2UobmFtZSwgb2JqKTtcbn1cbmZ1bmN0aW9uIHJlbW90ZUZyb21VbmlmaWVkKG1vZHVsZU5hbWUsIHRhcmdldENoYW5uZWwpIHtcblx0cmV0dXJuIGdldFdvcmtlckNoYW5uZWwoKS5yZW1vdGUobW9kdWxlTmFtZSwgdGFyZ2V0Q2hhbm5lbCk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3Byb3h5L1JlcXVlc3RQcm94eS50c1xudmFyIHdyYXBDaGFubmVsID0gKGNvbm5lY3RDaGFubmVsLCBob3N0ID0gbnVsbCkgPT4ge1xuXHRyZXR1cm4gZ2V0V29ya2VyQ2hhbm5lbCgpLnByb3h5KGNvbm5lY3RDaGFubmVsKTtcbn07XG52YXIgd3JhcE9ic2VydmFibGVDaGFubmVsID0gKGNoYW5uZWxPYnMsIGNvbm5lY3RDaGFubmVsLCBvcHRpb25zID0ge30pID0+IHdyYXBDaGFubmVsKGNvbm5lY3RDaGFubmVsLCBudWxsKTtcbnZhciBtYWtlT2JzZXJ2YWJsZVJlcXVlc3RQcm94eSA9IChkZXNjcmlwdG9yLCBjaGFubmVsT2JzLCBvcHRpb25zID0ge30pID0+IHtcblx0cmV0dXJuIGdldFdvcmtlckNoYW5uZWwoKS53cmFwRGVzY3JpcHRvcihkZXNjcmlwdG9yLCBkZXNjcmlwdG9yPy5jaGFubmVsID8/IG9wdGlvbnM/LmNvbm5lY3RDaGFubmVsKTtcbn07XG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCh0cmFuc3BvcnQsIGNoYW5uZWxOYW1lKSB7XG5cdGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0bmFtZTogY2hhbm5lbE5hbWUsXG5cdFx0YXV0b0xpc3RlbjogZmFsc2Vcblx0fSk7XG5cdGNoYW5uZWwuY29ubmVjdCh0cmFuc3BvcnQsIHsgdGFyZ2V0Q2hhbm5lbDogY2hhbm5lbE5hbWUgfSk7XG5cdHJldHVybiB7XG5cdFx0b2JzZXJ2YWJsZTogY2hhbm5lbCxcblx0XHR3cmFwOiAoY29ubmVjdENoYW5uZWwsIG9wdHMpID0+IGNoYW5uZWwucHJveHkoY29ubmVjdENoYW5uZWwpLFxuXHRcdHN1YnNjcmliZTogKG9icykgPT4gY2hhbm5lbC5zdWJzY3JpYmUob2JzKSxcblx0XHRzZW5kOiAobXNnKSA9PiBjaGFubmVsLm5leHQobXNnKSxcblx0XHRyZXF1ZXN0OiAobXNnKSA9PiBjaGFubmVsLmludm9rZShjaGFubmVsTmFtZSwgV1JlZmxlY3RBY3Rpb24uQ0FMTCwgW10sIFttc2ddKVxuXHR9O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvY29yZS9BbGlhcy50c1xudmFyIFRTID0ge1xuXHRyamI6IFwicmVqZWN0QnlcIixcblx0cnZiOiBcInJlc29sdmVCeVwiLFxuXHRyajogXCJyZWplY3RcIixcblx0cnY6IFwicmVzb2x2ZVwiLFxuXHRjcjogXCJjcmVhdGVcIixcblx0Y3M6IFwiY3JlYXRlU3luY1wiLFxuXHRhOiBcImFycmF5XCIsXG5cdHRhOiBcInR5cGVkYXJyYXlcIixcblx0dWRmOiBcInVuZGVmaW5lZFwiXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvY29yZS9Vc2VmdWwudHNcbnZhciBUcmFuc2ZlcmFibGUgPSBbXG5cdHR5cGVvZiBBcnJheUJ1ZmZlciAhPSBUUy51ZGYgPyBBcnJheUJ1ZmZlciA6IG51bGwsXG5cdHR5cGVvZiBNZXNzYWdlUG9ydCAhPSBUUy51ZGYgPyBNZXNzYWdlUG9ydCA6IG51bGwsXG5cdHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPSBUUy51ZGYgPyBSZWFkYWJsZVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBXcml0YWJsZVN0cmVhbSAhPSBUUy51ZGYgPyBXcml0YWJsZVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBUcmFuc2Zvcm1TdHJlYW0gIT0gVFMudWRmID8gVHJhbnNmb3JtU3RyZWFtIDogbnVsbCxcblx0dHlwZW9mIFdlYlRyYW5zcG9ydFJlY2VpdmVTdHJlYW0gIT0gVFMudWRmID8gV2ViVHJhbnNwb3J0UmVjZWl2ZVN0cmVhbSA6IG51bGwsXG5cdHR5cGVvZiBXZWJUcmFuc3BvcnRTZW5kU3RyZWFtICE9IFRTLnVkZiA/IFdlYlRyYW5zcG9ydFNlbmRTdHJlYW0gOiBudWxsLFxuXHR0eXBlb2YgQXVkaW9EYXRhICE9IFRTLnVkZiA/IEF1ZGlvRGF0YSA6IG51bGwsXG5cdHR5cGVvZiBJbWFnZUJpdG1hcCAhPSBUUy51ZGYgPyBJbWFnZUJpdG1hcCA6IG51bGwsXG5cdHR5cGVvZiBWaWRlb0ZyYW1lICE9IFRTLnVkZiA/IFZpZGVvRnJhbWUgOiBudWxsLFxuXHR0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9IFRTLnVkZiA/IE9mZnNjcmVlbkNhbnZhcyA6IG51bGwsXG5cdHR5cGVvZiBSVENEYXRhQ2hhbm5lbCAhPSBUUy51ZGYgPyBSVENEYXRhQ2hhbm5lbCA6IG51bGxcbl0uZmlsdGVyKChFKSA9PiBFICE9IG51bGwpO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC91dGlscy9FbnYudHNcbnZhciBpc1NlcnZpY2VXb3JrZXJDb250ZXh0ID0gKCkgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IFNXR1MgPSBnbG9iYWxUaGlzPy5TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cdFx0cmV0dXJuIHR5cGVvZiBTV0dTICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbFRoaXMgaW5zdGFuY2VvZiBTV0dTO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0ID0gKCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiB0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmICEhY2hyb21lPy5ydW50aW1lPy5pZDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGRldGVjdEV4ZWN1dGlvbkNvbnRleHQgPSAoKSA9PiB7XG5cdGlmIChpc0Nocm9tZUV4dGVuc2lvbkNvbnRleHQoKSkgcmV0dXJuIFwiY2hyb21lLWV4dGVuc2lvblwiO1xuXHRpZiAoaXNTZXJ2aWNlV29ya2VyQ29udGV4dCgpKSByZXR1cm4gXCJzZXJ2aWNlLXdvcmtlclwiO1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIm1haW5cIjtcblx0fSBjYXRjaCB7fVxuXHRyZXR1cm4gXCJ1bmtub3duXCI7XG59O1xudmFyIHN1cHBvcnRzRGVkaWNhdGVkV29ya2VycyA9ICgpID0+IHtcblx0aWYgKGlzU2VydmljZVdvcmtlckNvbnRleHQoKSkgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdHJldHVybiB0eXBlb2YgV29ya2VyICE9PSBcInVuZGVmaW5lZFwiO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5mdW5jdGlvbiBnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCgpIHtcblx0dHJ5IHtcblx0XHRjb25zdCBocmVmID0gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZjtcblx0XHRpZiAodHlwZW9mIGhyZWYgPT09IFwic3RyaW5nXCIgJiYgaHJlZi5sZW5ndGggPiAwKSByZXR1cm4gaHJlZjtcblx0fSBjYXRjaCB7fVxuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50LmJhc2VVUkkgPT09IFwic3RyaW5nXCIgJiYgZG9jdW1lbnQuYmFzZVVSSS5sZW5ndGggPiAwKSByZXR1cm4gZG9jdW1lbnQuYmFzZVVSSTtcblx0fSBjYXRjaCB7fVxuXHRyZXR1cm4gXCJcIjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKHNwZWMpIHtcblx0Y29uc3QgYmFzZSA9IGdldFdvcmtlclJlc29sdmVCYXNlVXJsKCk7XG5cdGlmICghYmFzZS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJbdW5pZm9ybV0gTm8gYmFzZSBVUkwgZm9yIHdvcmtlciByZXNvbHV0aW9uIChtaXNzaW5nIGxvY2F0aW9uIC8gZG9jdW1lbnQuYmFzZVVSSSlcIik7XG5cdGNvbnN0IG5vcm1hbGl6ZWQgPSBzcGVjLnN0YXJ0c1dpdGgoXCIvXCIpID8gc3BlYy5yZXBsYWNlKC9eXFwvLywgXCIuL1wiKSA6IHNwZWM7XG5cdHJldHVybiBuZXcgVVJMKG5vcm1hbGl6ZWQsIGJhc2UpLmhyZWY7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvQ2hhbm5lbHMudHNcbnZhciBSZW1vdGVDaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgU0VMRl9DSEFOTkVMID0ge1xuXHRuYW1lOiBcInVua25vd25cIixcblx0aW5zdGFuY2U6IG51bGxcbn07XG52YXIgQ0hBTk5FTF9NQVAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGlzUmVmbGVjdEFjdGlvbiQxID0gKGFjdGlvbikgPT4gWy4uLk9iamVjdC52YWx1ZXMoV1JlZmxlY3RBY3Rpb24pXS5pbmNsdWRlcyhhY3Rpb24pO1xudmFyIGxvYWRXb3JrZXIgPSAoV1gpID0+IHtcblx0aWYgKFdYIGluc3RhbmNlb2YgV29ya2VyKSByZXR1cm4gV1g7XG5cdGlmIChXWCBpbnN0YW5jZW9mIFVSTCkgcmV0dXJuIG5ldyBXb3JrZXIoV1guaHJlZiwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRpZiAodHlwZW9mIFdYID09PSBcImZ1bmN0aW9uXCIpIHRyeSB7XG5cdFx0cmV0dXJuIG5ldyBXWCh7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBXWCh7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdH1cblx0aWYgKHR5cGVvZiBXWCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChXWC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoV1gucmVwbGFjZSgvXlxcLy8sIFwiLi9cIikpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0aWYgKFVSTC5jYW5QYXJzZShXWCkgfHwgV1guc3RhcnRzV2l0aChcIi4vXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihXWCksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHRyZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtXWF0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIgfSkpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdH1cblx0aWYgKFdYIGluc3RhbmNlb2YgQmxvYiB8fCBXWCBpbnN0YW5jZW9mIEZpbGUpIHJldHVybiBuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwoV1gpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdHJldHVybiBXWCA/PyAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCk7XG59O1xudmFyIFJlbW90ZUNoYW5uZWxIZWxwZXIgPSBjbGFzcyB7XG5cdGNoYW5uZWxOYW1lO1xuXHRvcHRpb25zO1xuXHRfY2hhbm5lbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBnZXRXb3JrZXJDaGFubmVsKCk7XG5cdH1cblx0cmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikgcGF0aCA9IFtwYXRoXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24pICYmIGlzUmVmbGVjdEFjdGlvbiQxKHBhdGgpKSB7XG5cdFx0XHRvcHRpb25zID0gYXJncztcblx0XHRcdGFyZ3MgPSBhY3Rpb247XG5cdFx0XHRhY3Rpb24gPSBwYXRoO1xuXHRcdFx0cGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5pbnZva2UodGhpcy5jaGFubmVsTmFtZSwgYWN0aW9uLCBwYXRoLCBhcmdzKTtcblx0fVxuXHRkb0ltcG9ydE1vZHVsZSh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbC5pbXBvcnQodXJsLCB0aGlzLmNoYW5uZWxOYW1lKTtcblx0fVxufTtcbnZhciBDaGFubmVsSGFuZGxlciA9IGNsYXNzIHtcblx0Y2hhbm5lbDtcblx0b3B0aW9ucztcblx0X3VuaWZpZWQ7XG5cdGJyb2FkY2FzdHMgPSB7fTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5jaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuX3VuaWZpZWQgPSBjcmVhdGVVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBjaGFubmVsLFxuXHRcdFx0YXV0b0xpc3RlbjogZmFsc2Vcblx0XHR9KTtcblx0XHRTRUxGX0NIQU5ORUwubmFtZSA9IGNoYW5uZWw7XG5cdFx0U0VMRl9DSEFOTkVMLmluc3RhbmNlID0gdGhpcztcblx0fVxuXHRjcmVhdGVSZW1vdGVDaGFubmVsKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSB7XG5cdFx0aWYgKGJyb2FkY2FzdCkge1xuXHRcdFx0dGhpcy5fdW5pZmllZC5hdHRhY2goYnJvYWRjYXN0LCB7IHRhcmdldENoYW5uZWw6IGNoYW5uZWwgfSk7XG5cdFx0XHR0aGlzLmJyb2FkY2FzdHNbY2hhbm5lbF0gPSBicm9hZGNhc3Q7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFJlbW90ZUNoYW5uZWxIZWxwZXIoY2hhbm5lbCwgb3B0aW9ucykpO1xuXHR9XG5cdGdldENoYW5uZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hhbm5lbDtcblx0fVxuXHRyZXF1ZXN0KHBhdGgsIGFjdGlvbiwgYXJncywgb3B0aW9ucyA9IHt9LCB0b0NoYW5uZWwgPSBcIndvcmtlclwiKSB7XG5cdFx0aWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiKSBwYXRoID0gW3BhdGhdO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFjdGlvbikgJiYgaXNSZWZsZWN0QWN0aW9uJDEocGF0aCkpIHtcblx0XHRcdHRvQ2hhbm5lbCA9IG9wdGlvbnM7XG5cdFx0XHRvcHRpb25zID0gYXJncztcblx0XHRcdGFyZ3MgPSBhY3Rpb247XG5cdFx0XHRhY3Rpb24gPSBwYXRoO1xuXHRcdFx0cGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5pbnZva2UodG9DaGFubmVsLCBhY3Rpb24sIHBhdGgsIGFyZ3MpO1xuXHR9XG5cdHJlc29sdmVSZXNwb25zZShyZXFJZCwgcmVzdWx0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuXHR9XG5cdGFzeW5jIGhhbmRsZUFuZFJlc3BvbnNlKHJlcXVlc3QsIHJlcUlkLCByZXNwb25zZUZuKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUmVxdWVzdChyZXF1ZXN0LCByZXFJZCwgdGhpcy5jaGFubmVsKTtcblx0XHRpZiAoIXJlc3VsdCkgcmV0dXJuO1xuXHRcdHJlc3BvbnNlRm4/LihyZXN1bHQucmVzcG9uc2UsIHJlc3VsdC50cmFuc2Zlcik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fdW5pZmllZC5jbG9zZSgpO1xuXHR9XG59O1xudmFyIGluaXRDaGFubmVsSGFuZGxlciA9IChjaGFubmVsID0gXCIkaG9zdCRcIikgPT4ge1xuXHRpZiAoU0VMRl9DSEFOTkVMPy5pbnN0YW5jZSAmJiBjaGFubmVsID09PSBcIiRob3N0JFwiKSByZXR1cm4gU0VMRl9DSEFOTkVMLmluc3RhbmNlO1xuXHRpZiAoQ0hBTk5FTF9NQVAuaGFzKGNoYW5uZWwpKSByZXR1cm4gQ0hBTk5FTF9NQVAuZ2V0KGNoYW5uZWwpID8/IG51bGw7XG5cdGNvbnN0ICRjaGFubmVsID0gbmV3IENoYW5uZWxIYW5kbGVyKGNoYW5uZWwpO1xuXHRpZiAoY2hhbm5lbCA9PT0gXCIkaG9zdCRcIikge1xuXHRcdFNFTEZfQ0hBTk5FTC5uYW1lID0gY2hhbm5lbDtcblx0XHRTRUxGX0NIQU5ORUwuaW5zdGFuY2UgPSAkY2hhbm5lbDtcblx0fVxuXHRDSEFOTkVMX01BUC5zZXQoY2hhbm5lbCwgJGNoYW5uZWwpO1xuXHRyZXR1cm4gJGNoYW5uZWw7XG59O1xudmFyIGNyZWF0ZUhvc3RDaGFubmVsID0gKGNoYW5uZWwgPSBcIiRob3N0JFwiKSA9PiBpbml0Q2hhbm5lbEhhbmRsZXIoY2hhbm5lbCk7XG52YXIgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwgPSAoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsKSA9PiB7XG5cdGNvbnN0ICRob3N0ID0gY3JlYXRlSG9zdENoYW5uZWwoY2hhbm5lbCA/PyBcIiRob3N0JFwiKTtcblx0cmV0dXJuICRob3N0Py5jcmVhdGVSZW1vdGVDaGFubmVsPy4oY2hhbm5lbCwgb3B0aW9ucywgYnJvYWRjYXN0KSA/PyAkaG9zdDtcbn07XG52YXIgJGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsID0gKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSA9PiB7XG5cdGlmIChjaGFubmVsID09IG51bGwgfHwgYnJvYWRjYXN0KSByZXR1cm47XG5cdGlmIChSZW1vdGVDaGFubmVscy5oYXMoY2hhbm5lbCkpIHJldHVybiBSZW1vdGVDaGFubmVscy5nZXQoY2hhbm5lbCk7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRjaGFubmVsLFxuXHRcdGluc3RhbmNlOiBTRUxGX0NIQU5ORUwuaW5zdGFuY2UsXG5cdFx0cmVtb3RlOiBQcm9taXNlLnJlc29sdmUobmV3IFJlbW90ZUNoYW5uZWxIZWxwZXIoY2hhbm5lbCwgb3B0aW9ucykpXG5cdH07XG5cdFJlbW90ZUNoYW5uZWxzLnNldChjaGFubmVsLCByZXN1bHQpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvc3RvcmFnZS9EYXRhQmFzZS50c1xudmFyIGhhbmRNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciB3cmFwTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgZGVzY01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIFJFQUQgPSAodGFyZ2V0LCBrZXkpID0+IHtcblx0cmV0dXJuIGhhbmRNYXAuZ2V0KHRhcmdldCk/LltrZXldO1xufTtcbnZhciBvYmplY3RUb1JlZiA9IChvYmosIGNoYW5uZWwgPSBTRUxGX0NIQU5ORUw/Lm5hbWUsIHRvVHJhbnNmZXIpID0+IHtcblx0aWYgKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBvYmogIT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09IFwiZnVuY3Rpb25cIiAmJiBvYmogIT0gbnVsbCkge1xuXHRcdGlmICh3cmFwTWFwLmhhcyhvYmopKSByZXR1cm4gd3JhcE1hcC5nZXQob2JqKTtcblx0XHRpZiAoaGFuZE1hcC5oYXMob2JqKSkgcmV0dXJuIGhhbmRNYXAuZ2V0KG9iaik7XG5cdFx0aWYgKGlzTm90Q29tcGxleEFycmF5KG9iaikpIHJldHVybiBvYmo7XG5cdFx0aWYgKHRvVHJhbnNmZXI/LmluY2x1ZGVzPy4ob2JqKSkgcmV0dXJuIG9iajtcblx0XHRpZiAoY2hhbm5lbCA9PSBTRUxGX0NIQU5ORUw/Lm5hbWUpIHJldHVybiBvYmo7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCRpc0Rlc2NyaXB0b3I6IHRydWUsXG5cdFx0XHRwYXRoOiByZWdpc3RlcmVkSW5QYXRoLmdldChvYmopID8/ICgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBbVVVJRHY0KCldO1xuXHRcdFx0XHR3cml0ZUJ5UGF0aChwYXRoLCBvYmopO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH0pKCksXG5cdFx0XHRvd25lcjogU0VMRl9DSEFOTkVMPy5uYW1lLFxuXHRcdFx0Y2hhbm5lbCxcblx0XHRcdHByaW1pdGl2ZTogaXNQcmltaXRpdmUob2JqKSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGFyZ3VtZW50Q291bnQ6IG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb2JqLmxlbmd0aCA6IC0xXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gaXNDYW5KdXN0UmV0dXJuKG9iaikgPyBvYmogOiBudWxsO1xufTtcbnZhciAkcmVxdWVzdEhhbmRsZXIgPSBTeW1ib2wuZm9yKFwiQHJlcXVlc3RIYW5kbGVyXCIpO1xudmFyICRkZXNjcmlwdG9yID0gU3ltYm9sLmZvcihcIkBkZXNjcmlwdG9yXCIpO1xudmFyIG5vcm1hbGl6ZVJlZiA9ICh2KSA9PiB7XG5cdGlmIChpc0Nhbkp1c3RSZXR1cm4odikpIHJldHVybiB2O1xuXHRpZiAodj8uWyRkZXNjcmlwdG9yXSkgcmV0dXJuIHY7XG5cdGlmICh2Py4kaXNEZXNjcmlwdG9yKSByZXR1cm4gbWFrZVJlcXVlc3RQcm94eSh2LCBhc3luYyAoKSA9PiB2b2lkIDApO1xuXHRpZiAoaXNOb3RDb21wbGV4QXJyYXkodikpIHJldHVybiB2O1xuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eSA9ICh0YXJnZXQpID0+IHtcblx0aWYgKHR5cGVvZiB0YXJnZXQgIT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB0YXJnZXQgIT0gXCJvYmplY3RcIiB8fCB0YXJnZXQgPT0gbnVsbCkgcmV0dXJuIHRhcmdldDtcblx0cmV0dXJuIHdyYXBNYXAuZ2V0KHRhcmdldCkgPz8gaGFuZE1hcC5nZXQodGFyZ2V0KSA/PyB0YXJnZXQ7XG59O1xudmFyIHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUgPSAodGFyZ2V0KSA9PiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIgfHwgdGFyZ2V0ID09IG51bGwpIHJldHVybiB0YXJnZXQ7XG5cdHRhcmdldCA9IHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHkodGFyZ2V0KTtcblx0aWYgKHR5cGVvZiB0YXJnZXQgIT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGFyZ2V0ICE9IFwiZnVuY3Rpb25cIiB8fCB0YXJnZXQgPT0gbnVsbCkgcmV0dXJuIHRhcmdldDtcblx0aWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkgcmV0dXJuIHRhcmdldC5tYXAodW53cmFwRGVzY3JpcHRvckZyb21Qcm94eVJlY3Vyc2l2ZSk7XG5cdGlmICh0YXJnZXQgaW5zdGFuY2VvZiBNYXApIHJldHVybiBuZXcgTWFwKEFycmF5LmZyb20odGFyZ2V0LmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUodmFsdWUpXSkpO1xuXHRpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2V0KSByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKHRhcmdldC52YWx1ZXMoKSkubWFwKHVud3JhcERlc2NyaXB0b3JGcm9tUHJveHlSZWN1cnNpdmUpKTtcblx0aWYgKHR5cGVvZiB0YXJnZXQgPT0gXCJvYmplY3RcIikgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGFyZ2V0KSkgdGFyZ2V0W2tleV0gPSB1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlKHRhcmdldFtrZXldKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG52YXIgc3RvcmVkRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcmVnaXN0ZXJlZEluUGF0aCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHRyYXZlcnNlQnlQYXRoID0gKG9iaiwgcGF0aCkgPT4ge1xuXHRpZiAocGF0aCAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuXHRpZiAocGF0aCA9PSBudWxsIHx8IHBhdGg/Lmxlbmd0aCA8IDEpIHJldHVybiBvYmo7XG5cdGNvbnN0ICRkZXNjID0gb2JqPy5bJGRlc2NyaXB0b3JdID8/IChvYmo/LiRpc0Rlc2NyaXB0b3IgPyBvYmogOiBudWxsKTtcblx0aWYgKCRkZXNjICYmICRkZXNjPy5vd25lciA9PSBTRUxGX0NIQU5ORUw/Lm5hbWUpIG9iaiA9IHJlYWRCeVBhdGgoJGRlc2M/LnBhdGgpID8/IG9iajtcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHJldHVybiBvYmo7XG5cdGZvciAoY29uc3Qga2V5IG9mIHBhdGgpIHtcblx0XHRvYmogPSBvYmo/LltrZXldO1xuXHRcdGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcblx0fVxuXHRyZXR1cm4gb2JqO1xufTtcbnZhciByZWFkQnlQYXRoID0gKHBhdGgpID0+IHtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgcm9vdCA9IHN0b3JlZERhdGE/LmdldD8uKHBhdGg/LlswXSkgPz8gbnVsbDtcblx0cmV0dXJuIHJvb3QgIT0gbnVsbCA/IHRyYXZlcnNlQnlQYXRoKHJvb3QsIHBhdGg/LnNsaWNlPy4oMSkpIDogbnVsbDtcbn07XG52YXIgd3JpdGVCeVBhdGggPSAocGF0aCwgZGF0YSkgPT4ge1xuXHRjb25zdCAkZGVzYyA9IGRhdGE/LlskZGVzY3JpcHRvcl0gPz8gKGRhdGE/LiRpc0Rlc2NyaXB0b3IgPyBkYXRhIDogbnVsbCk7XG5cdGlmICgkZGVzYyAmJiAkZGVzYz8ub3duZXIgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSBkYXRhID0gcmVhZEJ5UGF0aCgkZGVzYz8ucGF0aCkgPz8gZGF0YTtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgcm9vdCA9IHN0b3JlZERhdGE/LmdldD8uKHBhdGg/LlswXSkgPz8gbnVsbDtcblx0aWYgKHBhdGg/Lmxlbmd0aCA+IDEpIHRyYXZlcnNlQnlQYXRoKHJvb3QsIHBhdGg/LnNsaWNlPy4oMSwgLTEpKVtwYXRoPy5bcGF0aD8ubGVuZ3RoIC0gMV1dID0gZGF0YTtcblx0ZWxzZSBzdG9yZWREYXRhPy5zZXQ/LihwYXRoPy5bMF0sIGRhdGEpO1xuXHRpZiAodHlwZW9mIGRhdGEgPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZGF0YSA9PSBcImZ1bmN0aW9uXCIpIHJlZ2lzdGVyZWRJblBhdGg/LnNldD8uKGRhdGEsIHBhdGgpO1xuXHRyZXR1cm4gZGF0YTtcbn07XG52YXIgcmVtb3ZlQnlQYXRoID0gKHBhdGgpID0+IHtcblx0aWYgKHBhdGggIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwYXRoKSkgcGF0aCA9IFtwYXRoXTtcblx0aWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoPy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG5cdGlmICghKHN0b3JlZERhdGE/LmdldD8uKHBhdGg/LlswXSkgPz8gbnVsbCkgJiYgcGF0aD8ubGVuZ3RoIDw9IDEpIHtcblx0XHRzdG9yZWREYXRhPy5kZWxldGU/LihwYXRoPy5bMF0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgcmV0dXJuIGZhbHNlO1xufTtcbnZhciByZW1vdmVCeURhdGEgPSAoZGF0YSkgPT4ge1xuXHRjb25zdCAkZGVzYyA9IGRhdGE/LlskZGVzY3JpcHRvcl0gPz8gKGRhdGE/LiRpc0Rlc2NyaXB0b3IgPyBkYXRhIDogbnVsbCk7XG5cdGlmICgkZGVzYyAmJiAkZGVzYz8ub3duZXIgPT0gU0VMRl9DSEFOTkVMPy5uYW1lKSBkYXRhID0gcmVhZEJ5UGF0aCgkZGVzYz8ucGF0aCkgPz8gZGF0YTtcblx0Y29uc3QgcGF0aCA9IHJlZ2lzdGVyZWRJblBhdGg/LmdldD8uKGRhdGEpID8/ICRkZXNjPy5wYXRoO1xuXHRpZiAocGF0aCA9PSBudWxsIHx8IHBhdGg/Lmxlbmd0aCA8IDEpIHJldHVybiBmYWxzZTtcblx0cmVtb3ZlQnlQYXRoKHBhdGgpO1xuXHRpZiAodHlwZW9mIGRhdGEgPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZGF0YSA9PSBcImZ1bmN0aW9uXCIpIHJlZ2lzdGVyZWRJblBhdGg/LmRlbGV0ZT8uKGRhdGEpO1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG52YXIgaGFzTm9QYXRoID0gKGRhdGEpID0+IHtcblx0Y29uc3QgJGRlc2MgPSBkYXRhPy5bJGRlc2NyaXB0b3JdID8/IChkYXRhPy4kaXNEZXNjcmlwdG9yID8gZGF0YSA6IG51bGwpO1xuXHRyZXR1cm4gKHJlZ2lzdGVyZWRJblBhdGg/LmdldD8uKGRhdGEpID8/ICRkZXNjPy5wYXRoKSA9PSBudWxsO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2NvcmUvUmVxdWVzdEhhbmRsZXIudHNcbnZhciBpc09iamVjdCA9IChvYmopID0+ICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikgJiYgb2JqICE9IG51bGw7XG52YXIgZGVmYXVsdFJlZmxlY3QgPSB7XG5cdGdldDogKHQsIHApID0+IHQ/LltwXSxcblx0c2V0OiAodCwgcCwgdikgPT4ge1xuXHRcdHRbcF0gPSB2O1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXHRoYXM6ICh0LCBwKSA9PiBwIGluIHQsXG5cdGFwcGx5OiAodCwgY3R4LCBhcmdzKSA9PiB0LmFwcGx5KGN0eCwgYXJncyksXG5cdGNvbnN0cnVjdDogKHQsIGFyZ3MpID0+IG5ldyB0KC4uLmFyZ3MpLFxuXHRkZWxldGVQcm9wZXJ0eTogKHQsIHApID0+IGRlbGV0ZSB0W3BdLFxuXHRvd25LZXlzOiAodCkgPT4gT2JqZWN0LmtleXModCksXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKHQsIHApID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcCksXG5cdGdldFByb3RvdHlwZU9mOiAodCkgPT4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpLFxuXHRzZXRQcm90b3R5cGVPZjogKHQsIHApID0+IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBwKSxcblx0aXNFeHRlbnNpYmxlOiAodCkgPT4gT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSxcblx0cHJldmVudEV4dGVuc2lvbnM6ICh0KSA9PiBPYmplY3QucHJldmVudEV4dGVuc2lvbnModClcbn07XG5mdW5jdGlvbiBleGVjdXRlQWN0aW9uKGFjdGlvbiwgcGF0aCwgYXJncywgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgY2hhbm5lbCA9IFwiXCIsIHNlbmRlciA9IFwiXCIsIHJlZmxlY3QgPSBkZWZhdWx0UmVmbGVjdCB9ID0gb3B0aW9ucztcblx0Y29uc3Qgb2JqID0gb3B0aW9ucy50YXJnZXQgPz8gcmVhZEJ5UGF0aChwYXRoKTtcblx0Y29uc3QgdG9UcmFuc2ZlciA9IFtdO1xuXHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0bGV0IG5ld1BhdGggPSBwYXRoO1xuXHRzd2l0Y2ggKFN0cmluZyhhY3Rpb24pLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRjYXNlIFwiaW1wb3J0XCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5JTVBPUlQ6XG5cdFx0XHRyZXN1bHQgPSBpbXBvcnQoXG5cdFx0XHRcdC8qIEB2aXRlLWlnbm9yZSAqL1xuXHRcdFx0XHRhcmdzPy5bMF1cbik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwidHJhbnNmZXJcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLlRSQU5TRkVSOlxuXHRcdFx0aWYgKGlzQ2FuVHJhbnNmZXIob2JqKSAmJiBjaGFubmVsICE9PSBzZW5kZXIpIHRvVHJhbnNmZXIucHVzaChvYmopO1xuXHRcdFx0cmVzdWx0ID0gb2JqO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImdldFwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uR0VUOiB7XG5cdFx0XHRjb25zdCBwcm9wID0gYXJncz8uWzBdO1xuXHRcdFx0Y29uc3QgZ290ID0gcmVmbGVjdC5nZXQ/LihvYmosIHByb3ApID8/IG9iaj8uW3Byb3BdO1xuXHRcdFx0cmVzdWx0ID0gdHlwZW9mIGdvdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iaiAhPSBudWxsID8gZ290LmJpbmQob2JqKSA6IGdvdDtcblx0XHRcdG5ld1BhdGggPSBbLi4ucGF0aCwgU3RyaW5nKHByb3ApXTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRjYXNlIFwic2V0XCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5TRVQ6IHtcblx0XHRcdGNvbnN0IFtwcm9wLCB2YWx1ZV0gPSBhcmdzO1xuXHRcdFx0Y29uc3Qgbm9ybWFsaXplZFZhbHVlID0gZGVlcE9wZXJhdGVBbmRDbG9uZSh2YWx1ZSwgbm9ybWFsaXplUmVmKTtcblx0XHRcdGlmIChvcHRpb25zLnRhcmdldCkgcmVzdWx0ID0gcmVmbGVjdC5zZXQ/LihvYmosIHByb3AsIG5vcm1hbGl6ZWRWYWx1ZSkgPz8gKG9ialtwcm9wXSA9IG5vcm1hbGl6ZWRWYWx1ZSwgdHJ1ZSk7XG5cdFx0XHRlbHNlIHJlc3VsdCA9IHJlZmxlY3Quc2V0Py4ob2JqLCBwcm9wLCBub3JtYWxpemVkVmFsdWUpID8/IHdyaXRlQnlQYXRoKFsuLi5wYXRoLCBTdHJpbmcocHJvcCldLCBub3JtYWxpemVkVmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNhc2UgXCJhcHBseVwiOlxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5BUFBMWTpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkNBTEw6XG5cdFx0XHRpZiAodHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IGN0eCA9IG9wdGlvbnMuY29udGV4dCA/PyAob3B0aW9ucy50YXJnZXQgPyB2b2lkIDAgOiByZWFkQnlQYXRoKHBhdGguc2xpY2UoMCwgLTEpKSk7XG5cdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRBcmdzID0gZGVlcE9wZXJhdGVBbmRDbG9uZShhcmdzPy5bMF0gPz8gYXJncyA/PyBbXSwgbm9ybWFsaXplUmVmKTtcblx0XHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5hcHBseT8uKG9iaiwgY3R4LCBub3JtYWxpemVkQXJncykgPz8gb2JqLmFwcGx5KGN0eCwgbm9ybWFsaXplZEFyZ3MpO1xuXHRcdFx0XHRpZiAoaXNDYW5UcmFuc2ZlcihyZXN1bHQpICYmIHBhdGg/LmF0KC0xKSA9PT0gXCJ0cmFuc2ZlclwiICYmIGNoYW5uZWwgIT09IHNlbmRlcikgdG9UcmFuc2Zlci5wdXNoKHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY29uc3RydWN0XCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1Q6XG5cdFx0XHRpZiAodHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWRBcmdzID0gZGVlcE9wZXJhdGVBbmRDbG9uZShhcmdzPy5bMF0gPz8gYXJncyA/PyBbXSwgbm9ybWFsaXplUmVmKTtcblx0XHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5jb25zdHJ1Y3Q/LihvYmosIG5vcm1hbGl6ZWRBcmdzKSA/PyBuZXcgb2JqKC4uLm5vcm1hbGl6ZWRBcmdzKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJkZWxldGVcIjpcblx0XHRjYXNlIFwiZGVsZXRlcHJvcGVydHlcIjpcblx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uREVMRVRFOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uREVMRVRFX1BST1BFUlRZOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uRElTUE9TRTpcblx0XHRcdGlmIChvcHRpb25zLnRhcmdldCkge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRyZXN1bHQgPSByZWZsZWN0LmRlbGV0ZVByb3BlcnR5Py4ob2JqLCBwcm9wKSA/PyBkZWxldGUgb2JqW3Byb3BdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gcGF0aD8ubGVuZ3RoID4gMCA/IHJlbW92ZUJ5UGF0aChwYXRoKSA6IHJlbW92ZUJ5RGF0YShvYmopO1xuXHRcdFx0XHRpZiAocmVzdWx0KSBuZXdQYXRoID0gcmVnaXN0ZXJlZEluUGF0aC5nZXQob2JqKSA/PyBbXTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJoYXNcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkhBUzpcblx0XHRcdHJlc3VsdCA9IHJlZmxlY3QuaGFzPy4ob2JqLCBhcmdzPy5bMF0pID8/IChpc09iamVjdChvYmopID8gYXJncz8uWzBdIGluIG9iaiA6IGZhbHNlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJvd25rZXlzXCI6XG5cdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5PV05fS0VZUzpcblx0XHRcdHJlc3VsdCA9IHJlZmxlY3Qub3duS2V5cz8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3Qua2V5cyhvYmopIDogW10pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImdldG93bnByb3BlcnR5ZGVzY3JpcHRvclwiOlxuXHRcdGNhc2UgXCJnZXRwcm9wZXJ0eWRlc2NyaXB0b3JcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVF9PV05fUFJPUEVSVFlfREVTQ1JJUFRPUjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVF9QUk9QRVJUWV9ERVNDUklQVE9SOlxuXHRcdFx0cmVzdWx0ID0gcmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I/LihvYmosIGFyZ3M/LlswXSA/PyBwYXRoPy5hdCgtMSkgPz8gXCJcIikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgYXJncz8uWzBdID8/IHBhdGg/LmF0KC0xKSA/PyBcIlwiKSA6IHZvaWQgMCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZ2V0cHJvdG90eXBlb2ZcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLkdFVF9QUk9UT1RZUEVfT0Y6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0LmdldFByb3RvdHlwZU9mPy4ob2JqKSA/PyAoaXNPYmplY3Qob2JqKSA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopIDogbnVsbCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic2V0cHJvdG90eXBlb2ZcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLlNFVF9QUk9UT1RZUEVfT0Y6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0LnNldFByb3RvdHlwZU9mPy4ob2JqLCBhcmdzPy5bMF0pID8/IChpc09iamVjdChvYmopID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iaiwgYXJncz8uWzBdKSA6IGZhbHNlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJpc2V4dGVuc2libGVcIjpcblx0XHRjYXNlIFdSZWZsZWN0QWN0aW9uLklTX0VYVEVOU0lCTEU6XG5cdFx0XHRyZXN1bHQgPSByZWZsZWN0LmlzRXh0ZW5zaWJsZT8uKG9iaikgPz8gKGlzT2JqZWN0KG9iaikgPyBPYmplY3QuaXNFeHRlbnNpYmxlKG9iaikgOiB0cnVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwcmV2ZW50ZXh0ZW5zaW9uc1wiOlxuXHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uUFJFVkVOVF9FWFRFTlNJT05TOiByZXN1bHQgPSByZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zPy4ob2JqKSA/PyAoaXNPYmplY3Qob2JqKSA/IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhvYmopIDogZmFsc2UpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0cmVzdWx0LFxuXHRcdHRvVHJhbnNmZXIsXG5cdFx0cGF0aDogbmV3UGF0aFxuXHR9O1xufVxuYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBjaGFubmVsLCBzZW5kZXIsIHBhdGgsIHJhd1Jlc3VsdCwgdG9UcmFuc2Zlcikge1xuXHRjb25zdCByZXN1bHQgPSBhd2FpdCByYXdSZXN1bHQ7XG5cdGNvbnN0IGNhbkJlUmV0dXJuID0gaXNDYW5UcmFuc2ZlcihyZXN1bHQpICYmIHRvVHJhbnNmZXIuaW5jbHVkZXMocmVzdWx0KSB8fCBpc0Nhbkp1c3RSZXR1cm4ocmVzdWx0KTtcblx0bGV0IGZpbmFsUGF0aCA9IHBhdGg7XG5cdGlmICghY2FuQmVSZXR1cm4gJiYgYWN0aW9uICE9PSBcImdldFwiICYmIGFjdGlvbiAhPT0gV1JlZmxlY3RBY3Rpb24uR0VUICYmICh0eXBlb2YgcmVzdWx0ID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiByZXN1bHQgPT09IFwiZnVuY3Rpb25cIikpIHtcblx0XHRpZiAoaGFzTm9QYXRoKHJlc3VsdCkpIHtcblx0XHRcdGZpbmFsUGF0aCA9IFtVVUlEdjQoKV07XG5cdFx0XHR3cml0ZUJ5UGF0aChmaW5hbFBhdGgsIHJlc3VsdCk7XG5cdFx0fSBlbHNlIGZpbmFsUGF0aCA9IHJlZ2lzdGVyZWRJblBhdGguZ2V0KHJlc3VsdCkgPz8gW107XG5cdH1cblx0Y29uc3QgY3R4ID0gcmVhZEJ5UGF0aChmaW5hbFBhdGgpO1xuXHRjb25zdCBjdHhLZXkgPSBhY3Rpb24gPT09IFwiZ2V0XCIgfHwgYWN0aW9uID09PSBXUmVmbGVjdEFjdGlvbi5HRVQgPyBmaW5hbFBhdGg/LmF0KC0xKSA6IHZvaWQgMDtcblx0Y29uc3Qgb2JqID0gcmVhZEJ5UGF0aChwYXRoKTtcblx0Y29uc3QgcGF5bG9hZCA9IGRlZXBPcGVyYXRlQW5kQ2xvbmUocmVzdWx0LCAoZWwpID0+IG9iamVjdFRvUmVmKGVsLCBjaGFubmVsLCB0b1RyYW5zZmVyKSkgPz8gcmVzdWx0O1xuXHRyZXR1cm4ge1xuXHRcdHJlc3BvbnNlOiB7XG5cdFx0XHRjaGFubmVsOiBzZW5kZXIsXG5cdFx0XHRzZW5kZXI6IGNoYW5uZWwsXG5cdFx0XHRyZXFJZCxcblx0XHRcdGFjdGlvbixcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0cmVzdWx0OiBjYW5CZVJldHVybiA/IHBheWxvYWQgOiBudWxsLFxuXHRcdFx0XHR0eXBlOiB0eXBlb2YgcmVzdWx0LFxuXHRcdFx0XHRjaGFubmVsOiBzZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbCxcblx0XHRcdFx0ZGVzY3JpcHRvcjoge1xuXHRcdFx0XHRcdCRpc0Rlc2NyaXB0b3I6IHRydWUsXG5cdFx0XHRcdFx0cGF0aDogZmluYWxQYXRoLFxuXHRcdFx0XHRcdG93bmVyOiBjaGFubmVsLFxuXHRcdFx0XHRcdGNoYW5uZWwsXG5cdFx0XHRcdFx0cHJpbWl0aXZlOiBpc1ByaW1pdGl2ZShyZXN1bHQpLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGFyZ3VtZW50Q291bnQ6IG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb2JqLmxlbmd0aCA6IC0xLFxuXHRcdFx0XHRcdC4uLmlzT2JqZWN0KGN0eCkgJiYgY3R4S2V5ICE9IG51bGwgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgY3R4S2V5KSA6IHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyYW5zZmVyOiB0b1RyYW5zZmVyXG5cdH07XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KHJlcXVlc3QsIHJlcUlkLCBjaGFubmVsTmFtZSwgb3B0aW9ucykge1xuXHRjb25zdCB7IGNoYW5uZWwsIHNlbmRlciwgcGF0aCwgYWN0aW9uLCBhcmdzIH0gPSByZXF1ZXN0O1xuXHRpZiAoY2hhbm5lbCAhPT0gY2hhbm5lbE5hbWUpIHJldHVybiBudWxsO1xuXHRjb25zdCB7IHJlc3VsdCwgdG9UcmFuc2ZlciwgcGF0aDogbmV3UGF0aCB9ID0gZXhlY3V0ZUFjdGlvbihhY3Rpb24sIHBhdGgsIGFyZ3MsIHtcblx0XHRjaGFubmVsLFxuXHRcdHNlbmRlcixcblx0XHQuLi5vcHRpb25zXG5cdH0pO1xuXHRyZXR1cm4gYnVpbGRSZXNwb25zZShyZXFJZCwgYWN0aW9uLCBjaGFubmVsTmFtZSwgc2VuZGVyLCBuZXdQYXRoLCByZXN1bHQsIHRvVHJhbnNmZXIpO1xufVxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0SGFuZGxlcih0YXJnZXQsIHJlZmxlY3QgPSBkZWZhdWx0UmVmbGVjdCkge1xuXHRyZXR1cm4gYXN5bmMgKGFjdGlvbiwgcGF0aCwgYXJncykgPT4ge1xuXHRcdGxldCBwYXJlbnQgPSB0YXJnZXQ7XG5cdFx0bGV0IGN1cnJlbnQgPSB0YXJnZXQ7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJlbnQgPSBjdXJyZW50O1xuXHRcdFx0Y3VycmVudCA9IGN1cnJlbnQ/LltwYXRoW2ldXTtcblx0XHRcdGlmIChjdXJyZW50ID09PSB2b2lkIDAgJiYgaSA8IHBhdGgubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IEVycm9yKGBQYXRoIHNlZ21lbnQgJyR7cGF0aFtpXX0nIG5vdCBmb3VuZGApO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuXHRcdHN3aXRjaCAoU3RyaW5nKGFjdGlvbikudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0Y2FzZSBcImdldFwiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5HRVQ6IHJldHVybiBjdXJyZW50O1xuXHRcdFx0Y2FzZSBcInNldFwiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5TRVQ6XG5cdFx0XHRcdHBhcmVudFtwcm9wXSA9IGFyZ3NbMF07XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0Y2FzZSBcImNhbGxcIjpcblx0XHRcdGNhc2UgXCJhcHBseVwiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5BUFBMWTpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uQ0FMTDpcblx0XHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRjb25zdCBjYWxsQXJncyA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcblx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgY3VycmVudC5hcHBseShwYXJlbnQsIGNhbGxBcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3B9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xuXHRcdFx0Y2FzZSBcImNvbnN0cnVjdFwiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5DT05TVFJVQ1Q6XG5cdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgY3RvckFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IGFyZ3M7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBjdXJyZW50KC4uLmN0b3JBcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3B9JyBpcyBub3QgYSBjb25zdHJ1Y3RvcmApO1xuXHRcdFx0Y2FzZSBcImhhc1wiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5IQVM6IHJldHVybiBwcm9wIGluIHBhcmVudDtcblx0XHRcdGNhc2UgXCJkZWxldGVcIjpcblx0XHRcdGNhc2UgXCJkZWxldGVwcm9wZXJ0eVwiOlxuXHRcdFx0Y2FzZSBXUmVmbGVjdEFjdGlvbi5ERUxFVEVfUFJPUEVSVFk6IHJldHVybiBkZWxldGUgcGFyZW50W3Byb3BdO1xuXHRcdFx0Y2FzZSBcIm93bmtleXNcIjpcblx0XHRcdGNhc2UgV1JlZmxlY3RBY3Rpb24uT1dOX0tFWVM6IHJldHVybiBPYmplY3Qua2V5cyhjdXJyZW50ID8/IHBhcmVudCk7XG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gY3VycmVudDtcblx0XHR9XG5cdH07XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L2NoYW5uZWwvQ29ubmVjdGlvbi50c1xudmFyIENoYW5uZWxDb25uZWN0aW9uID0gY2xhc3Mge1xuXHRfbmFtZTtcblx0X3RyYW5zcG9ydFR5cGU7XG5cdF9pZCA9IFVVSUR2NCgpO1xuXHRfc3RhdGUgPSBcImRpc2Nvbm5lY3RlZFwiO1xuXHRfaW5ib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDFlMyB9KTtcblx0X291dGJvdW5kID0gbmV3IENoYW5uZWxTdWJqZWN0KHsgYnVmZmVyU2l6ZTogMWUzIH0pO1xuXHRfc3RhdGVDaGFuZ2VzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jb25uZWN0ZWRQZWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9zdWJzID0gW107XG5cdF9zdGF0cyA9IHtcblx0XHRtZXNzYWdlc1NlbnQ6IDAsXG5cdFx0bWVzc2FnZXNSZWNlaXZlZDogMCxcblx0XHRieXRlc1RyYW5zZmVycmVkOiAwLFxuXHRcdGxhdGVuY3lNczogMCxcblx0XHR1cHRpbWU6IDAsXG5cdFx0cmVjb25uZWN0Q291bnQ6IDBcblx0fTtcblx0X3N0YXJ0VGltZSA9IDA7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2J1ZmZlciA9IFtdO1xuXHRfb3B0cztcblx0Y29uc3RydWN0b3IoX25hbWUsIF90cmFuc3BvcnRUeXBlID0gXCJpbnRlcm5hbFwiLCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9uYW1lID0gX25hbWU7XG5cdFx0dGhpcy5fdHJhbnNwb3J0VHlwZSA9IF90cmFuc3BvcnRUeXBlO1xuXHRcdHRoaXMuX29wdHMgPSB7XG5cdFx0XHR0aW1lb3V0OiAzZTQsXG5cdFx0XHRhdXRvUmVjb25uZWN0OiB0cnVlLFxuXHRcdFx0cmVjb25uZWN0SW50ZXJ2YWw6IDFlMyxcblx0XHRcdG1heFJlY29ubmVjdEF0dGVtcHRzOiA1LFxuXHRcdFx0YnVmZmVyTWVzc2FnZXM6IHRydWUsXG5cdFx0XHRidWZmZXJTaXplOiAxZTMsXG5cdFx0XHRtZXRhZGF0YToge30sXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblx0XHR0aGlzLl9zZXR1cFN1YnNjcmlwdGlvbnMoKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIsIGZyb21DaGFubmVsKSB7XG5cdFx0cmV0dXJuIChmcm9tQ2hhbm5lbCA/IGZpbHRlcigobSkgPT4gbS5zZW5kZXIgPT09IGZyb21DaGFubmVsKSh0aGlzLl9pbmJvdW5kKSA6IHRoaXMuX2luYm91bmQpLnN1YnNjcmliZSh0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyKTtcblx0fVxuXHRuZXh0KG1lc3NhZ2UpIHtcblx0XHRpZiAodGhpcy5fc3RhdGUgIT09IFwiY29ubmVjdGVkXCIpIHtcblx0XHRcdGlmICh0aGlzLl9vcHRzLmJ1ZmZlck1lc3NhZ2VzICYmIHRoaXMuX2J1ZmZlci5sZW5ndGggPCB0aGlzLl9vcHRzLmJ1ZmZlclNpemUpIHRoaXMuX2J1ZmZlci5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9vdXRib3VuZC5uZXh0KG1lc3NhZ2UpO1xuXHRcdHRoaXMuX3N0YXRzLm1lc3NhZ2VzU2VudCsrO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QodG9DaGFubmVsLCBwYXlsb2FkLCBvcHRzID0ge30pIHtcblx0XHRjb25zdCByZXFJZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVycygpO1xuXHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCByZXNvbHZlcnMpO1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wZW5kaW5nLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZXNvbHZlcnMucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dGApKTtcblx0XHRcdH1cblx0XHR9LCBvcHRzLnRpbWVvdXQgPz8gdGhpcy5fb3B0cy50aW1lb3V0KTtcblx0XHR0aGlzLm5leHQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdG9DaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9uYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Li4ucGF5bG9hZCxcblx0XHRcdFx0YWN0aW9uOiBvcHRzLmFjdGlvbixcblx0XHRcdFx0cGF0aDogb3B0cy5wYXRoXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlc29sdmVycy5wcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcblx0fVxuXHRyZXNwb25kKG9yaWdpbmFsLCBwYXlsb2FkKSB7XG5cdFx0dGhpcy5uZXh0KHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG9yaWdpbmFsLnNlbmRlcixcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBvcmlnaW5hbC5yZXFJZCxcblx0XHRcdHBheWxvYWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRlbWl0KHRvQ2hhbm5lbCwgZXZlbnRUeXBlLCBkYXRhKSB7XG5cdFx0dGhpcy5uZXh0KHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IHRvQ2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fbmFtZSxcblx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0dHlwZTogZXZlbnRUeXBlLFxuXHRcdFx0XHRkYXRhXG5cdFx0XHR9LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlT3V0Ym91bmQob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXIpO1xuXHR9XG5cdHB1c2hJbmJvdW5kKG1lc3NhZ2UpIHtcblx0XHR0aGlzLl9zdGF0cy5tZXNzYWdlc1JlY2VpdmVkKys7XG5cdFx0aWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIG1lc3NhZ2UucmVxSWQpIHtcblx0XHRcdGNvbnN0IHIgPSB0aGlzLl9wZW5kaW5nLmdldChtZXNzYWdlLnJlcUlkKTtcblx0XHRcdGlmIChyKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKG1lc3NhZ2UucmVxSWQpO1xuXHRcdFx0XHRyLnJlc29sdmUobWVzc2FnZS5wYXlsb2FkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9pbmJvdW5kLm5leHQobWVzc2FnZSk7XG5cdH1cblx0YXN5bmMgY29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fc3RhdGUgPT09IFwiY29ubmVjdGVkXCIpIHJldHVybjtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNvbm5lY3RpbmdcIik7XG5cdFx0dGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNvbm5lY3RlZFwiKTtcblx0XHR0aGlzLl9mbHVzaEJ1ZmZlcigpO1xuXHR9XG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3N0YXRlID09PSBcImRpc2Nvbm5lY3RlZFwiIHx8IHRoaXMuX3N0YXRlID09PSBcImNsb3NlZFwiKSByZXR1cm47XG5cdFx0dGhpcy5fc2V0U3RhdGUoXCJkaXNjb25uZWN0ZWRcIik7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX3N1YnMgPSBbXTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImNsb3NlZFwiKTtcblx0XHR0aGlzLl9pbmJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fb3V0Ym91bmQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcblx0fVxuXHRtYXJrQ29ubmVjdGVkKCkge1xuXHRcdHRoaXMuX3NldFN0YXRlKFwiY29ubmVjdGVkXCIpO1xuXHRcdHRoaXMuX2ZsdXNoQnVmZmVyKCk7XG5cdH1cblx0bWFya0Rpc2Nvbm5lY3RlZCgpIHtcblx0XHR0aGlzLl9zZXRTdGF0ZShcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRfc2V0U3RhdGUoc3RhdGUpIHtcblx0XHRpZiAodGhpcy5fc3RhdGUgIT09IHN0YXRlKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuXHRcdFx0dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoc3RhdGUpO1xuXHRcdH1cblx0fVxuXHRfZmx1c2hCdWZmZXIoKSB7XG5cdFx0Zm9yIChjb25zdCBtc2cgb2YgdGhpcy5fYnVmZmVyKSB0aGlzLl9vdXRib3VuZC5uZXh0KG1zZyk7XG5cdFx0dGhpcy5fYnVmZmVyID0gW107XG5cdH1cblx0X3NldHVwU3Vic2NyaXB0aW9ucygpIHtcblx0XHR0aGlzLl9zdWJzLnB1c2godGhpcy5faW5ib3VuZC5zdWJzY3JpYmUoeyBuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRpZiAobXNnLnR5cGUgPT09IFwic2lnbmFsXCIgJiYgbXNnLnBheWxvYWQ/LnR5cGUgPT09IFwiY29ubmVjdFwiKSB0aGlzLl9jb25uZWN0ZWRQZWVycy5zZXQobXNnLnNlbmRlciwge1xuXHRcdFx0XHRuYW1lOiBtc2cuc2VuZGVyLFxuXHRcdFx0XHRzdGF0ZTogXCJjb25uZWN0ZWRcIixcblx0XHRcdFx0aXNIb3N0OiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSB9KSk7XG5cdH1cblx0Z2V0IGlkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pZDtcblx0fVxuXHRnZXQgbmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbmFtZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCB0cmFuc3BvcnRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl90cmFuc3BvcnRUeXBlO1xuXHR9XG5cdGdldCBzdGF0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4udGhpcy5fc3RhdHMsXG5cdFx0XHR1cHRpbWU6IHRoaXMuX3N0YXJ0VGltZSA/IERhdGUubm93KCkgLSB0aGlzLl9zdGFydFRpbWUgOiAwXG5cdFx0fTtcblx0fVxuXHRnZXQgc3RhdGVDaGFuZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZUNoYW5nZXM7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZFBlZXJzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGVkUGVlcnMua2V5cygpXTtcblx0fVxuXHRnZXQgbWV0YSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IHRoaXMuX2lkLFxuXHRcdFx0bmFtZTogdGhpcy5fbmFtZSxcblx0XHRcdHN0YXRlOiB0aGlzLl9zdGF0ZSxcblx0XHRcdGlzSG9zdDogZmFsc2UsXG5cdFx0XHRjb25uZWN0ZWRDaGFubmVsczogbmV3IFNldCh0aGlzLl9jb25uZWN0ZWRQZWVycy5rZXlzKCkpXG5cdFx0fTtcblx0fVxufTtcbnZhciBDb25uZWN0aW9uUG9vbCA9IGNsYXNzIENvbm5lY3Rpb25Qb29sIHtcblx0X2Nvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0c3RhdGljIF9pbnN0YW5jZSA9IG51bGw7XG5cdHN0YXRpYyBnZXRJbnN0YW5jZSgpIHtcblx0XHRpZiAoIUNvbm5lY3Rpb25Qb29sLl9pbnN0YW5jZSkgQ29ubmVjdGlvblBvb2wuX2luc3RhbmNlID0gbmV3IENvbm5lY3Rpb25Qb29sKCk7XG5cdFx0cmV0dXJuIENvbm5lY3Rpb25Qb29sLl9pbnN0YW5jZTtcblx0fVxuXHRnZXRPckNyZWF0ZShuYW1lLCB0cmFuc3BvcnRUeXBlID0gXCJpbnRlcm5hbFwiLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAoIXRoaXMuX2Nvbm5lY3Rpb25zLmhhcyhuYW1lKSkgdGhpcy5fY29ubmVjdGlvbnMuc2V0KG5hbWUsIG5ldyBDaGFubmVsQ29ubmVjdGlvbihuYW1lLCB0cmFuc3BvcnRUeXBlLCBvcHRpb25zKSk7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zLmdldChuYW1lKTtcblx0fVxuXHRnZXQobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5nZXQobmFtZSk7XG5cdH1cblx0aGFzKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuaGFzKG5hbWUpO1xuXHR9XG5cdGRlbGV0ZShuYW1lKSB7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuZ2V0KG5hbWUpPy5jbG9zZSgpO1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5kZWxldGUobmFtZSk7XG5cdH1cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5fY29ubmVjdGlvbnMuZm9yRWFjaCgoYykgPT4gYy5jbG9zZSgpKTtcblx0XHR0aGlzLl9jb25uZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cdGdldCBzaXplKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9ucy5zaXplO1xuXHR9XG5cdGdldCBuYW1lcygpIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2Nvbm5lY3Rpb25zLmtleXMoKV07XG5cdH1cbn07XG52YXIgZ2V0Q29ubmVjdGlvblBvb2wgPSAoKSA9PiBDb25uZWN0aW9uUG9vbC5nZXRJbnN0YW5jZSgpO1xudmFyIGdldENvbm5lY3Rpb24gPSAobmFtZSwgdHJhbnNwb3J0VHlwZSwgb3B0aW9ucykgPT4gZ2V0Q29ubmVjdGlvblBvb2woKS5nZXRPckNyZWF0ZShuYW1lLCB0cmFuc3BvcnRUeXBlLCBvcHRpb25zKTtcbnZhciBnZXRIb3N0Q29ubmVjdGlvbiA9IChuYW1lID0gXCIkaG9zdCRcIiwgb3B0aW9ucykgPT4gZ2V0Q29ubmVjdGlvbihuYW1lLCBcImludGVybmFsXCIsIHtcblx0Li4ub3B0aW9ucyxcblx0bWV0YWRhdGE6IHtcblx0XHQuLi5vcHRpb25zPy5tZXRhZGF0YSxcblx0XHRpc0hvc3Q6IHRydWVcblx0fVxufSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3RyYW5zcG9ydC9UcmFuc3BvcnQudHNcbnZhciBUcmFuc3BvcnRBZGFwdGVyID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF90cmFuc3BvcnRUeXBlO1xuXHRfb3B0aW9ucztcblx0X3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0X2lzQXR0YWNoZWQgPSBmYWxzZTtcblx0X2luYm91bmQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9vdXRib3VuZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X2luY29taW5nQ29ubmVjdGlvbnMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiA1MCB9KTtcblx0X2FjY2VwdENhbGxiYWNrID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWxOYW1lLCBfdHJhbnNwb3J0VHlwZSwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX3RyYW5zcG9ydFR5cGUgPSBfdHJhbnNwb3J0VHlwZTtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zID0gW107XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IGZhbHNlO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzLl9pbmJvdW5kLnN1YnNjcmliZShvYnNlcnZlcik7XG5cdH1cblx0c2VuZChtc2csIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fb3V0Ym91bmQubmV4dCh7XG5cdFx0XHQuLi5tc2csXG5cdFx0XHR0cmFuc2ZlcmFibGU6IHRyYW5zZmVyXG5cdFx0fSk7XG5cdH1cblx0Z2V0IG9uSW5jb21pbmdDb25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zO1xuXHR9XG5cdHN1YnNjcmliZUluY29taW5nKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0c2V0QWNjZXB0Q2FsbGJhY2soY2FsbGJhY2spIHtcblx0XHR0aGlzLl9hY2NlcHRDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHR9XG5cdF9lbWl0SW5jb21pbmdDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcblx0XHR0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zLm5leHQoY29ubmVjdGlvbik7XG5cdH1cblx0YXN5bmMgX3Nob3VsZEFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXHRcdGlmICghdGhpcy5fYWNjZXB0Q2FsbGJhY2spIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiB0aGlzLl9hY2NlcHRDYWxsYmFjayhjb25uZWN0aW9uKTtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc0F0dGFjaGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pc0F0dGFjaGVkO1xuXHR9XG5cdGdldCBpbmJvdW5kKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmJvdW5kO1xuXHR9XG5cdGdldCBvdXRib3VuZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb3V0Ym91bmQ7XG5cdH1cbn07XG52YXIgV29ya2VyVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3dvcmtlclNvdXJjZTtcblx0X3dvcmtlciA9IG51bGw7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X293bldvcmtlciA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX3dvcmtlclNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwid29ya2VyXCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3dvcmtlclNvdXJjZSA9IF93b3JrZXJTb3VyY2U7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0dGhpcy5fd29ya2VyID0gdGhpcy5fcmVzb2x2ZVdvcmtlcigpO1xuXHRcdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodGhpcy5fd29ya2VyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd29ya2VyLCAoZGF0YSkgPT4gdGhpcy5faGFuZGxlSW5jb21pbmcoZGF0YSksIChlcnIpID0+IHRoaXMuX2luYm91bmQuZXJyb3IoZXJyKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZywgbXNnLnRyYW5zZmVyYWJsZSkpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0aWYgKHRoaXMuX293bldvcmtlciAmJiB0aGlzLl93b3JrZXIpIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0XHR0aGlzLl93b3JrZXIgPSBudWxsO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG5cdHJlcXVlc3RDaGFubmVsKGNoYW5uZWwsIHNlbmRlciwgb3B0aW9ucywgcG9ydCkge1xuXHRcdGNvbnN0IHRyYW5zZmVyID0gcG9ydCA/IFtwb3J0XSA6IFtdO1xuXHRcdHRoaXMuX3dvcmtlcj8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJjcmVhdGVDaGFubmVsXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdG1lc3NhZ2VQb3J0OiBwb3J0LFxuXHRcdFx0cmVxSWQ6IFVVSUR2NCgpXG5cdFx0fSwgeyB0cmFuc2ZlciB9KTtcblx0fVxuXHRjb25uZWN0Q2hhbm5lbChjaGFubmVsLCBzZW5kZXIsIHBvcnQsIG9wdGlvbnMpIHtcblx0XHRjb25zdCB0cmFuc2ZlciA9IHBvcnQgPyBbcG9ydF0gOiBbXTtcblx0XHR0aGlzLl93b3JrZXI/LnBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiY29ubmVjdENoYW5uZWxcIixcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRwb3J0LFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHJlcUlkOiBVVUlEdjQoKVxuXHRcdH0sIHsgdHJhbnNmZXIgfSk7XG5cdH1cblx0bGlzdENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxSWQgPSBVVUlEdjQoKTtcblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAobXNnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBtc2c7XG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiY2hhbm5lbExpc3RcIiAmJiBkYXRhLnJlcUlkID09PSByZXFJZCkge1xuXHRcdFx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHRcdHJlc29sdmUoZGF0YS5jaGFubmVscyA/PyBbXSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdWIgPSB0aGlzLl9pbmJvdW5kLnN1YnNjcmliZShoYW5kbGVyKTtcblx0XHRcdHRoaXMuX3dvcmtlcj8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHR0eXBlOiBcImxpc3RDaGFubmVsc1wiLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdHJlc29sdmUoW10pO1xuXHRcdFx0fSwgNWUzKTtcblx0XHR9KTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImNoYW5uZWxDcmVhdGVkXCIgfHwgZGF0YT8udHlwZSA9PT0gXCJjaGFubmVsQ29ubmVjdGVkXCIpIHRoaXMuX2VtaXRJbmNvbWluZ0Nvbm5lY3Rpb24oe1xuXHRcdFx0aWQ6IGRhdGEucmVxSWQgPz8gVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IFwid29ya2VyXCIsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndvcmtlclwiLFxuXHRcdFx0ZGF0YSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHRcdHRoaXMuX2luYm91bmQubmV4dChkYXRhKTtcblx0fVxuXHRfcmVzb2x2ZVdvcmtlcigpIHtcblx0XHRpZiAodGhpcy5fd29ya2VyU291cmNlIGluc3RhbmNlb2YgV29ya2VyKSByZXR1cm4gdGhpcy5fd29ya2VyU291cmNlO1xuXHRcdHRoaXMuX293bldvcmtlciA9IHRydWU7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLl93b3JrZXJTb3VyY2UgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRoaXMuX3dvcmtlclNvdXJjZSgpO1xuXHRcdGlmICh0aGlzLl93b3JrZXJTb3VyY2UgaW5zdGFuY2VvZiBVUkwpIHJldHVybiBuZXcgV29ya2VyKHRoaXMuX3dvcmtlclNvdXJjZS5ocmVmLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLl93b3JrZXJTb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmICh0aGlzLl93b3JrZXJTb3VyY2Uuc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKHRoaXMuX3dvcmtlclNvdXJjZS5yZXBsYWNlKC9eXFwvLywgXCIuL1wiKSksIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0XHRcdGlmIChVUkwuY2FuUGFyc2UodGhpcy5fd29ya2VyU291cmNlKSB8fCB0aGlzLl93b3JrZXJTb3VyY2Uuc3RhcnRzV2l0aChcIi4vXCIpKSByZXR1cm4gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZih0aGlzLl93b3JrZXJTb3VyY2UpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0XHRyZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aGlzLl93b3JrZXJTb3VyY2VdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHdvcmtlciBzb3VyY2VcIik7XG5cdH1cblx0Z2V0IHdvcmtlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fd29ya2VyO1xuXHR9XG59O1xudmFyIE1lc3NhZ2VQb3J0VHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3BvcnQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF9wb3J0LCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJtZXNzYWdlLXBvcnRcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fcG9ydCA9IF9wb3J0O1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodGhpcy5fcG9ydCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3BvcnQsIChkYXRhKSA9PiB0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2csIG1zZy50cmFuc2ZlcmFibGUpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHRoaXMuX3BvcnQuY2xvc2UoKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRnZXQgcG9ydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydDtcblx0fVxufTtcbnZhciBCcm9hZGNhc3RDaGFubmVsVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2JjTmFtZTtcblx0X2NoYW5uZWwgPSBudWxsO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdF9jb25uZWN0ZWRQZWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfYmNOYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcihjaGFubmVsTmFtZSwgXCJicm9hZGNhc3RcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fYmNOYW1lID0gX2JjTmFtZTtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHR0aGlzLl9jaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwodGhpcy5fYmNOYW1lID8/IHRoaXMuX2NoYW5uZWxOYW1lKTtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX2NoYW5uZWwpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9jaGFubmVsLCAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKGRhdGE/LnNlbmRlciAhPT0gdGhpcy5fY2hhbm5lbE5hbWUpIHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdFx0dGhpcy5fYW5ub3VuY2VQcmVzZW5jZSgpO1xuXHR9XG5cdF9oYW5kbGVJbmNvbWluZyhkYXRhKSB7XG5cdFx0aWYgKGRhdGE/LnR5cGUgPT09IFwiYW5ub3VuY2VcIiB8fCBkYXRhPy50eXBlID09PSBcImNvbm5lY3RcIikge1xuXHRcdFx0Y29uc3Qgc2VuZGVyID0gZGF0YS5zZW5kZXIgPz8gXCJ1bmtub3duXCI7XG5cdFx0XHRjb25zdCBpc05ldyA9ICF0aGlzLl9jb25uZWN0ZWRQZWVycy5oYXMoc2VuZGVyKTtcblx0XHRcdHRoaXMuX2Nvbm5lY3RlZFBlZXJzLmFkZChzZW5kZXIpO1xuXHRcdFx0aWYgKGlzTmV3KSB7XG5cdFx0XHRcdHRoaXMuX2VtaXRJbmNvbWluZ0Nvbm5lY3Rpb24oe1xuXHRcdFx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCA/PyB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRzZW5kZXIsXG5cdFx0XHRcdFx0dHJhbnNwb3J0VHlwZTogXCJicm9hZGNhc3RcIixcblx0XHRcdFx0XHRkYXRhLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJhbm5vdW5jZVwiKSB0aGlzLl9jaGFubmVsPy5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0dHlwZTogXCJhbm5vdW5jZS1hY2tcIixcblx0XHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0X2Fubm91bmNlUHJlc2VuY2UoKSB7XG5cdFx0dGhpcy5fY2hhbm5lbD8ucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0dHlwZTogXCJhbm5vdW5jZVwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZFBlZXJzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGVkUGVlcnNdO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9jaGFubmVsPy5jbG9zZSgpO1xuXHRcdHRoaXMuX2NoYW5uZWwgPSBudWxsO1xuXHRcdHRoaXMuX2Nvbm5lY3RlZFBlZXJzLmNsZWFyKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgV2ViU29ja2V0VHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3VybDtcblx0X3Byb3RvY29scztcblx0X3dzID0gbnVsbDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRfcGVuZGluZyA9IFtdO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2Nvbm5lY3RlZENoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF91cmwsIF9wcm90b2NvbHMsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcIndlYnNvY2tldFwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl91cmwgPSBfdXJsO1xuXHRcdHRoaXMuX3Byb3RvY29scyA9IF9wcm90b2NvbHM7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0Y29uc3QgdXJsID0gdHlwZW9mIHRoaXMuX3VybCA9PT0gXCJzdHJpbmdcIiA/IHRoaXMuX3VybCA6IHRoaXMuX3VybC5ocmVmO1xuXHRcdHRoaXMuX3dzID0gbmV3IFdlYlNvY2tldCh1cmwsIHRoaXMuX3Byb3RvY29scyk7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RpbmdcIik7XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IHtcblx0XHRcdGlmICh0aGlzLl93cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcblx0XHRcdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGU6IF8sIC4uLmRhdGEgfSA9IG1zZztcblx0XHRcdFx0dGhpcy5fd3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9IGVsc2UgdGhpcy5fcGVuZGluZy5wdXNoKG1zZyk7XG5cdFx0fTtcblx0XHR0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKFwib3BlblwiLCAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwib3BlblwiKTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuZm9yRWFjaCgobSkgPT4gc2VuZChtKSk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nID0gW107XG5cdFx0XHR0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0c2VuZGVyOiBcInNlcnZlclwiLFxuXHRcdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndlYnNvY2tldFwiLFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl93cywgKGRhdGEpID0+IHRoaXMuX2hhbmRsZUluY29taW5nKGRhdGEpLCAoZXJyKSA9PiB0aGlzLl9pbmJvdW5kLmVycm9yKGVyciksICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdFx0XHR0aGlzLl9pbmJvdW5kLmNvbXBsZXRlKCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZykpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImNoYW5uZWwtY29ubmVjdFwiIHx8IGRhdGE/LnR5cGUgPT09IFwicGVlci1jb25uZWN0XCIgfHwgZGF0YT8udHlwZSA9PT0gXCJqb2luXCIpIHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSBkYXRhLmNoYW5uZWwgPz8gZGF0YS5yb29tID8/IHRoaXMuX2NoYW5uZWxOYW1lO1xuXHRcdFx0aWYgKCF0aGlzLl9jb25uZWN0ZWRDaGFubmVscy5oYXMoY2hhbm5lbCkpIHtcblx0XHRcdFx0dGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuYWRkKGNoYW5uZWwpO1xuXHRcdFx0XHR0aGlzLl9lbWl0SW5jb21pbmdDb25uZWN0aW9uKHtcblx0XHRcdFx0XHRpZDogZGF0YS5pZCA/PyBVVUlEdjQoKSxcblx0XHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRcdHNlbmRlcjogZGF0YS5zZW5kZXIgPz8gZGF0YS5wZWVySWQgPz8gXCJyZW1vdGVcIixcblx0XHRcdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndlYnNvY2tldFwiLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0am9pbkNoYW5uZWwoY2hhbm5lbCkge1xuXHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHR0eXBlOiBcImpvaW5cIixcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0bGVhdmVDaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLl9jb25uZWN0ZWRDaGFubmVscy5kZWxldGUoY2hhbm5lbCk7XG5cdFx0dGhpcy5zZW5kKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwibGVhdmVcIixcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdH1cblx0Z2V0IGNvbm5lY3RlZENoYW5uZWxzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY29ubmVjdGVkQ2hhbm5lbHNdO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl93cz8uY2xvc2UoKTtcblx0XHR0aGlzLl93cyA9IG51bGw7XG5cdFx0dGhpcy5fY29ubmVjdGVkQ2hhbm5lbHMuY2xlYXIoKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxuXHRnZXQgd3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dzO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cbn07XG52YXIgQ2hyb21lUnVudGltZVRyYW5zcG9ydCA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlciB7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS1ydW50aW1lXCIsIG9wdGlvbnMpO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJjaHJvbWUtcnVudGltZVwiKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJjaHJvbWUtcnVudGltZVwiLCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpLCB2b2lkIDApO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIENocm9tZVRhYnNUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfdGFiSWQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUsIF90YWJJZCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwiY2hyb21lLXRhYnNcIiwgb3B0aW9ucyk7XG5cdFx0dGhpcy5fdGFiSWQgPSBfdGFiSWQ7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS50YWJzKSByZXR1cm47XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IHtcblx0XHRcdGlmICh0aGlzLl90YWJJZCAhPSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0XHRcdGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRoaXMuX3RhYklkLCBkYXRhKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS1ydW50aW1lXCIsIChkYXRhKSA9PiB0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSkpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG5cdHNldFRhYklkKHRhYklkKSB7XG5cdFx0dGhpcy5fdGFiSWQgPSB0YWJJZDtcblx0fVxufTtcbnZhciBDaHJvbWVQb3J0VHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X3BvcnROYW1lO1xuXHRfdGFiSWQ7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BvcnQgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX3BvcnROYW1lLCBfdGFiSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS1wb3J0XCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX3BvcnROYW1lID0gX3BvcnROYW1lO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdGF0dGFjaCgpIHtcblx0XHRpZiAodGhpcy5faXNBdHRhY2hlZCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdHRoaXMuX3BvcnQgPSB0aGlzLl90YWJJZCAhPSBudWxsICYmIGNocm9tZS50YWJzPy5jb25uZWN0ID8gY2hyb21lLnRhYnMuY29ubmVjdCh0aGlzLl90YWJJZCwgeyBuYW1lOiB0aGlzLl9wb3J0TmFtZSB9KSA6IGNocm9tZS5ydW50aW1lLmNvbm5lY3QoeyBuYW1lOiB0aGlzLl9wb3J0TmFtZSB9KTtcblx0XHRjb25zdCBzZW5kID0gKG1zZykgPT4gdGhpcy5fcG9ydD8ucG9zdE1lc3NhZ2UobXNnKTtcblx0XHRjb25zdCBvbk1lc3NhZ2UgPSAobXNnKSA9PiB0aGlzLl9pbmJvdW5kLm5leHQobXNnKTtcblx0XHR0aGlzLl9wb3J0Lm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihvbk1lc3NhZ2UpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9wb3J0Py5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIob25NZXNzYWdlKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3BvcnQ/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdH0gY2F0Y2gge31cblx0XHRcdHRoaXMuX3BvcnQgPSBudWxsO1xuXHRcdH07XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZykpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRkZXRhY2goKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0c3VwZXIuZGV0YWNoKCk7XG5cdH1cbn07XG52YXIgQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfZXh0ZXJuYWxJZDtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgX2V4dGVybmFsSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcImNocm9tZS1leHRlcm5hbFwiLCBvcHRpb25zKTtcblx0XHR0aGlzLl9leHRlcm5hbElkID0gX2V4dGVybmFsSWQ7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0aWYgKHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0Y29uc3Qgc2VuZCA9IChtc2cpID0+IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHRoaXMuX2V4dGVybmFsSWQsIG1zZyk7XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobXNnKSA9PiB7XG5cdFx0XHR0aGlzLl9pbmJvdW5kLm5leHQobXNnKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsPy5hZGRMaXN0ZW5lcj8uKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4gY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlRXh0ZXJuYWw/LnJlbW92ZUxpc3RlbmVyPy4obGlzdGVuZXIpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9vdXRib3VuZC5zdWJzY3JpYmUoKG1zZykgPT4gc2VuZChtc2cpKSk7XG5cdFx0dGhpcy5faXNBdHRhY2hlZCA9IHRydWU7XG5cdH1cblx0ZGV0YWNoKCkge1xuXHRcdHRoaXMuX2NsZWFudXA/LigpO1xuXHRcdHN1cGVyLmRldGFjaCgpO1xuXHR9XG59O1xudmFyIFNlcnZpY2VXb3JrZXJUcmFuc3BvcnQgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydEFkYXB0ZXIge1xuXHRfaXNIb3N0O1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBfaXNIb3N0ID0gZmFsc2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKGNoYW5uZWxOYW1lLCBcInNlcnZpY2Utd29ya2VyXCIsIG9wdGlvbnMpO1xuXHRcdHRoaXMuX2lzSG9zdCA9IF9pc0hvc3Q7XG5cdH1cblx0YXR0YWNoKCkge1xuXHRcdGlmICh0aGlzLl9pc0F0dGFjaGVkKSByZXR1cm47XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5faXNIb3N0ID8gXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIgOiBcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiO1xuXHRcdGNvbnN0IHNlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIodGFyZ2V0KTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGFyZ2V0LCAoZGF0YSkgPT4gdGhpcy5faW5ib3VuZC5uZXh0KGRhdGEpKTtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fb3V0Ym91bmQuc3Vic2NyaWJlKChtc2cpID0+IHNlbmQobXNnLCBtc2cudHJhbnNmZXJhYmxlKSkpO1xuXHRcdHRoaXMuX2lzQXR0YWNoZWQgPSB0cnVlO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBTZWxmVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyIHtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoY2hhbm5lbE5hbWUsIFwic2VsZlwiLCBvcHRpb25zKTtcblx0fVxuXHRhdHRhY2goKSB7XG5cdFx0aWYgKHRoaXMuX2lzQXR0YWNoZWQpIHJldHVybjtcblx0XHRjb25zdCBzZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VsZlwiKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIoXCJzZWxmXCIsIChkYXRhKSA9PiB0aGlzLl9oYW5kbGVJbmNvbWluZyhkYXRhKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX291dGJvdW5kLnN1YnNjcmliZSgobXNnKSA9PiBzZW5kKG1zZywgbXNnLnRyYW5zZmVyYWJsZSkpKTtcblx0XHR0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcblx0fVxuXHRfaGFuZGxlSW5jb21pbmcoZGF0YSkge1xuXHRcdGlmIChkYXRhPy50eXBlID09PSBcImNyZWF0ZUNoYW5uZWxcIiB8fCBkYXRhPy50eXBlID09PSBcImNvbm5lY3RDaGFubmVsXCIpIHRoaXMuX2VtaXRJbmNvbWluZ0Nvbm5lY3Rpb24oe1xuXHRcdFx0aWQ6IGRhdGEucmVxSWQgPz8gVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJzZWxmXCIsXG5cdFx0XHRwb3J0OiBkYXRhLm1lc3NhZ2VQb3J0ID8/IGRhdGEucG9ydCxcblx0XHRcdGRhdGEsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHR0aGlzLl9pbmJvdW5kLm5leHQoZGF0YSk7XG5cdH1cblx0bm90aWZ5Q2hhbm5lbENyZWF0ZWQoY2hhbm5lbCwgc2VuZGVyLCByZXFJZCkge1xuXHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdHR5cGU6IFwiY2hhbm5lbENyZWF0ZWRcIixcblx0XHRcdGNoYW5uZWwsXG5cdFx0XHRzZW5kZXIsXG5cdFx0XHRyZXFJZCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdGRldGFjaCgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5kZXRhY2goKTtcblx0fVxufTtcbnZhciBUcmFuc3BvcnRGYWN0b3J5ID0ge1xuXHR3b3JrZXI6IChuYW1lLCBzb3VyY2UsIG9wdHMpID0+IG5ldyBXb3JrZXJUcmFuc3BvcnQobmFtZSwgc291cmNlLCBvcHRzKSxcblx0bWVzc2FnZVBvcnQ6IChuYW1lLCBwb3J0LCBvcHRzKSA9PiBuZXcgTWVzc2FnZVBvcnRUcmFuc3BvcnQobmFtZSwgcG9ydCwgb3B0cyksXG5cdGJyb2FkY2FzdDogKG5hbWUsIGJjTmFtZSwgb3B0cykgPT4gbmV3IEJyb2FkY2FzdENoYW5uZWxUcmFuc3BvcnQobmFtZSwgYmNOYW1lLCBvcHRzKSxcblx0d2Vic29ja2V0OiAobmFtZSwgdXJsLCBwcm90b2NvbHMsIG9wdHMpID0+IG5ldyBXZWJTb2NrZXRUcmFuc3BvcnQobmFtZSwgdXJsLCBwcm90b2NvbHMsIG9wdHMpLFxuXHRjaHJvbWVSdW50aW1lOiAobmFtZSwgb3B0cykgPT4gbmV3IENocm9tZVJ1bnRpbWVUcmFuc3BvcnQobmFtZSwgb3B0cyksXG5cdGNocm9tZVRhYnM6IChuYW1lLCB0YWJJZCwgb3B0cykgPT4gbmV3IENocm9tZVRhYnNUcmFuc3BvcnQobmFtZSwgdGFiSWQsIG9wdHMpLFxuXHRjaHJvbWVQb3J0OiAobmFtZSwgcG9ydE5hbWUsIHRhYklkLCBvcHRzKSA9PiBuZXcgQ2hyb21lUG9ydFRyYW5zcG9ydChuYW1lLCBwb3J0TmFtZSwgdGFiSWQsIG9wdHMpLFxuXHRjaHJvbWVFeHRlcm5hbDogKG5hbWUsIGV4dGVybmFsSWQsIG9wdHMpID0+IG5ldyBDaHJvbWVFeHRlcm5hbFRyYW5zcG9ydChuYW1lLCBleHRlcm5hbElkLCBvcHRzKSxcblx0c2VydmljZVdvcmtlcjogKG5hbWUsIGlzSG9zdCwgb3B0cykgPT4gbmV3IFNlcnZpY2VXb3JrZXJUcmFuc3BvcnQobmFtZSwgaXNIb3N0LCBvcHRzKSxcblx0c2VsZjogKG5hbWUsIG9wdHMpID0+IG5ldyBTZWxmVHJhbnNwb3J0KG5hbWUsIG9wdHMpXG59O1xuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbk9ic2VydmVyKHRyYW5zcG9ydHMpIHtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSBbXTtcblx0Y29uc3Qgc3ViamVjdCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0Zm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykgdHJhbnNwb3J0LnN1YnNjcmliZUluY29taW5nKChjb25uKSA9PiB7XG5cdFx0Y29ubmVjdGlvbnMucHVzaChjb25uKTtcblx0XHRzdWJqZWN0Lm5leHQoY29ubik7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHN1YnNjcmliZTogKGhhbmRsZXIpID0+IHN1YmplY3Quc3Vic2NyaWJlKGhhbmRsZXIpLFxuXHRcdGdldENvbm5lY3Rpb25zOiAoKSA9PiBbLi4uY29ubmVjdGlvbnNdXG5cdH07XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3N0b3JhZ2UvU3RvcmFnZS50c1xudmFyIERCX05BTUUgPSBcInVuaWZvcm1fY2hhbm5lbHNcIjtcbnZhciBEQl9WRVJTSU9OID0gMTtcbnZhciBTVE9SRVMgPSB7XG5cdE1FU1NBR0VTOiBcIm1lc3NhZ2VzXCIsXG5cdE1BSUxCT1g6IFwibWFpbGJveFwiLFxuXHRQRU5ESU5HOiBcInBlbmRpbmdcIixcblx0RVhDSEFOR0U6IFwiZXhjaGFuZ2VcIixcblx0VFJBTlNBQ1RJT05TOiBcInRyYW5zYWN0aW9uc1wiXG59O1xudmFyIENoYW5uZWxTdG9yYWdlID0gY2xhc3Mge1xuXHRfZGIgPSBudWxsO1xuXHRfaXNPcGVuID0gZmFsc2U7XG5cdF9vcGVuUHJvbWlzZSA9IG51bGw7XG5cdF9jaGFubmVsTmFtZTtcblx0X21lc3NhZ2VVcGRhdGVzID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9leGNoYW5nZVVwZGF0ZXMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHR9XG5cdGFzeW5jIG9wZW4oKSB7XG5cdFx0aWYgKHRoaXMuX2RiICYmIHRoaXMuX2lzT3BlbikgcmV0dXJuIHRoaXMuX2RiO1xuXHRcdGlmICh0aGlzLl9vcGVuUHJvbWlzZSkgcmV0dXJuIHRoaXMuX29wZW5Qcm9taXNlO1xuXHRcdHRoaXMuX29wZW5Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKERCX05BTUUsIERCX1ZFUlNJT04pO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9vcGVuUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIG9wZW4gSW5kZXhlZERCXCIpKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fZGIgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0dGhpcy5faXNPcGVuID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fb3BlblByb21pc2UgPSBudWxsO1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMuX2RiKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG5cdFx0XHRcdHRoaXMuX2NyZWF0ZVN0b3JlcyhkYik7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLl9vcGVuUHJvbWlzZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fZGIpIHtcblx0XHRcdHRoaXMuX2RiLmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9kYiA9IG51bGw7XG5cdFx0XHR0aGlzLl9pc09wZW4gPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0X2NyZWF0ZVN0b3JlcyhkYikge1xuXHRcdGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRVMuTUVTU0FHRVMpKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlc1N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoXCJjaGFubmVsXCIsIFwiY2hhbm5lbFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwic3RhdHVzXCIsIFwic3RhdHVzXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoXCJyZWNpcGllbnRcIiwgXCJyZWNpcGllbnRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5jcmVhdGVJbmRleChcImNyZWF0ZWRBdFwiLCBcImNyZWF0ZWRBdFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtZXNzYWdlc1N0b3JlLmNyZWF0ZUluZGV4KFwiY2hhbm5lbF9zdGF0dXNcIiwgW1wiY2hhbm5lbFwiLCBcInN0YXR1c1wiXSwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdH1cblx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVTLk1BSUxCT1gpKSB7XG5cdFx0XHRjb25zdCBtYWlsYm94U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShTVE9SRVMuTUFJTEJPWCwgeyBrZXlQYXRoOiBcImlkXCIgfSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuY3JlYXRlSW5kZXgoXCJjaGFubmVsXCIsIFwiY2hhbm5lbFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuY3JlYXRlSW5kZXgoXCJwcmlvcml0eVwiLCBcInByaW9yaXR5XCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdG1haWxib3hTdG9yZS5jcmVhdGVJbmRleChcImV4cGlyZXNBdFwiLCBcImV4cGlyZXNBdFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0fVxuXHRcdGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRVMuUEVORElORykpIHtcblx0XHRcdGNvbnN0IHBlbmRpbmdTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFUy5QRU5ESU5HLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdHBlbmRpbmdTdG9yZS5jcmVhdGVJbmRleChcImNoYW5uZWxcIiwgXCJjaGFubmVsXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdHBlbmRpbmdTdG9yZS5jcmVhdGVJbmRleChcImNyZWF0ZWRBdFwiLCBcImNyZWF0ZWRBdFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0fVxuXHRcdGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRVMuRVhDSEFOR0UpKSB7XG5cdFx0XHRjb25zdCBleGNoYW5nZVN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLkVYQ0hBTkdFLCB7IGtleVBhdGg6IFwiaWRcIiB9KTtcblx0XHRcdGV4Y2hhbmdlU3RvcmUuY3JlYXRlSW5kZXgoXCJrZXlcIiwgXCJrZXlcIiwgeyB1bmlxdWU6IHRydWUgfSk7XG5cdFx0XHRleGNoYW5nZVN0b3JlLmNyZWF0ZUluZGV4KFwib3duZXJcIiwgXCJvd25lclwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0fVxuXHRcdGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRVMuVFJBTlNBQ1RJT05TKSkgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVTLlRSQU5TQUNUSU9OUywgeyBrZXlQYXRoOiBcImlkXCIgfSkuY3JlYXRlSW5kZXgoXCJjcmVhdGVkQXRcIiwgXCJjcmVhdGVkQXRcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHR9XG5cdGFzeW5jIGRlZmVyKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0Y29uc3Qgc3RvcmVkTWVzc2FnZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1lc3NhZ2UuY2hhbm5lbCxcblx0XHRcdHNlbmRlcjogbWVzc2FnZS5zZW5kZXIgPz8gdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRyZWNpcGllbnQ6IG1lc3NhZ2UuY2hhbm5lbCxcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdHBheWxvYWQ6IG1lc3NhZ2UucGF5bG9hZCxcblx0XHRcdHN0YXR1czogXCJwZW5kaW5nXCIsXG5cdFx0XHRwcmlvcml0eTogb3B0aW9ucy5wcmlvcml0eSA/PyAwLFxuXHRcdFx0Y3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0dXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0ZXhwaXJlc0F0OiBvcHRpb25zLmV4cGlyZXNJbiA/IERhdGUubm93KCkgKyBvcHRpb25zLmV4cGlyZXNJbiA6IG51bGwsXG5cdFx0XHRyZXRyeUNvdW50OiAwLFxuXHRcdFx0bWF4UmV0cmllczogb3B0aW9ucy5tYXhSZXRyaWVzID8/IDMsXG5cdFx0XHRtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YVxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oW1NUT1JFUy5NRVNTQUdFUywgU1RPUkVTLk1BSUxCT1hdLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzU3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuTUVTU0FHRVMpO1xuXHRcdFx0Y29uc3QgbWFpbGJveFN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gpO1xuXHRcdFx0bWVzc2FnZXNTdG9yZS5hZGQoc3RvcmVkTWVzc2FnZSk7XG5cdFx0XHRtYWlsYm94U3RvcmUuYWRkKHN0b3JlZE1lc3NhZ2UpO1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChzdG9yZWRNZXNzYWdlKTtcblx0XHRcdFx0cmVzb2x2ZShzdG9yZWRNZXNzYWdlLmlkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZGVmZXIgbWVzc2FnZVwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZ2V0RGVmZXJyZWRNZXNzYWdlcyhjaGFubmVsLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NRVNTQUdFUywgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZShTVE9SRVMuTUVTU0FHRVMpO1xuXHRcdFx0Y29uc3QgaW5kZXggPSBvcHRpb25zLnN0YXR1cyA/IHN0b3JlLmluZGV4KFwiY2hhbm5lbF9zdGF0dXNcIikgOiBzdG9yZS5pbmRleChcImNoYW5uZWxcIik7XG5cdFx0XHRjb25zdCBxdWVyeSA9IG9wdGlvbnMuc3RhdHVzID8gSURCS2V5UmFuZ2Uub25seShbY2hhbm5lbCwgb3B0aW9ucy5zdGF0dXNdKSA6IElEQktleVJhbmdlLm9ubHkoY2hhbm5lbCk7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gaW5kZXguZ2V0QWxsKHF1ZXJ5LCBvcHRpb25zLmxpbWl0KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAob3B0aW9ucy5vZmZzZXQpIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKG9wdGlvbnMub2Zmc2V0KTtcblx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgZGVmZXJyZWQgbWVzc2FnZXNcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NOZXh0UGVuZGluZyhjaGFubmVsKSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NRVNTQUdFUywgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKS5pbmRleChcImNoYW5uZWxfc3RhdHVzXCIpLm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seShbY2hhbm5lbCwgXCJwZW5kaW5nXCJdKSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY3Vyc29yID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gY3Vyc29yLnZhbHVlO1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc3RhdHVzID0gXCJwcm9jZXNzaW5nXCI7XG5cdFx0XHRcdFx0bWVzc2FnZS51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHRcdGN1cnNvci51cGRhdGUobWVzc2FnZSk7XG5cdFx0XHRcdFx0dGhpcy5fbWVzc2FnZVVwZGF0ZXMubmV4dChtZXNzYWdlKTtcblx0XHRcdFx0XHRyZXNvbHZlKG1lc3NhZ2UpO1xuXHRcdFx0XHR9IGVsc2UgcmVzb2x2ZShudWxsKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBwcm9jZXNzIHBlbmRpbmcgbWVzc2FnZVwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgbWFya0RlbGl2ZXJlZChtZXNzYWdlSWQpIHtcblx0XHRhd2FpdCB0aGlzLl91cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VJZCwgXCJkZWxpdmVyZWRcIik7XG5cdH1cblx0YXN5bmMgbWFya0ZhaWxlZChtZXNzYWdlSWQpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NRVNTQUdFUywgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQobWVzc2FnZUlkKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlLnJldHJ5Q291bnQrKztcblx0XHRcdFx0bWVzc2FnZS51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHRpZiAobWVzc2FnZS5yZXRyeUNvdW50IDwgbWVzc2FnZS5tYXhSZXRyaWVzKSBtZXNzYWdlLnN0YXR1cyA9IFwicGVuZGluZ1wiO1xuXHRcdFx0XHRlbHNlIG1lc3NhZ2Uuc3RhdHVzID0gXCJmYWlsZWRcIjtcblx0XHRcdFx0c3RvcmUucHV0KG1lc3NhZ2UpO1xuXHRcdFx0XHR0aGlzLl9tZXNzYWdlVXBkYXRlcy5uZXh0KG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXNvbHZlKG1lc3NhZ2Uuc3RhdHVzID09PSBcInBlbmRpbmdcIik7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbWFyayBtZXNzYWdlIGFzIGZhaWxlZFwiKSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgX3VwZGF0ZU1lc3NhZ2VTdGF0dXMobWVzc2FnZUlkLCBzdGF0dXMpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBzdG9yZSA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NRVNTQUdFUywgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoU1RPUkVTLk1FU1NBR0VTKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQobWVzc2FnZUlkKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRcdFx0bWVzc2FnZS51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHRcdHN0b3JlLnB1dChtZXNzYWdlKTtcblx0XHRcdFx0XHR0aGlzLl9tZXNzYWdlVXBkYXRlcy5uZXh0KG1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgbWVzc2FnZSBzdGF0dXNcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldE1haWxib3goY2hhbm5lbCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NQUlMQk9YLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFNUT1JFUy5NQUlMQk9YKS5pbmRleChcImNoYW5uZWxcIikuZ2V0QWxsKElEQktleVJhbmdlLm9ubHkoY2hhbm5lbCksIG9wdGlvbnMubGltaXQpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGxldCByZXN1bHRzID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChvcHRpb25zLnNvcnRCeSA9PT0gXCJwcmlvcml0eVwiKSByZXN1bHRzLnNvcnQoKGEsIGIpID0+IGIucHJpb3JpdHkgLSBhLnByaW9yaXR5KTtcblx0XHRcdFx0ZWxzZSByZXN1bHRzLnNvcnQoKGEsIGIpID0+IGIuY3JlYXRlZEF0IC0gYS5jcmVhdGVkQXQpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3VsdHMpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBtYWlsYm94XCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRNYWlsYm94U3RhdHMoY2hhbm5lbCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXREZWZlcnJlZE1lc3NhZ2VzKGNoYW5uZWwpO1xuXHRcdGNvbnN0IHN0YXRzID0ge1xuXHRcdFx0dG90YWw6IG1lc3NhZ2VzLmxlbmd0aCxcblx0XHRcdHBlbmRpbmc6IDAsXG5cdFx0XHRwcm9jZXNzaW5nOiAwLFxuXHRcdFx0ZGVsaXZlcmVkOiAwLFxuXHRcdFx0ZmFpbGVkOiAwLFxuXHRcdFx0ZXhwaXJlZDogMFxuXHRcdH07XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykgaWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8IG5vdykgc3RhdHMuZXhwaXJlZCsrO1xuXHRcdGVsc2Ugc3RhdHNbbXNnLnN0YXR1c10rKztcblx0XHRyZXR1cm4gc3RhdHM7XG5cdH1cblx0YXN5bmMgY2xlYXJNYWlsYm94KGNoYW5uZWwpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5NQUlMQk9YLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IGluZGV4ID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLk1BSUxCT1gpLmluZGV4KFwiY2hhbm5lbFwiKTtcblx0XHRcdGxldCBkZWxldGVkQ291bnQgPSAwO1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seShjaGFubmVsKSk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY3Vyc29yID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdGlmIChjdXJzb3IpIHtcblx0XHRcdFx0XHRjdXJzb3IuZGVsZXRlKCk7XG5cdFx0XHRcdFx0ZGVsZXRlZENvdW50Kys7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZShkZWxldGVkQ291bnQpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNsZWFyIG1haWxib3hcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHJlZ2lzdGVyUGVuZGluZyhvcGVyYXRpb24pIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdGNvbnN0IHBlbmRpbmcgPSB7XG5cdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHR5cGU6IG9wZXJhdGlvbi50eXBlLFxuXHRcdFx0ZGF0YTogb3BlcmF0aW9uLmRhdGEsXG5cdFx0XHRtZXRhZGF0YTogb3BlcmF0aW9uLm1ldGFkYXRhLFxuXHRcdFx0Y3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0c3RhdHVzOiBcInBlbmRpbmdcIlxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLlBFTkRJTkcsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0dHgub2JqZWN0U3RvcmUoU1RPUkVTLlBFTkRJTkcpLmFkZChwZW5kaW5nKTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKHBlbmRpbmcuaWQpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIHBlbmRpbmcgb3BlcmF0aW9uXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRQZW5kaW5nT3BlcmF0aW9ucygpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLlBFTkRJTkcsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLlBFTkRJTkcpLmluZGV4KFwiY2hhbm5lbFwiKS5nZXRBbGwoSURCS2V5UmFuZ2Uub25seSh0aGlzLl9jaGFubmVsTmFtZSkpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBwZW5kaW5nIG9wZXJhdGlvbnNcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGNvbXBsZXRlUGVuZGluZyhvcGVyYXRpb25JZCkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLlBFTkRJTkcsIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0dHgub2JqZWN0U3RvcmUoU1RPUkVTLlBFTkRJTkcpLmRlbGV0ZShvcGVyYXRpb25JZCk7XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNvbXBsZXRlIHBlbmRpbmcgb3BlcmF0aW9uXCIpKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBhd2FpdFBlbmRpbmcob3BlcmF0aW9uSWQsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gM2U0O1xuXHRcdGNvbnN0IHBvbGxJbnRlcnZhbCA9IG9wdGlvbnMucG9sbEludGVydmFsID8/IDEwMDtcblx0XHRjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXHRcdHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZW91dCkge1xuXHRcdFx0Y29uc3QgcGVuZGluZyA9IGF3YWl0IHRoaXMuX2dldFBlbmRpbmdCeUlkKG9wZXJhdGlvbklkKTtcblx0XHRcdGlmICghcGVuZGluZykgcmV0dXJuIG51bGw7XG5cdFx0XHRpZiAocGVuZGluZy5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb21wbGV0ZVBlbmRpbmcob3BlcmF0aW9uSWQpO1xuXHRcdFx0XHRyZXR1cm4gcGVuZGluZy5yZXN1bHQ7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBwb2xsSW50ZXJ2YWwpKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQZW5kaW5nIG9wZXJhdGlvbiAke29wZXJhdGlvbklkfSB0aW1lZCBvdXRgKTtcblx0fVxuXHRhc3luYyBfZ2V0UGVuZGluZ0J5SWQoaWQpIHtcblx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLlBFTkRJTkcsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLlBFTkRJTkcpLmdldChpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQgPz8gbnVsbCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgcGVuZGluZyBvcGVyYXRpb25cIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGV4Y2hhbmdlUHV0KGtleSwgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0Y29uc3QgcmVjb3JkID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0a2V5LFxuXHRcdFx0dmFsdWUsXG5cdFx0XHRvd25lcjogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzaGFyZWRXaXRoOiBvcHRpb25zLnNoYXJlZFdpdGggPz8gW1wiKlwiXSxcblx0XHRcdHZlcnNpb246IDEsXG5cdFx0XHRjcmVhdGVkQXQ6IERhdGUubm93KCksXG5cdFx0XHR1cGRhdGVkQXQ6IERhdGUubm93KClcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFUy5FWENIQU5HRSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5FWENIQU5HRSk7XG5cdFx0XHRjb25zdCBnZXRSZXF1ZXN0ID0gc3RvcmUuaW5kZXgoXCJrZXlcIikuZ2V0KGtleSk7XG5cdFx0XHRnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSBnZXRSZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0XHRcdFx0cmVjb3JkLmlkID0gZXhpc3RpbmcuaWQ7XG5cdFx0XHRcdFx0cmVjb3JkLnZlcnNpb24gPSBleGlzdGluZy52ZXJzaW9uICsgMTtcblx0XHRcdFx0XHRyZWNvcmQuY3JlYXRlZEF0ID0gZXhpc3RpbmcuY3JlYXRlZEF0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3JlLnB1dChyZWNvcmQpO1xuXHRcdFx0fTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2V4Y2hhbmdlVXBkYXRlcy5uZXh0KHJlY29yZCk7XG5cdFx0XHRcdHJlc29sdmUocmVjb3JkLmlkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcHV0IGV4Y2hhbmdlIGRhdGFcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGV4Y2hhbmdlR2V0KGtleSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihTVE9SRVMuRVhDSEFOR0UsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoU1RPUkVTLkVYQ0hBTkdFKS5pbmRleChcImtleVwiKS5nZXQoa2V5KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWNvcmQgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFyZWNvcmQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX2NhbkFjY2Vzc0V4Y2hhbmdlKHJlY29yZCkpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG51bGwpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKHJlY29yZC52YWx1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGV4Y2hhbmdlIGRhdGFcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGV4Y2hhbmdlRGVsZXRlKGtleSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLkVYQ0hBTkdFKTtcblx0XHRcdGNvbnN0IGdldFJlcXVlc3QgPSBzdG9yZS5pbmRleChcImtleVwiKS5nZXQoa2V5KTtcblx0XHRcdGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWNvcmQgPSBnZXRSZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFyZWNvcmQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlY29yZC5vd25lciAhPT0gdGhpcy5fY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcmUuZGVsZXRlKHJlY29yZC5pZCk7XG5cdFx0XHR9O1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZGVsZXRlIGV4Y2hhbmdlIGRhdGFcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGV4Y2hhbmdlTG9jayhrZXksIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0Y29uc3QgdGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyAzZTQ7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLkVYQ0hBTkdFKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5pbmRleChcImtleVwiKS5nZXQoa2V5KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWNvcmQgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKCFyZWNvcmQpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlY29yZC5sb2NrICYmIHJlY29yZC5sb2NrLmhvbGRlciAhPT0gdGhpcy5fY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0XHRpZiAocmVjb3JkLmxvY2suZXhwaXJlc0F0ID4gRGF0ZS5ub3coKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlY29yZC5sb2NrID0ge1xuXHRcdFx0XHRcdGhvbGRlcjogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRcdFx0YWNxdWlyZWRBdDogRGF0ZS5ub3coKSxcblx0XHRcdFx0XHRleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0aW1lb3V0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlY29yZC51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuXHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSh0cnVlKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkZhaWxlZCB0byBhY3F1aXJlIGxvY2tcIikpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGV4Y2hhbmdlVW5sb2NrKGtleSkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU1RPUkVTLkVYQ0hBTkdFLCBcInJlYWR3cml0ZVwiKTtcblx0XHRcdGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoU1RPUkVTLkVYQ0hBTkdFKTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5pbmRleChcImtleVwiKS5nZXQoa2V5KTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWNvcmQgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKHJlY29yZCAmJiByZWNvcmQubG9jaz8uaG9sZGVyID09PSB0aGlzLl9jaGFubmVsTmFtZSkge1xuXHRcdFx0XHRcdGRlbGV0ZSByZWNvcmQubG9jaztcblx0XHRcdFx0XHRyZWNvcmQudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRzdG9yZS5wdXQocmVjb3JkKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVsZWFzZSBsb2NrXCIpKTtcblx0XHR9KTtcblx0fVxuXHRfY2FuQWNjZXNzRXhjaGFuZ2UocmVjb3JkKSB7XG5cdFx0aWYgKHJlY29yZC5vd25lciA9PT0gdGhpcy5fY2hhbm5lbE5hbWUpIHJldHVybiB0cnVlO1xuXHRcdGlmIChyZWNvcmQuc2hhcmVkV2l0aC5pbmNsdWRlcyhcIipcIikpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiByZWNvcmQuc2hhcmVkV2l0aC5pbmNsdWRlcyh0aGlzLl9jaGFubmVsTmFtZSk7XG5cdH1cblx0YXN5bmMgYmVnaW5UcmFuc2FjdGlvbigpIHtcblx0XHRyZXR1cm4gbmV3IENoYW5uZWxUcmFuc2FjdGlvbih0aGlzKTtcblx0fVxuXHRhc3luYyBleGVjdXRlVHJhbnNhY3Rpb24ob3BlcmF0aW9ucykge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0Y29uc3Qgc3RvcmVOYW1lcyA9IG5ldyBTZXQob3BlcmF0aW9ucy5tYXAoKG9wKSA9PiBvcC5zdG9yZSkpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKEFycmF5LmZyb20oc3RvcmVOYW1lcyksIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBvcCBvZiBvcGVyYXRpb25zKSB7XG5cdFx0XHRcdGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUob3Auc3RvcmUpO1xuXHRcdFx0XHRzd2l0Y2ggKG9wLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwicHV0XCI6XG5cdFx0XHRcdFx0XHRpZiAob3AudmFsdWUgIT09IHZvaWQgMCkgc3RvcmUucHV0KG9wLnZhbHVlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJkZWxldGVcIjpcblx0XHRcdFx0XHRcdGlmIChvcC5rZXkgIT09IHZvaWQgMCkgc3RvcmUuZGVsZXRlKG9wLmtleSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwidXBkYXRlXCI6IGlmIChvcC5rZXkgIT09IHZvaWQgMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZ2V0UmVxID0gc3RvcmUuZ2V0KG9wLmtleSk7XG5cdFx0XHRcdFx0XHRnZXRSZXEub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZ2V0UmVxLnJlc3VsdCAmJiBvcC52YWx1ZSkgc3RvcmUucHV0KHtcblx0XHRcdFx0XHRcdFx0XHQuLi5nZXRSZXEucmVzdWx0LFxuXHRcdFx0XHRcdFx0XHRcdC4uLm9wLnZhbHVlXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHR4Lm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG5cdFx0XHR0eC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJUcmFuc2FjdGlvbiBmYWlsZWRcIikpO1xuXHRcdH0pO1xuXHR9XG5cdG9uTWVzc2FnZVVwZGF0ZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21lc3NhZ2VVcGRhdGVzLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZXIgfSk7XG5cdH1cblx0b25FeGNoYW5nZVVwZGF0ZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V4Y2hhbmdlVXBkYXRlcy5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVyIH0pO1xuXHR9XG5cdGFzeW5jIGNsZWFudXBFeHBpcmVkKCkge1xuXHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuKCk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihbU1RPUkVTLk1FU1NBR0VTLCBTVE9SRVMuTUFJTEJPWF0sIFwicmVhZHdyaXRlXCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKFNUT1JFUy5NRVNTQUdFUyk7XG5cdFx0XHRjb25zdCBtYWlsYm94U3RvcmUgPSB0eC5vYmplY3RTdG9yZShTVE9SRVMuTUFJTEJPWCk7XG5cdFx0XHRsZXQgZGVsZXRlZENvdW50ID0gMDtcblx0XHRcdGNvbnN0IG1zZ1JlcXVlc3QgPSBtZXNzYWdlc1N0b3JlLm9wZW5DdXJzb3IoKTtcblx0XHRcdG1zZ1JlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSBtc2dSZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKGN1cnNvcikge1xuXHRcdFx0XHRcdGNvbnN0IG1zZyA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0XHRpZiAobXNnLmV4cGlyZXNBdCAmJiBtc2cuZXhwaXJlc0F0IDwgbm93KSB7XG5cdFx0XHRcdFx0XHRjdXJzb3IuZGVsZXRlKCk7XG5cdFx0XHRcdFx0XHRkZWxldGVkQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBtYWlsUmVxdWVzdCA9IG1haWxib3hTdG9yZS5vcGVuQ3Vyc29yKCk7XG5cdFx0XHRtYWlsUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IG1haWxSZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKGN1cnNvcikge1xuXHRcdFx0XHRcdGNvbnN0IG1zZyA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0XHRpZiAobXNnLmV4cGlyZXNBdCAmJiBtc2cuZXhwaXJlc0F0IDwgbm93KSB7XG5cdFx0XHRcdFx0XHRjdXJzb3IuZGVsZXRlKCk7XG5cdFx0XHRcdFx0XHRkZWxldGVkQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0eC5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZShkZWxldGVkQ291bnQpO1xuXHRcdFx0dHgub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNsZWFudXAgZXhwaXJlZFwiKSk7XG5cdFx0fSk7XG5cdH1cbn07XG52YXIgQ2hhbm5lbFRyYW5zYWN0aW9uID0gY2xhc3Mge1xuXHRfc3RvcmFnZTtcblx0X29wZXJhdGlvbnMgPSBbXTtcblx0X2lzQ29tbWl0dGVkID0gZmFsc2U7XG5cdF9pc1JvbGxlZEJhY2sgPSBmYWxzZTtcblx0Y29uc3RydWN0b3IoX3N0b3JhZ2UpIHtcblx0XHR0aGlzLl9zdG9yYWdlID0gX3N0b3JhZ2U7XG5cdH1cblx0cHV0KHN0b3JlLCB2YWx1ZSkge1xuXHRcdHRoaXMuX2NoZWNrU3RhdGUoKTtcblx0XHR0aGlzLl9vcGVyYXRpb25zLnB1c2goe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJwdXRcIixcblx0XHRcdHN0b3JlLFxuXHRcdFx0dmFsdWUsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRkZWxldGUoc3RvcmUsIGtleSkge1xuXHRcdHRoaXMuX2NoZWNrU3RhdGUoKTtcblx0XHR0aGlzLl9vcGVyYXRpb25zLnB1c2goe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJkZWxldGVcIixcblx0XHRcdHN0b3JlLFxuXHRcdFx0a2V5LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dXBkYXRlKHN0b3JlLCBrZXksIHVwZGF0ZXMpIHtcblx0XHR0aGlzLl9jaGVja1N0YXRlKCk7XG5cdFx0dGhpcy5fb3BlcmF0aW9ucy5wdXNoKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwidXBkYXRlXCIsXG5cdFx0XHRzdG9yZSxcblx0XHRcdGtleSxcblx0XHRcdHZhbHVlOiB1cGRhdGVzLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YXN5bmMgY29tbWl0KCkge1xuXHRcdHRoaXMuX2NoZWNrU3RhdGUoKTtcblx0XHRpZiAodGhpcy5fb3BlcmF0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuX2lzQ29tbWl0dGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5fc3RvcmFnZS5leGVjdXRlVHJhbnNhY3Rpb24odGhpcy5fb3BlcmF0aW9ucyk7XG5cdFx0dGhpcy5faXNDb21taXR0ZWQgPSB0cnVlO1xuXHR9XG5cdHJvbGxiYWNrKCkge1xuXHRcdHRoaXMuX29wZXJhdGlvbnMgPSBbXTtcblx0XHR0aGlzLl9pc1JvbGxlZEJhY2sgPSB0cnVlO1xuXHR9XG5cdGdldCBvcGVyYXRpb25Db3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb3BlcmF0aW9ucy5sZW5ndGg7XG5cdH1cblx0X2NoZWNrU3RhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2lzQ29tbWl0dGVkKSB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2FjdGlvbiBhbHJlYWR5IGNvbW1pdHRlZFwiKTtcblx0XHRpZiAodGhpcy5faXNSb2xsZWRCYWNrKSB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2FjdGlvbiBhbHJlYWR5IHJvbGxlZCBiYWNrXCIpO1xuXHR9XG59O1xudmFyIF9zdG9yYWdlSW5zdGFuY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldENoYW5uZWxTdG9yYWdlKGNoYW5uZWxOYW1lKSB7XG5cdGlmICghX3N0b3JhZ2VJbnN0YW5jZXMuaGFzKGNoYW5uZWxOYW1lKSkgX3N0b3JhZ2VJbnN0YW5jZXMuc2V0KGNoYW5uZWxOYW1lLCBuZXcgQ2hhbm5lbFN0b3JhZ2UoY2hhbm5lbE5hbWUpKTtcblx0cmV0dXJuIF9zdG9yYWdlSW5zdGFuY2VzLmdldChjaGFubmVsTmFtZSk7XG59XG5mdW5jdGlvbiBjbG9zZUFsbFN0b3JhZ2UoKSB7XG5cdGZvciAoY29uc3Qgc3RvcmFnZSBvZiBfc3RvcmFnZUluc3RhbmNlcy52YWx1ZXMoKSkgc3RvcmFnZS5jbG9zZSgpO1xuXHRfc3RvcmFnZUluc3RhbmNlcy5jbGVhcigpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9jaGFubmVsL0NoYW5uZWxDb250ZXh0LnRzXG52YXIgd29ya2VyQmFzZSA9IGdldFdvcmtlclJlc29sdmVCYXNlVXJsKCk7XG52YXIgd29ya2VyQ29kZSA9IHdvcmtlckJhc2UubGVuZ3RoID4gMCA/IG5ldyBVUkwoXCIuLi90cmFuc3BvcnQvV29ya2VyLnRzXCIsIHdvcmtlckJhc2UpIDogXCJcIjtcbnZhciBSZW1vdGVDaGFubmVsSGVscGVyJDEgPSBjbGFzcyB7XG5cdF9jaGFubmVsO1xuXHRfY29udGV4dDtcblx0X29wdGlvbnM7XG5cdF9jb25uZWN0aW9uO1xuXHRfc3RvcmFnZTtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWwsIF9jb250ZXh0LCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IF9jaGFubmVsO1xuXHRcdHRoaXMuX2NvbnRleHQgPSBfY29udGV4dDtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0dGhpcy5fY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb24oX2NoYW5uZWwpO1xuXHRcdHRoaXMuX3N0b3JhZ2UgPSBnZXRDaGFubmVsU3RvcmFnZShfY2hhbm5lbCk7XG5cdH1cblx0YXN5bmMgcmVxdWVzdChwYXRoLCBhY3Rpb24sIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGxldCBub3JtYWxpemVkUGF0aCA9IHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiID8gW3BhdGhdIDogcGF0aDtcblx0XHRsZXQgbm9ybWFsaXplZEFjdGlvbiA9IGFjdGlvbjtcblx0XHRsZXQgbm9ybWFsaXplZEFyZ3MgPSBhcmdzO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFjdGlvbikgJiYgaXNSZWZsZWN0QWN0aW9uKHBhdGgpKSB7XG5cdFx0XHRvcHRpb25zID0gYXJncztcblx0XHRcdG5vcm1hbGl6ZWRBcmdzID0gYWN0aW9uO1xuXHRcdFx0bm9ybWFsaXplZEFjdGlvbiA9IHBhdGg7XG5cdFx0XHRub3JtYWxpemVkUGF0aCA9IFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dC5nZXRIb3N0KCk/LnJlcXVlc3Qobm9ybWFsaXplZFBhdGgsIG5vcm1hbGl6ZWRBY3Rpb24sIG5vcm1hbGl6ZWRBcmdzLCBvcHRpb25zLCB0aGlzLl9jaGFubmVsKTtcblx0fVxuXHRhc3luYyBkb0ltcG9ydE1vZHVsZSh1cmwsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoW10sIFdSZWZsZWN0QWN0aW9uLklNUE9SVCwgW3VybF0sIG9wdGlvbnMpO1xuXHR9XG5cdGFzeW5jIGRlZmVyTWVzc2FnZShwYXlsb2FkLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcmFnZS5kZWZlcih7XG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiB0aGlzLl9jb250ZXh0Lmhvc3ROYW1lLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRwYXlsb2FkXG5cdFx0fSwgb3B0aW9ucyk7XG5cdH1cblx0YXN5bmMgZ2V0UGVuZGluZ01lc3NhZ2VzKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdG9yYWdlLmdldERlZmVycmVkTWVzc2FnZXModGhpcy5fY2hhbm5lbCwgeyBzdGF0dXM6IFwicGVuZGluZ1wiIH0pO1xuXHR9XG5cdGdldCBjb25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbDtcblx0fVxuXHRnZXQgY29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxufTtcbnZhciBDaGFubmVsSGFuZGxlciQxID0gY2xhc3Mge1xuXHRfY2hhbm5lbDtcblx0X2NvbnRleHQ7XG5cdF9vcHRpb25zO1xuXHRfY29ubmVjdGlvbjtcblx0X3VuaWZpZWQ7XG5cdGdldCBfZm9yUmVzb2x2ZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuX19nZXRQcml2YXRlKFwiX3BlbmRpbmdcIik7XG5cdH1cblx0Z2V0IF9zdWJzY3JpcHRpb25zKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLl9fZ2V0UHJpdmF0ZShcIl9zdWJzY3JpcHRpb25zXCIpO1xuXHR9XG5cdGdldCBfYnJvYWRjYXN0cygpIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZmllZC5fX2dldFByaXZhdGUoXCJfdHJhbnNwb3J0c1wiKTtcblx0fVxuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbCwgX2NvbnRleHQsIF9vcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsID0gX2NoYW5uZWw7XG5cdFx0dGhpcy5fY29udGV4dCA9IF9jb250ZXh0O1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0XHR0aGlzLl9jb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvblBvb2woKS5nZXRPckNyZWF0ZShfY2hhbm5lbCwgXCJpbnRlcm5hbFwiLCBfb3B0aW9ucyk7XG5cdFx0dGhpcy5fdW5pZmllZCA9IG5ldyBVbmlmaWVkQ2hhbm5lbCh7XG5cdFx0XHRuYW1lOiBfY2hhbm5lbCxcblx0XHRcdGF1dG9MaXN0ZW46IGZhbHNlLFxuXHRcdFx0dGltZW91dDogX29wdGlvbnM/LnRpbWVvdXRcblx0XHR9KTtcblx0fVxuXHRjcmVhdGVSZW1vdGVDaGFubmVsKGNoYW5uZWwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0KSB7XG5cdFx0Y29uc3QgdHJhbnNwb3J0ID0gbm9ybWFsaXplVHJhbnNwb3J0QmluZGluZyhicm9hZGNhc3QgPz8gdGhpcy5fY29udGV4dC4kY3JlYXRlT3JVc2VFeGlzdGluZ1JlbW90ZShjaGFubmVsLCBvcHRpb25zLCBicm9hZGNhc3QgPz8gbnVsbCk/Lm1lc3NhZ2VDaGFubmVsPy5wb3J0MSk7XG5cdFx0Y29uc3QgdHJhbnNwb3J0VHlwZSA9IGdldER5bmFtaWNUcmFuc3BvcnRUeXBlKHRyYW5zcG9ydD8udGFyZ2V0ID8/IHRyYW5zcG9ydCk7XG5cdFx0dGhpcy5fdW5pZmllZC5saXN0ZW4odHJhbnNwb3J0Py50YXJnZXQsIHsgdGFyZ2V0Q2hhbm5lbDogY2hhbm5lbCB9KTtcblx0XHRpZiAodHJhbnNwb3J0KSB7XG5cdFx0XHR0aGlzLl9icm9hZGNhc3RzPy5zZXQ/LihjaGFubmVsLCB0cmFuc3BvcnQpO1xuXHRcdFx0aWYgKCEodHJhbnNwb3J0VHlwZSA9PT0gXCJzZWxmXCIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09PSBcInVuZGVmaW5lZFwiKSkgdGhpcy5fdW5pZmllZC5jb25uZWN0KHRyYW5zcG9ydCwgeyB0YXJnZXRDaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdFx0dGhpcy5fY29udGV4dC4kcmVnaXN0ZXJDb25uZWN0aW9uKHtcblx0XHRcdFx0bG9jYWxDaGFubmVsOiB0aGlzLl9jaGFubmVsLFxuXHRcdFx0XHRyZW1vdGVDaGFubmVsOiBjaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWwsXG5cdFx0XHRcdGRpcmVjdGlvbjogXCJvdXRnb2luZ1wiLFxuXHRcdFx0XHR0cmFuc3BvcnRUeXBlXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubm90aWZ5Q2hhbm5lbChjaGFubmVsLCB7XG5cdFx0XHRcdGNvbnRleHRJZDogdGhpcy5fY29udGV4dC5pZCxcblx0XHRcdFx0Y29udGV4dE5hbWU6IHRoaXMuX2NvbnRleHQuaG9zdE5hbWVcblx0XHRcdH0sIFwiY29ubmVjdFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBSZW1vdGVDaGFubmVsSGVscGVyJDEoY2hhbm5lbCwgdGhpcy5fY29udGV4dCwgb3B0aW9ucyk7XG5cdH1cblx0Z2V0Q2hhbm5lbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbDtcblx0fVxuXHRnZXQgY29ubmVjdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbjtcblx0fVxuXHRyZXF1ZXN0KHBhdGgsIGFjdGlvbiwgYXJncywgb3B0aW9ucyA9IHt9LCB0b0NoYW5uZWwgPSBcIndvcmtlclwiKSB7XG5cdFx0bGV0IG5vcm1hbGl6ZWRQYXRoID0gdHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgPyBbcGF0aF0gOiBwYXRoO1xuXHRcdGxldCBub3JtYWxpemVkQXJncyA9IGFyZ3M7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uKSAmJiBpc1JlZmxlY3RBY3Rpb24ocGF0aCkpIHtcblx0XHRcdHRvQ2hhbm5lbCA9IG9wdGlvbnM7XG5cdFx0XHRvcHRpb25zID0gYXJncztcblx0XHRcdG5vcm1hbGl6ZWRBcmdzID0gYWN0aW9uO1xuXHRcdFx0YWN0aW9uID0gcGF0aDtcblx0XHRcdG5vcm1hbGl6ZWRQYXRoID0gW107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLmludm9rZSh0b0NoYW5uZWwsIGFjdGlvbiwgbm9ybWFsaXplZFBhdGggPz8gW10sIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZEFyZ3MpID8gbm9ybWFsaXplZEFyZ3MgOiBbbm9ybWFsaXplZEFyZ3NdKTtcblx0fVxuXHRyZXNvbHZlUmVzcG9uc2UocmVxSWQsIHJlc3VsdCkge1xuXHRcdHRoaXMuX2ZvclJlc29sdmVzLmdldChyZXFJZCk/LnJlc29sdmU/LihyZXN1bHQpO1xuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLl9mb3JSZXNvbHZlcy5nZXQocmVxSWQpPy5wcm9taXNlO1xuXHRcdHRoaXMuX2ZvclJlc29sdmVzLmRlbGV0ZShyZXFJZCk7XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblx0YXN5bmMgaGFuZGxlQW5kUmVzcG9uc2UocmVxdWVzdCwgcmVxSWQsIHJlc3BvbnNlRm4pIHt9XG5cdG5vdGlmeUNoYW5uZWwodGFyZ2V0Q2hhbm5lbCwgcGF5bG9hZCA9IHt9LCB0eXBlID0gXCJub3RpZnlcIikge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkLm5vdGlmeSh0YXJnZXRDaGFubmVsLCB7XG5cdFx0XHQuLi5wYXlsb2FkLFxuXHRcdFx0ZnJvbTogdGhpcy5fY2hhbm5lbCxcblx0XHRcdHRvOiB0YXJnZXRDaGFubmVsXG5cdFx0fSwgdHlwZSk7XG5cdH1cblx0Z2V0Q29ubmVjdGVkQ2hhbm5lbHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZpZWQuY29ubmVjdGVkQ2hhbm5lbHM7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX2ZvclJlc29sdmVzLmNsZWFyKCk7XG5cdFx0dGhpcy5fYnJvYWRjYXN0cz8udmFsdWVzPy4oKT8uZm9yRWFjaCgodHJhbnNwb3J0KSA9PiB0cmFuc3BvcnQuY2xvc2U/LigpKTtcblx0XHR0aGlzLl9icm9hZGNhc3RzPy5jbGVhcj8uKCk7XG5cdFx0dGhpcy5fdW5pZmllZC5jbG9zZSgpO1xuXHR9XG5cdGdldCB1bmlmaWVkKCkge1xuXHRcdHJldHVybiB0aGlzLl91bmlmaWVkO1xuXHR9XG59O1xudmFyIENoYW5uZWxDb250ZXh0ID0gY2xhc3Mge1xuXHRfb3B0aW9ucztcblx0X2lkID0gVVVJRHY0KCk7XG5cdF9ob3N0TmFtZTtcblx0X2hvc3QgPSBudWxsO1xuXHRfZW5kcG9pbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3VuaWZpZWRCeUNoYW5uZWwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfdW5pZmllZENvbm5lY3Rpb25TdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3JlbW90ZUNoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2RlZmVycmVkQ2hhbm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfY29ubmVjdGlvbkV2ZW50cyA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDIwMCB9KTtcblx0X2Nvbm5lY3Rpb25SZWdpc3RyeSA9IG5ldyBDb25uZWN0aW9uUmVnaXN0cnkoKCkgPT4gVVVJRHY0KCksIChldmVudCkgPT4gdGhpcy5fZW1pdENvbm5lY3Rpb25FdmVudChldmVudCkpO1xuXHRfY2xvc2VkID0gZmFsc2U7XG5cdF9nbG9iYWxTZWxmID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0XHR0aGlzLl9ob3N0TmFtZSA9IF9vcHRpb25zLm5hbWUgPz8gYGN0eC0ke3RoaXMuX2lkLnNsaWNlKDAsIDgpfWA7XG5cdFx0aWYgKF9vcHRpb25zLnVzZUdsb2JhbFNlbGYgIT09IGZhbHNlKSB0aGlzLl9nbG9iYWxTZWxmID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbDtcblx0fVxuXHRpbml0SG9zdChuYW1lKSB7XG5cdFx0aWYgKHRoaXMuX2hvc3QgJiYgIW5hbWUpIHJldHVybiB0aGlzLl9ob3N0O1xuXHRcdGNvbnN0IGhvc3ROYW1lID0gbmFtZSA/PyB0aGlzLl9ob3N0TmFtZTtcblx0XHR0aGlzLl9ob3N0TmFtZSA9IGhvc3ROYW1lO1xuXHRcdGlmICh0aGlzLl9lbmRwb2ludHMuaGFzKGhvc3ROYW1lKSkge1xuXHRcdFx0dGhpcy5faG9zdCA9IHRoaXMuX2VuZHBvaW50cy5nZXQoaG9zdE5hbWUpLmhhbmRsZXI7XG5cdFx0XHRyZXR1cm4gdGhpcy5faG9zdDtcblx0XHR9XG5cdFx0dGhpcy5faG9zdCA9IG5ldyBDaGFubmVsSGFuZGxlciQxKGhvc3ROYW1lLCB0aGlzLCB0aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zKTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWU6IGhvc3ROYW1lLFxuXHRcdFx0aGFuZGxlcjogdGhpcy5faG9zdCxcblx0XHRcdGNvbm5lY3Rpb246IHRoaXMuX2hvc3QuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShudWxsKSxcblx0XHRcdHVuaWZpZWQ6IHRoaXMuX2hvc3QudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChob3N0TmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwoaG9zdE5hbWUsIHRoaXMuX2hvc3QudW5pZmllZCk7XG5cdFx0cmV0dXJuIHRoaXMuX2hvc3Q7XG5cdH1cblx0Z2V0SG9zdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faG9zdCA/PyB0aGlzLmluaXRIb3N0KCk7XG5cdH1cblx0Z2V0IGhvc3ROYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9ob3N0TmFtZTtcblx0fVxuXHRnZXQgaWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lkO1xuXHR9XG5cdGdldCBvbkNvbm5lY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHM7XG5cdH1cblx0c3Vic2NyaWJlQ29ubmVjdGlvbnMoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLnN1YnNjcmliZShoYW5kbGVyKTtcblx0fVxuXHRub3RpZnlDb25uZWN0aW9ucyhwYXlsb2FkID0ge30sIHF1ZXJ5ID0ge30pIHtcblx0XHRsZXQgc2VudCA9IDA7XG5cdFx0Zm9yIChjb25zdCBlbmRwb2ludCBvZiB0aGlzLl9lbmRwb2ludHMudmFsdWVzKCkpIHtcblx0XHRcdGNvbnN0IGNvbm5lY3RlZFRhcmdldHMgPSBlbmRwb2ludC5oYW5kbGVyLmdldENvbm5lY3RlZENoYW5uZWxzKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHJlbW90ZUNoYW5uZWwgb2YgY29ubmVjdGVkVGFyZ2V0cykge1xuXHRcdFx0XHRpZiAocXVlcnkubG9jYWxDaGFubmVsICYmIHF1ZXJ5LmxvY2FsQ2hhbm5lbCAhPT0gZW5kcG9pbnQubmFtZSkgY29udGludWU7XG5cdFx0XHRcdGlmIChxdWVyeS5yZW1vdGVDaGFubmVsICYmIHF1ZXJ5LnJlbW90ZUNoYW5uZWwgIT09IHJlbW90ZUNoYW5uZWwpIGNvbnRpbnVlO1xuXHRcdFx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMucXVlcnlDb25uZWN0aW9ucyh7XG5cdFx0XHRcdFx0bG9jYWxDaGFubmVsOiBlbmRwb2ludC5uYW1lLFxuXHRcdFx0XHRcdHJlbW90ZUNoYW5uZWwsXG5cdFx0XHRcdFx0c3RhdHVzOiBcImFjdGl2ZVwiXG5cdFx0XHRcdH0pWzBdO1xuXHRcdFx0XHRpZiAocXVlcnkuc2VuZGVyICYmIGV4aXN0aW5nPy5zZW5kZXIgIT09IHF1ZXJ5LnNlbmRlcikgY29udGludWU7XG5cdFx0XHRcdGlmIChxdWVyeS50cmFuc3BvcnRUeXBlICYmIGV4aXN0aW5nPy50cmFuc3BvcnRUeXBlICE9PSBxdWVyeS50cmFuc3BvcnRUeXBlKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKHF1ZXJ5LmNoYW5uZWwgJiYgcXVlcnkuY2hhbm5lbCAhPT0gZW5kcG9pbnQubmFtZSAmJiBxdWVyeS5jaGFubmVsICE9PSByZW1vdGVDaGFubmVsKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKGVuZHBvaW50LmhhbmRsZXIubm90aWZ5Q2hhbm5lbChyZW1vdGVDaGFubmVsLCBwYXlsb2FkLCBcIm5vdGlmeVwiKSkgc2VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VudDtcblx0fVxuXHRxdWVyeUNvbm5lY3Rpb25zKHF1ZXJ5ID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnF1ZXJ5KHF1ZXJ5KS5tYXAoKGNvbm5lY3Rpb24pID0+ICh7XG5cdFx0XHQuLi5jb25uZWN0aW9uLFxuXHRcdFx0Y29udGV4dElkOiB0aGlzLl9pZFxuXHRcdH0pKTtcblx0fVxuXHRjcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdGlmICh0aGlzLl9lbmRwb2ludHMuaGFzKG5hbWUpKSByZXR1cm4gdGhpcy5fZW5kcG9pbnRzLmdldChuYW1lKTtcblx0XHRjb25zdCBoYW5kbGVyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRoYW5kbGVyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlci5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKG51bGwpLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlci51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIGhhbmRsZXIudW5pZmllZCk7XG5cdFx0cmV0dXJuIGVuZHBvaW50O1xuXHR9XG5cdGNyZWF0ZUNoYW5uZWxzKG5hbWVzLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCByZXN1bHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykgcmVzdWx0LnNldChuYW1lLCB0aGlzLmNyZWF0ZUNoYW5uZWwobmFtZSwgb3B0aW9ucykpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0Z2V0Q2hhbm5lbChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdH1cblx0Z2V0T3JDcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRcdHJldHVybiB0aGlzLl9lbmRwb2ludHMuZ2V0KG5hbWUpID8/IHRoaXMuY3JlYXRlQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcblx0fVxuXHRoYXNDaGFubmVsKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fZW5kcG9pbnRzLmhhcyhuYW1lKTtcblx0fVxuXHRnZXRDaGFubmVsTmFtZXMoKSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9lbmRwb2ludHMua2V5cygpXTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZW5kcG9pbnRzLnNpemU7XG5cdH1cblx0ZGVmZXIobmFtZSwgaW5pdEZuKSB7XG5cdFx0dGhpcy5fZGVmZXJyZWRDaGFubmVscy5zZXQobmFtZSwgaW5pdEZuKTtcblx0fVxuXHRhc3luYyBpbml0RGVmZXJyZWQobmFtZSkge1xuXHRcdGNvbnN0IGluaXRGbiA9IHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuZ2V0KG5hbWUpO1xuXHRcdGlmICghaW5pdEZuKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBlbmRwb2ludCA9IGF3YWl0IGluaXRGbigpO1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuZGVsZXRlKG5hbWUpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRpc0RlZmVycmVkKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGVmZXJyZWRDaGFubmVscy5oYXMobmFtZSk7XG5cdH1cblx0YXN5bmMgZ2V0Q2hhbm5lbEFzeW5jKG5hbWUpIHtcblx0XHRpZiAodGhpcy5fZW5kcG9pbnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdFx0aWYgKHRoaXMuX2RlZmVycmVkQ2hhbm5lbHMuaGFzKG5hbWUpKSByZXR1cm4gdGhpcy5pbml0RGVmZXJyZWQobmFtZSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0YXN5bmMgYWRkV29ya2VyKG5hbWUsIHdvcmtlciwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3Qgd29ya2VySW5zdGFuY2UgPSBsb2FkV29ya2VyJDEod29ya2VyKTtcblx0XHRpZiAoIXdvcmtlckluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgd29ya2VyIGZvciBjaGFubmVsOiAke25hbWV9YCk7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVhZHkgPSBoYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwobmFtZSwgb3B0aW9ucywgd29ya2VySW5zdGFuY2UpO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0ge1xuXHRcdFx0bmFtZSxcblx0XHRcdGhhbmRsZXIsXG5cdFx0XHRjb25uZWN0aW9uOiBoYW5kbGVyLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwid29ya2VyXCIsXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHRoaXMuX3JlbW90ZUNoYW5uZWxzLnNldChuYW1lLCB7XG5cdFx0XHRjaGFubmVsOiBuYW1lLFxuXHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdHJlbW90ZTogUHJvbWlzZS5yZXNvbHZlKHJlYWR5KSxcblx0XHRcdHRyYW5zcG9ydDogd29ya2VySW5zdGFuY2UsXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcIndvcmtlclwiXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGVuZHBvaW50O1xuXHR9XG5cdGFzeW5jIGFkZFBvcnQobmFtZSwgcG9ydCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0cG9ydC5zdGFydD8uKCk7XG5cdFx0Y29uc3QgcmVhZHkgPSBoYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwobmFtZSwgb3B0aW9ucywgcG9ydCk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJtZXNzYWdlLXBvcnRcIixcblx0XHRcdHJlYWR5OiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlci51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUsIGVuZHBvaW50KTtcblx0XHR0aGlzLl9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIGhhbmRsZXIudW5pZmllZCk7XG5cdFx0dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KG5hbWUsIHtcblx0XHRcdGNoYW5uZWw6IG5hbWUsXG5cdFx0XHRjb250ZXh0OiB0aGlzLFxuXHRcdFx0cmVtb3RlOiBQcm9taXNlLnJlc29sdmUocmVhZHkpLFxuXHRcdFx0dHJhbnNwb3J0OiBwb3J0LFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJtZXNzYWdlLXBvcnRcIlxuXHRcdH0pO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhc3luYyBhZGRCcm9hZGNhc3QobmFtZSwgYnJvYWRjYXN0TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChicm9hZGNhc3ROYW1lID8/IG5hbWUpO1xuXHRcdGNvbnN0IGhhbmRsZXIgPSBuZXcgQ2hhbm5lbEhhbmRsZXIkMShuYW1lLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdGNvbnN0IHJlYWR5ID0gaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMsIGJjKTtcblx0XHRjb25zdCBlbmRwb2ludCA9IHtcblx0XHRcdG5hbWUsXG5cdFx0XHRoYW5kbGVyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlci5jb25uZWN0aW9uLFxuXHRcdFx0c3Vic2NyaXB0aW9uczogW10sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBcImJyb2FkY2FzdFwiLFxuXHRcdFx0cmVhZHk6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyLnVuaWZpZWRcblx0XHR9O1xuXHRcdHRoaXMuX2VuZHBvaW50cy5zZXQobmFtZSwgZW5kcG9pbnQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZSwgaGFuZGxlci51bmlmaWVkKTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5zZXQobmFtZSwge1xuXHRcdFx0Y2hhbm5lbDogbmFtZSxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRyZW1vdGU6IFByb21pc2UucmVzb2x2ZShyZWFkeSksXG5cdFx0XHR0cmFuc3BvcnQ6IGJjLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJicm9hZGNhc3RcIlxuXHRcdH0pO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhZGRTZWxmQ2hhbm5lbChuYW1lLCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZSwgdGhpcywge1xuXHRcdFx0Li4udGhpcy5fb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcblx0XHRcdC4uLm9wdGlvbnNcblx0XHR9KTtcblx0XHRjb25zdCBzZWxmVGFyZ2V0ID0gdGhpcy5fZ2xvYmFsU2VsZiA/PyAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCk7XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSB7XG5cdFx0XHRuYW1lLFxuXHRcdFx0aGFuZGxlcixcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJzZWxmXCIsXG5cdFx0XHRyZWFkeTogUHJvbWlzZS5yZXNvbHZlKHNlbGZUYXJnZXQgPyBoYW5kbGVyLmNyZWF0ZVJlbW90ZUNoYW5uZWwobmFtZSwgb3B0aW9ucywgc2VsZlRhcmdldCkgOiBudWxsKSxcblx0XHRcdHVuaWZpZWQ6IGhhbmRsZXIudW5pZmllZFxuXHRcdH07XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lLCBlbmRwb2ludCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJVbmlmaWVkQ2hhbm5lbChuYW1lLCBoYW5kbGVyLnVuaWZpZWQpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRhc3luYyBhZGRUcmFuc3BvcnQobmFtZSwgY29uZmlnKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zID8/IHt9O1xuXHRcdHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3b3JrZXJcIjpcblx0XHRcdFx0aWYgKCFjb25maWcud29ya2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgcmVxdWlyZWQgZm9yIHdvcmtlciB0cmFuc3BvcnRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFdvcmtlcihuYW1lLCBjb25maWcud29ya2VyLCBvcHRpb25zKTtcblx0XHRcdGNhc2UgXCJtZXNzYWdlLXBvcnRcIjpcblx0XHRcdFx0aWYgKCFjb25maWcucG9ydCkgdGhyb3cgbmV3IEVycm9yKFwiUG9ydCByZXF1aXJlZCBmb3IgbWVzc2FnZS1wb3J0IHRyYW5zcG9ydFwiKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkUG9ydChuYW1lLCBjb25maWcucG9ydCwgb3B0aW9ucyk7XG5cdFx0XHRjYXNlIFwiYnJvYWRjYXN0XCI6XG5cdFx0XHRcdGNvbnN0IGJjTmFtZSA9IHR5cGVvZiBjb25maWcuYnJvYWRjYXN0ID09PSBcInN0cmluZ1wiID8gY29uZmlnLmJyb2FkY2FzdCA6IHZvaWQgMDtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQnJvYWRjYXN0KG5hbWUsIGJjTmFtZSwgb3B0aW9ucyk7XG5cdFx0XHRjYXNlIFwic2VsZlwiOiByZXR1cm4gdGhpcy5hZGRTZWxmQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcblx0XHRcdGRlZmF1bHQ6IHJldHVybiB0aGlzLmNyZWF0ZUNoYW5uZWwobmFtZSwgb3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cdGNyZWF0ZUNoYW5uZWxQYWlyKG5hbWUxLCBuYW1lMiwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgbWMgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0XHRjb25zdCBoYW5kbGVyMSA9IG5ldyBDaGFubmVsSGFuZGxlciQxKG5hbWUxLCB0aGlzLCB7XG5cdFx0XHQuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHRcdGNvbnN0IGhhbmRsZXIyID0gbmV3IENoYW5uZWxIYW5kbGVyJDEobmFtZTIsIHRoaXMsIHtcblx0XHRcdC4uLnRoaXMuX29wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdFx0bWMucG9ydDEuc3RhcnQoKTtcblx0XHRtYy5wb3J0Mi5zdGFydCgpO1xuXHRcdGNvbnN0IHJlYWR5MSA9IFByb21pc2UucmVzb2x2ZShoYW5kbGVyMS5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUyLCBvcHRpb25zLCBtYy5wb3J0MSkpO1xuXHRcdGNvbnN0IHJlYWR5MiA9IFByb21pc2UucmVzb2x2ZShoYW5kbGVyMi5jcmVhdGVSZW1vdGVDaGFubmVsKG5hbWUxLCBvcHRpb25zLCBtYy5wb3J0MikpO1xuXHRcdGNvbnN0IGNoYW5uZWwxID0ge1xuXHRcdFx0bmFtZTogbmFtZTEsXG5cdFx0XHRoYW5kbGVyOiBoYW5kbGVyMSxcblx0XHRcdGNvbm5lY3Rpb246IGhhbmRsZXIxLmNvbm5lY3Rpb24sXG5cdFx0XHRzdWJzY3JpcHRpb25zOiBbXSxcblx0XHRcdHRyYW5zcG9ydFR5cGU6IFwibWVzc2FnZS1wb3J0XCIsXG5cdFx0XHRyZWFkeTogcmVhZHkxLFxuXHRcdFx0dW5pZmllZDogaGFuZGxlcjEudW5pZmllZFxuXHRcdH07XG5cdFx0Y29uc3QgY2hhbm5lbDIgPSB7XG5cdFx0XHRuYW1lOiBuYW1lMixcblx0XHRcdGhhbmRsZXI6IGhhbmRsZXIyLFxuXHRcdFx0Y29ubmVjdGlvbjogaGFuZGxlcjIuY29ubmVjdGlvbixcblx0XHRcdHN1YnNjcmlwdGlvbnM6IFtdLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogXCJtZXNzYWdlLXBvcnRcIixcblx0XHRcdHJlYWR5OiByZWFkeTIsXG5cdFx0XHR1bmlmaWVkOiBoYW5kbGVyMi51bmlmaWVkXG5cdFx0fTtcblx0XHR0aGlzLl9lbmRwb2ludHMuc2V0KG5hbWUxLCBjaGFubmVsMSk7XG5cdFx0dGhpcy5fZW5kcG9pbnRzLnNldChuYW1lMiwgY2hhbm5lbDIpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZTEsIGhhbmRsZXIxLnVuaWZpZWQpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyVW5pZmllZENoYW5uZWwobmFtZTIsIGhhbmRsZXIyLnVuaWZpZWQpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjaGFubmVsMSxcblx0XHRcdGNoYW5uZWwyLFxuXHRcdFx0bWVzc2FnZUNoYW5uZWw6IG1jXG5cdFx0fTtcblx0fVxuXHRnZXQgZ2xvYmFsU2VsZigpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2xvYmFsU2VsZjtcblx0fVxuXHRhc3luYyBjb25uZWN0UmVtb3RlKGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdHRoaXMuaW5pdEhvc3QoKTtcblx0XHRyZXR1cm4gdGhpcy5faG9zdC5jcmVhdGVSZW1vdGVDaGFubmVsKGNoYW5uZWxOYW1lLCBvcHRpb25zLCBicm9hZGNhc3QpO1xuXHR9XG5cdGFzeW5jIGltcG9ydE1vZHVsZUluQ2hhbm5lbChjaGFubmVsTmFtZSwgdXJsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCkge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5jb25uZWN0UmVtb3RlKGNoYW5uZWxOYW1lLCBvcHRpb25zLmNoYW5uZWxPcHRpb25zLCBicm9hZGNhc3QpKT8uZG9JbXBvcnRNb2R1bGU/Lih1cmwsIG9wdGlvbnMuaW1wb3J0T3B0aW9ucyk7XG5cdH1cblx0JGNyZWF0ZU9yVXNlRXhpc3RpbmdSZW1vdGUoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QpIHtcblx0XHRpZiAoY2hhbm5lbCA9PSBudWxsIHx8IGJyb2FkY2FzdCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKHRoaXMuX3JlbW90ZUNoYW5uZWxzLmhhcyhjaGFubmVsKSkgcmV0dXJuIHRoaXMuX3JlbW90ZUNoYW5uZWxzLmdldChjaGFubmVsKTtcblx0XHRjb25zdCBtc2dDaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IFByb21pc2VkKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCB3b3JrZXIgPSBsb2FkV29ya2VyJDEod29ya2VyQ29kZSk7XG5cdFx0XHR3b3JrZXI/LmFkZEV2ZW50TGlzdGVuZXI/LihcIm1lc3NhZ2VcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5kYXRhLnR5cGUgPT09IFwiY2hhbm5lbENyZWF0ZWRcIikge1xuXHRcdFx0XHRcdG1zZ0NoYW5uZWwucG9ydDE/LnN0YXJ0Py4oKTtcblx0XHRcdFx0XHRyZXNvbHZlKG5ldyBSZW1vdGVDaGFubmVsSGVscGVyJDEoZXZlbnQuZGF0YS5jaGFubmVsLCB0aGlzLCBvcHRpb25zKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0d29ya2VyPy5wb3N0TWVzc2FnZT8uKHtcblx0XHRcdFx0dHlwZTogXCJjcmVhdGVDaGFubmVsXCIsXG5cdFx0XHRcdGNoYW5uZWwsXG5cdFx0XHRcdHNlbmRlcjogdGhpcy5faG9zdE5hbWUsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdG1lc3NhZ2VQb3J0OiBtc2dDaGFubmVsLnBvcnQyXG5cdFx0XHR9LCB7IHRyYW5zZmVyOiBbbXNnQ2hhbm5lbC5wb3J0Ml0gfSk7XG5cdFx0fSkpO1xuXHRcdGNvbnN0IGluZm8gPSB7XG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0Y29udGV4dDogdGhpcyxcblx0XHRcdG1lc3NhZ2VDaGFubmVsOiBtc2dDaGFubmVsLFxuXHRcdFx0cmVtb3RlOiBwcm9taXNlXG5cdFx0fTtcblx0XHR0aGlzLl9yZW1vdGVDaGFubmVscy5zZXQoY2hhbm5lbCwgaW5mbyk7XG5cdFx0cmV0dXJuIGluZm87XG5cdH1cblx0JHJlZ2lzdGVyQ29ubmVjdGlvbihwYXJhbXMpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4udGhpcy5fY29ubmVjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKHBhcmFtcyksXG5cdFx0XHRjb250ZXh0SWQ6IHRoaXMuX2lkXG5cdFx0fTtcblx0fVxuXHQkbWFya05vdGlmaWVkKHBhcmFtcykge1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkucmVnaXN0ZXIoe1xuXHRcdFx0bG9jYWxDaGFubmVsOiBwYXJhbXMubG9jYWxDaGFubmVsLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogcGFyYW1zLnJlbW90ZUNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IHBhcmFtcy5zZW5kZXIsXG5cdFx0XHRkaXJlY3Rpb246IHBhcmFtcy5kaXJlY3Rpb24sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBwYXJhbXMudHJhbnNwb3J0VHlwZVxuXHRcdH0pO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5tYXJrTm90aWZpZWQoY29ubmVjdGlvbiwgcGFyYW1zLnBheWxvYWQpO1xuXHR9XG5cdCRvYnNlcnZlU2lnbmFsKHBhcmFtcykge1xuXHRcdGNvbnN0IGRpcmVjdGlvbiA9IChwYXJhbXMucGF5bG9hZD8udHlwZSA/PyBcIm5vdGlmeVwiKSA9PT0gXCJjb25uZWN0XCIgPyBcImluY29taW5nXCIgOiBcImluY29taW5nXCI7XG5cdFx0dGhpcy4kbWFya05vdGlmaWVkKHtcblx0XHRcdGxvY2FsQ2hhbm5lbDogcGFyYW1zLmxvY2FsQ2hhbm5lbCxcblx0XHRcdHJlbW90ZUNoYW5uZWw6IHBhcmFtcy5yZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBwYXJhbXMuc2VuZGVyLFxuXHRcdFx0ZGlyZWN0aW9uLFxuXHRcdFx0dHJhbnNwb3J0VHlwZTogcGFyYW1zLnRyYW5zcG9ydFR5cGUsXG5cdFx0XHRwYXlsb2FkOiBwYXJhbXMucGF5bG9hZFxuXHRcdH0pO1xuXHR9XG5cdCRmb3J3YXJkVW5pZmllZENvbm5lY3Rpb25FdmVudChjaGFubmVsLCBldmVudCkge1xuXHRcdGNvbnN0IG1hcHBlZFRyYW5zcG9ydFR5cGUgPSBldmVudC5jb25uZWN0aW9uLnRyYW5zcG9ydFR5cGUgPz8gXCJpbnRlcm5hbFwiO1xuXHRcdGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkucmVnaXN0ZXIoe1xuXHRcdFx0bG9jYWxDaGFubmVsOiBldmVudC5jb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCB8fCBjaGFubmVsLFxuXHRcdFx0cmVtb3RlQ2hhbm5lbDogZXZlbnQuY29ubmVjdGlvbi5yZW1vdGVDaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBldmVudC5jb25uZWN0aW9uLnNlbmRlcixcblx0XHRcdGRpcmVjdGlvbjogZXZlbnQuY29ubmVjdGlvbi5kaXJlY3Rpb24sXG5cdFx0XHR0cmFuc3BvcnRUeXBlOiBtYXBwZWRUcmFuc3BvcnRUeXBlLFxuXHRcdFx0bWV0YWRhdGE6IGV2ZW50LmNvbm5lY3Rpb24ubWV0YWRhdGFcblx0XHR9KTtcblx0XHRpZiAoZXZlbnQudHlwZSA9PT0gXCJub3RpZmllZFwiKSB0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkubWFya05vdGlmaWVkKGNvbm5lY3Rpb24sIGV2ZW50LnBheWxvYWQpO1xuXHRcdGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IFwiZGlzY29ubmVjdGVkXCIpIHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5jbG9zZUJ5Q2hhbm5lbChldmVudC5jb25uZWN0aW9uLmxvY2FsQ2hhbm5lbCk7XG5cdH1cblx0Y2xvc2VDaGFubmVsKG5hbWUpIHtcblx0XHRjb25zdCBlbmRwb2ludCA9IHRoaXMuX2VuZHBvaW50cy5nZXQobmFtZSk7XG5cdFx0aWYgKCFlbmRwb2ludCkgcmV0dXJuIGZhbHNlO1xuXHRcdGVuZHBvaW50LnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcblx0XHRlbmRwb2ludC5oYW5kbGVyLmNsb3NlKCk7XG5cdFx0ZW5kcG9pbnQudHJhbnNwb3J0Py5kZXRhY2goKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuZ2V0KG5hbWUpPy51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5kZWxldGUobmFtZSk7XG5cdFx0dGhpcy5fdW5pZmllZEJ5Q2hhbm5lbC5kZWxldGUobmFtZSk7XG5cdFx0dGhpcy5fZW5kcG9pbnRzLmRlbGV0ZShuYW1lKTtcblx0XHRpZiAobmFtZSA9PT0gdGhpcy5faG9zdE5hbWUpIHRoaXMuX2hvc3QgPSBudWxsO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb25SZWdpc3RyeS5jbG9zZUJ5Q2hhbm5lbChuYW1lKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fY2xvc2VkKSByZXR1cm47XG5cdFx0dGhpcy5fY2xvc2VkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IFtuYW1lXSBvZiB0aGlzLl9lbmRwb2ludHMpIHRoaXMuY2xvc2VDaGFubmVsKG5hbWUpO1xuXHRcdHRoaXMuX3JlbW90ZUNoYW5uZWxzLmNsZWFyKCk7XG5cdFx0dGhpcy5faG9zdCA9IG51bGw7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuXHRcdHRoaXMuX3VuaWZpZWRDb25uZWN0aW9uU3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3VuaWZpZWRCeUNoYW5uZWwuY2xlYXIoKTtcblx0XHR0aGlzLl9jb25uZWN0aW9uUmVnaXN0cnkuY2xlYXIoKTtcblx0XHR0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmNvbXBsZXRlKCk7XG5cdH1cblx0Z2V0IGNsb3NlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xvc2VkO1xuXHR9XG5cdF9yZWdpc3RlclVuaWZpZWRDaGFubmVsKG5hbWUsIHVuaWZpZWQpIHtcblx0XHR0aGlzLl91bmlmaWVkQnlDaGFubmVsLnNldChuYW1lLCB1bmlmaWVkKTtcblx0XHR0aGlzLl91bmlmaWVkQ29ubmVjdGlvblN1YnMuZ2V0KG5hbWUpPy51bnN1YnNjcmliZSgpO1xuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHVuaWZpZWQuc3Vic2NyaWJlQ29ubmVjdGlvbnMoKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzLiRmb3J3YXJkVW5pZmllZENvbm5lY3Rpb25FdmVudChuYW1lLCBldmVudCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5fdW5pZmllZENvbm5lY3Rpb25TdWJzLnNldChuYW1lLCBzdWJzY3JpcHRpb24pO1xuXHR9XG5cdF9lbWl0Q29ubmVjdGlvbkV2ZW50KGV2ZW50KSB7XG5cdFx0dGhpcy5fY29ubmVjdGlvbkV2ZW50cy5uZXh0KHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHQuLi5ldmVudC5jb25uZWN0aW9uLFxuXHRcdFx0XHRjb250ZXh0SWQ6IHRoaXMuX2lkXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn07XG5mdW5jdGlvbiBpc1JlZmxlY3RBY3Rpb24oYWN0aW9uKSB7XG5cdHJldHVybiBbLi4uT2JqZWN0LnZhbHVlcyhXUmVmbGVjdEFjdGlvbildLmluY2x1ZGVzKGFjdGlvbik7XG59XG5mdW5jdGlvbiBub3JtYWxpemVUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCkge1xuXHRpZiAoIXRhcmdldCkgcmV0dXJuIG51bGw7XG5cdGlmIChpc1RyYW5zcG9ydEJpbmRpbmcodGFyZ2V0KSkgcmV0dXJuIHRhcmdldDtcblx0Y29uc3QgbmF0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuXHRjb25zdCB0cmFuc3BvcnRUeXBlID0gZ2V0RHluYW1pY1RyYW5zcG9ydFR5cGUobmF0aXZlVGFyZ2V0KTtcblx0cmV0dXJuIHtcblx0XHR0YXJnZXQ6IG5hdGl2ZVRhcmdldCxcblx0XHR0YXJnZXRDaGFubmVsOiBcInVua25vd25cIixcblx0XHR0cmFuc3BvcnRUeXBlOiB0cmFuc3BvcnRUeXBlID09PSBcImludGVybmFsXCIgPyBcInNlbGZcIiA6IHRyYW5zcG9ydFR5cGUsXG5cdFx0c2VuZGVyOiAobWVzc2FnZSwgdHJhbnNmZXIpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdGl2ZVRhcmdldCBpbnN0YW5jZW9mIFdlYlNvY2tldCkge1xuXHRcdFx0XHRuYXRpdmVUYXJnZXQuc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG5hdGl2ZVRhcmdldC5wb3N0TWVzc2FnZT8uKG1lc3NhZ2UsIHRyYW5zZmVyPy5sZW5ndGggPyB7IHRyYW5zZmVyIH0gOiB2b2lkIDApO1xuXHRcdH0sXG5cdFx0cG9zdE1lc3NhZ2U6IChtZXNzYWdlLCBvcHRpb25zKSA9PiB7XG5cdFx0XHRuYXRpdmVUYXJnZXQucG9zdE1lc3NhZ2U/LihtZXNzYWdlLCBvcHRpb25zKTtcblx0XHR9LFxuXHRcdGFkZEV2ZW50TGlzdGVuZXI6IG5hdGl2ZVRhcmdldC5hZGRFdmVudExpc3RlbmVyPy5iaW5kKG5hdGl2ZVRhcmdldCksXG5cdFx0cmVtb3ZlRXZlbnRMaXN0ZW5lcjogbmF0aXZlVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/LmJpbmQobmF0aXZlVGFyZ2V0KSxcblx0XHRzdGFydDogbmF0aXZlVGFyZ2V0LnN0YXJ0Py5iaW5kKG5hdGl2ZVRhcmdldCksXG5cdFx0Y2xvc2U6IG5hdGl2ZVRhcmdldC5jbG9zZT8uYmluZChuYXRpdmVUYXJnZXQpXG5cdH07XG59XG5mdW5jdGlvbiBpc1RyYW5zcG9ydEJpbmRpbmcodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwidGFyZ2V0XCIgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBnZXREeW5hbWljVHJhbnNwb3J0VHlwZSh0YXJnZXQpIHtcblx0Y29uc3QgZWZmZWN0aXZlVGFyZ2V0ID0gaXNUcmFuc3BvcnRCaW5kaW5nKHRhcmdldCkgPyB0YXJnZXQudGFyZ2V0IDogdGFyZ2V0O1xuXHRpZiAoIWVmZmVjdGl2ZVRhcmdldCkgcmV0dXJuIFwiaW50ZXJuYWxcIjtcblx0aWYgKGVmZmVjdGl2ZVRhcmdldCA9PT0gXCJjaHJvbWUtcnVudGltZVwiKSByZXR1cm4gXCJjaHJvbWUtcnVudGltZVwiO1xuXHRpZiAoZWZmZWN0aXZlVGFyZ2V0ID09PSBcImNocm9tZS10YWJzXCIpIHJldHVybiBcImNocm9tZS10YWJzXCI7XG5cdGlmIChlZmZlY3RpdmVUYXJnZXQgPT09IFwiY2hyb21lLXBvcnRcIikgcmV0dXJuIFwiY2hyb21lLXBvcnRcIjtcblx0aWYgKGVmZmVjdGl2ZVRhcmdldCA9PT0gXCJjaHJvbWUtZXh0ZXJuYWxcIikgcmV0dXJuIFwiY2hyb21lLWV4dGVybmFsXCI7XG5cdGlmICh0eXBlb2YgTWVzc2FnZVBvcnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZWZmZWN0aXZlVGFyZ2V0IGluc3RhbmNlb2YgTWVzc2FnZVBvcnQpIHJldHVybiBcIm1lc3NhZ2UtcG9ydFwiO1xuXHRpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZWZmZWN0aXZlVGFyZ2V0IGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgcmV0dXJuIFwiYnJvYWRjYXN0XCI7XG5cdGlmICh0eXBlb2YgV29ya2VyICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIFwid29ya2VyXCI7XG5cdGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCBpbnN0YW5jZW9mIFdlYlNvY2tldCkgcmV0dXJuIFwid2Vic29ja2V0XCI7XG5cdGlmICh0eXBlb2YgY2hyb21lICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBlZmZlY3RpdmVUYXJnZXQgPT09IFwib2JqZWN0XCIgJiYgZWZmZWN0aXZlVGFyZ2V0ICYmIHR5cGVvZiBlZmZlY3RpdmVUYXJnZXQucG9zdE1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIiAmJiBlZmZlY3RpdmVUYXJnZXQub25NZXNzYWdlPy5hZGRMaXN0ZW5lcikgcmV0dXJuIFwiY2hyb21lLXBvcnRcIjtcblx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIGVmZmVjdGl2ZVRhcmdldCA9PT0gc2VsZikgcmV0dXJuIFwic2VsZlwiO1xuXHRyZXR1cm4gXCJpbnRlcm5hbFwiO1xufVxuZnVuY3Rpb24gbG9hZFdvcmtlciQxKFdYKSB7XG5cdGlmIChXWCBpbnN0YW5jZW9mIFdvcmtlcikgcmV0dXJuIFdYO1xuXHRpZiAoV1ggaW5zdGFuY2VvZiBVUkwpIHJldHVybiBuZXcgV29ya2VyKFdYLmhyZWYsIHsgdHlwZTogXCJtb2R1bGVcIiB9KTtcblx0aWYgKHR5cGVvZiBXWCA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdHJldHVybiBuZXcgV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gV1goeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmICh0eXBlb2YgV1ggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoV1guc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiBuZXcgV29ya2VyKHJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmKFdYLnJlcGxhY2UoL15cXC8vLCBcIi4vXCIpKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRcdGlmIChVUkwuY2FuUGFyc2UoV1gpIHx8IFdYLnN0YXJ0c1dpdGgoXCIuL1wiKSkgcmV0dXJuIG5ldyBXb3JrZXIocmVzb2x2ZVdvcmtlclNwZWNpZmllckhyZWYoV1gpLCB7IHR5cGU6IFwibW9kdWxlXCIgfSk7XG5cdFx0cmV0dXJuIG5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbV1hdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHR9XG5cdGlmIChXWCBpbnN0YW5jZW9mIEJsb2IgfHwgV1ggaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKFdYKSwgeyB0eXBlOiBcIm1vZHVsZVwiIH0pO1xuXHRyZXR1cm4gV1ggPz8gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGwpO1xufVxudmFyIENPTlRFWFRfUkVHSVNUUlkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIERFRkFVTFRfQ09OVEVYVCA9IG51bGw7XG5mdW5jdGlvbiBnZXREZWZhdWx0Q29udGV4dCgpIHtcblx0aWYgKCFERUZBVUxUX0NPTlRFWFQpIHtcblx0XHRERUZBVUxUX0NPTlRFWFQgPSBuZXcgQ2hhbm5lbENvbnRleHQoe1xuXHRcdFx0bmFtZTogXCIkZGVmYXVsdCRcIixcblx0XHRcdHVzZUdsb2JhbFNlbGY6IHRydWVcblx0XHR9KTtcblx0XHRDT05URVhUX1JFR0lTVFJZLnNldChcIiRkZWZhdWx0JFwiLCBERUZBVUxUX0NPTlRFWFQpO1xuXHR9XG5cdHJldHVybiBERUZBVUxUX0NPTlRFWFQ7XG59XG5mdW5jdGlvbiBjcmVhdGVDaGFubmVsQ29udGV4dChvcHRpb25zID0ge30pIHtcblx0Y29uc3QgY3R4ID0gbmV3IENoYW5uZWxDb250ZXh0KG9wdGlvbnMpO1xuXHRpZiAob3B0aW9ucy5uYW1lKSBDT05URVhUX1JFR0lTVFJZLnNldChvcHRpb25zLm5hbWUsIGN0eCk7XG5cdHJldHVybiBjdHg7XG59XG5mdW5jdGlvbiBnZXRPckNyZWF0ZUNvbnRleHQobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdGlmIChDT05URVhUX1JFR0lTVFJZLmhhcyhuYW1lKSkgcmV0dXJuIENPTlRFWFRfUkVHSVNUUlkuZ2V0KG5hbWUpO1xuXHRyZXR1cm4gY3JlYXRlQ2hhbm5lbENvbnRleHQoe1xuXHRcdC4uLm9wdGlvbnMsXG5cdFx0bmFtZVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldENvbnRleHQobmFtZSkge1xuXHRyZXR1cm4gQ09OVEVYVF9SRUdJU1RSWS5nZXQobmFtZSk7XG59XG5mdW5jdGlvbiBkZWxldGVDb250ZXh0KG5hbWUpIHtcblx0Y29uc3QgY3R4ID0gQ09OVEVYVF9SRUdJU1RSWS5nZXQobmFtZSk7XG5cdGlmIChjdHgpIHtcblx0XHRjdHguY2xvc2UoKTtcblx0XHRyZXR1cm4gQ09OVEVYVF9SRUdJU1RSWS5kZWxldGUobmFtZSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWVzKCkge1xuXHRyZXR1cm4gWy4uLkNPTlRFWFRfUkVHSVNUUlkua2V5cygpXTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNoYW5uZWxzSW5Db250ZXh0KGNoYW5uZWxOYW1lcywgY29udGV4dE9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuXHRyZXR1cm4ge1xuXHRcdGNvbnRleHQsXG5cdFx0Y2hhbm5lbHM6IGNvbnRleHQuY3JlYXRlQ2hhbm5lbHMoY2hhbm5lbE5hbWVzKVxuXHR9O1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TW9kdWxlSW5Db250ZXh0KGNoYW5uZWxOYW1lLCB1cmwsIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7XG5cdHJldHVybiB7XG5cdFx0Y29udGV4dCxcblx0XHRtb2R1bGU6IGF3YWl0IGNvbnRleHQuaW1wb3J0TW9kdWxlSW5DaGFubmVsKGNoYW5uZWxOYW1lLCB1cmwsIHtcblx0XHRcdGNoYW5uZWxPcHRpb25zOiBvcHRpb25zLmNoYW5uZWxPcHRpb25zLFxuXHRcdFx0aW1wb3J0T3B0aW9uczogb3B0aW9ucy5pbXBvcnRPcHRpb25zXG5cdFx0fSlcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGFkZFdvcmtlckNoYW5uZWwobmFtZSwgd29ya2VyLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuYWRkV29ya2VyKG5hbWUsIHdvcmtlciwgb3B0aW9ucyk7XG59XG5hc3luYyBmdW5jdGlvbiBhZGRQb3J0Q2hhbm5lbChuYW1lLCBwb3J0LCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIGdldERlZmF1bHRDb250ZXh0KCkuYWRkUG9ydChuYW1lLCBwb3J0LCBvcHRpb25zKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGFkZEJyb2FkY2FzdENoYW5uZWwobmFtZSwgYnJvYWRjYXN0TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmFkZEJyb2FkY2FzdChuYW1lLCBicm9hZGNhc3ROYW1lLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGFkZFNlbGZDaGFubmVsVG9EZWZhdWx0KG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5hZGRTZWxmQ2hhbm5lbChuYW1lLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGRlZmVyQ2hhbm5lbChuYW1lLCBpbml0Rm4pIHtcblx0Z2V0RGVmYXVsdENvbnRleHQoKS5kZWZlcihuYW1lLCBpbml0Rm4pO1xufVxuYXN5bmMgZnVuY3Rpb24gaW5pdERlZmVycmVkQ2hhbm5lbChuYW1lKSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmluaXREZWZlcnJlZChuYW1lKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldENoYW5uZWxGcm9tRGVmYXVsdChuYW1lKSB7XG5cdHJldHVybiBnZXREZWZhdWx0Q29udGV4dCgpLmdldENoYW5uZWxBc3luYyhuYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gZ2V0RGVmYXVsdENvbnRleHQoKS5jcmVhdGVDaGFubmVsUGFpcihuYW1lMSwgbmFtZTIsIG9wdGlvbnMpO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvVHJhbnNwb3J0T2JzZXJ2YWJsZS50c1xudmFyIFRyYW5zcG9ydE9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cCA9IG51bGw7XG5cdHN1YnNjcmliZShvYnNlcnZlck9yTmV4dCkge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlck9yTmV4dCA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlck9yTmV4dCB9IDogb2JzZXJ2ZXJPck5leHQ7XG5cdFx0Y29uc3QgZmlyc3QgPSB0aGlzLl9zdWJzLnNpemUgPT09IDA7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoZmlyc3QgJiYgIXRoaXMuX2xpc3RlbmluZykgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRcdGlmICh0aGlzLl9zdWJzLnNpemUgPT09IDAgJiYgdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gbnVsbDtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSBmYWxzZTtcblx0fVxuXHRfZGlzcGF0Y2godmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdHMubmV4dD8uKHZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHR9XG5cdF9lcnJvcihlcnIpIHtcblx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdH1cblx0X2NvbXBsZXRlKCkge1xuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmNvbXBsZXRlPy4oKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX2NvbXBsZXRlKCk7XG5cdH1cblx0Z2V0IHN1YnNjcmliZXJDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3Vicy5zaXplO1xuXHR9XG5cdGdldCBpc0xpc3RlbmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5fbGlzdGVuaW5nO1xuXHR9XG59O1xudmFyIFdvcmtlck9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIFRyYW5zcG9ydE9ic2VydmFibGUge1xuXHRfd29ya2VyO1xuXHRfc2VuZDtcblx0Y29uc3RydWN0b3IoX3dvcmtlcikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fd29ya2VyID0gX3dvcmtlcjtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3dvcmtlcik7XG5cdH1cblx0bmV4dCh2YWx1ZSwgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlLCB0cmFuc2Zlcik7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5pbmcpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fd29ya2VyLCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCksIChlKSA9PiB0aGlzLl9lcnJvcihlKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHR0ZXJtaW5hdGUoKSB7XG5cdFx0dGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHRcdHRoaXMuX2NvbXBsZXRlKCk7XG5cdH1cblx0Z2V0IHdvcmtlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fd29ya2VyO1xuXHR9XG59O1xudmFyIE1lc3NhZ2VQb3J0T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9wb3J0O1xuXHRfc2VuZDtcblx0Y29uc3RydWN0b3IoX3BvcnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3BvcnQgPSBfcG9ydDtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX3BvcnQpO1xuXHR9XG5cdG5leHQodmFsdWUsIHRyYW5zZmVyKSB7XG5cdFx0dGhpcy5fc2VuZCh2YWx1ZSwgdHJhbnNmZXIpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKHRoaXMuX3BvcnQsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRnZXQgcG9ydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydDtcblx0fVxufTtcbnZhciBCcm9hZGNhc3RDaGFubmVsT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9uYW1lO1xuXHRfY2hhbm5lbDtcblx0X3NlbmQ7XG5cdGNvbnN0cnVjdG9yKF9uYW1lKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9uYW1lID0gX25hbWU7XG5cdFx0dGhpcy5fY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKF9uYW1lKTtcblx0XHR0aGlzLl9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKHRoaXMuX2NoYW5uZWwpO1xuXHR9XG5cdG5leHQodmFsdWUpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl9jaGFubmVsLCAoZCkgPT4ge1xuXHRcdFx0aWYgKGQ/LnNlbmRlciAhPT0gdGhpcy5fbmFtZSkgdGhpcy5fZGlzcGF0Y2goZCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jaGFubmVsLmNsb3NlKCk7XG5cdFx0c3VwZXIuY2xvc2UoKTtcblx0fVxufTtcbnZhciBXZWJTb2NrZXRPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3VybDtcblx0X3Byb3RvY29scztcblx0X3dzID0gbnVsbDtcblx0X3BlbmRpbmcgPSBbXTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF91cmwsIF9wcm90b2NvbHMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3VybCA9IF91cmw7XG5cdFx0dGhpcy5fcHJvdG9jb2xzID0gX3Byb3RvY29scztcblx0fVxuXHRjb25uZWN0KCkge1xuXHRcdGlmICh0aGlzLl93cykgcmV0dXJuO1xuXHRcdGNvbnN0IHVybCA9IHR5cGVvZiB0aGlzLl91cmwgPT09IFwic3RyaW5nXCIgPyB0aGlzLl91cmwgOiB0aGlzLl91cmwuaHJlZjtcblx0XHR0aGlzLl93cyA9IG5ldyBXZWJTb2NrZXQodXJsLCB0aGlzLl9wcm90b2NvbHMpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjb25uZWN0aW5nXCIpO1xuXHRcdHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJvcGVuXCIpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5mb3JFYWNoKChtKSA9PiB0aGlzLm5leHQobSkpO1xuXHRcdFx0dGhpcy5fcGVuZGluZyA9IFtdO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl93cywgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCAoZSkgPT4gdGhpcy5fZXJyb3IoZSksICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuXHRcdH0pO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0bmV4dCh2YWx1ZSkge1xuXHRcdGlmICghdGhpcy5fd3MgfHwgdGhpcy5fd3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcblx0XHRcdHRoaXMuX3BlbmRpbmcucHVzaCh2YWx1ZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlOiBfLCAuLi5kYXRhIH0gPSB2YWx1ZTtcblx0XHR0aGlzLl93cy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKCF0aGlzLl93cykgdGhpcy5jb25uZWN0KCk7XG5cdH1cblx0Y2xvc2UoY29kZSwgcmVhc29uKSB7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImNsb3NpbmdcIik7XG5cdFx0dGhpcy5fd3M/LmNsb3NlKGNvZGUsIHJlYXNvbik7XG5cdFx0dGhpcy5fd3MgPSBudWxsO1xuXHRcdHN1cGVyLmNsb3NlKCk7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgaXNPcGVuKCkge1xuXHRcdHJldHVybiB0aGlzLl93cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cdH1cbn07XG52YXIgQ2hyb21lUnVudGltZU9ic2VydmFibGUkMSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwiY2hyb21lLXJ1bnRpbWVcIik7XG5cdG5leHQodmFsdWUpIHtcblx0XHR0aGlzLl9zZW5kKHZhbHVlKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcImNocm9tZS1ydW50aW1lXCIsIChkKSA9PiB0aGlzLl9kaXNwYXRjaChkKSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBDaHJvbWVUYWJzT2JzZXJ2YWJsZSQxID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3RhYklkO1xuXHRjb25zdHJ1Y3RvcihfdGFiSWQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHR9XG5cdHNldFRhYklkKGlkKSB7XG5cdFx0dGhpcy5fdGFiSWQgPSBpZDtcblx0fVxuXHRuZXh0KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuX3RhYklkID09IG51bGwgfHwgdHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnRhYnMpIHJldHVybjtcblx0XHRjb25zdCB7IHRyYW5zZmVyYWJsZTogXywgLi4uZGF0YSB9ID0gdmFsdWU7XG5cdFx0Y2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGhpcy5fdGFiSWQsIGRhdGEpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwiY2hyb21lLXRhYnNcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCB2b2lkIDAsIHZvaWQgMCwgeyB0YWJJZDogdGhpcy5fdGFiSWQgfSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBDaHJvbWVQb3J0T2JzZXJ2YWJsZSQxID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3BvcnROYW1lO1xuXHRfdGFiSWQ7XG5cdF9zZW5kO1xuXHRjb25zdHJ1Y3RvcihfcG9ydE5hbWUsIF90YWJJZCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fcG9ydE5hbWUgPSBfcG9ydE5hbWU7XG5cdFx0dGhpcy5fdGFiSWQgPSBfdGFiSWQ7XG5cdFx0dGhpcy5fc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcihcImNocm9tZS1wb3J0XCIsIHtcblx0XHRcdHBvcnROYW1lOiBfcG9ydE5hbWUsXG5cdFx0XHR0YWJJZDogX3RhYklkXG5cdFx0fSk7XG5cdH1cblx0bmV4dCh2YWx1ZSkge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fY2xlYW51cCA9IGNyZWF0ZVRyYW5zcG9ydExpc3RlbmVyKFwiY2hyb21lLXBvcnRcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpLCB2b2lkIDAsIHZvaWQgMCwge1xuXHRcdFx0cG9ydE5hbWU6IHRoaXMuX3BvcnROYW1lLFxuXHRcdFx0dGFiSWQ6IHRoaXMuX3RhYklkXG5cdFx0fSk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNwb3J0T2JzZXJ2YWJsZSB7XG5cdF9zZW5kID0gY3JlYXRlVHJhbnNwb3J0U2VuZGVyKFwic2VydmljZS13b3JrZXItY2xpZW50XCIpO1xuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcInNlcnZpY2Utd29ya2VyLWNsaWVudFwiLCAoZCkgPT4gdGhpcy5fZGlzcGF0Y2goZCkpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgU2VydmljZVdvcmtlckhvc3RPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJzZXJ2aWNlLXdvcmtlci1ob3N0XCIpO1xuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcInNlcnZpY2Utd29ya2VyLWhvc3RcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIFNlbGZPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBUcmFuc3BvcnRPYnNlcnZhYmxlIHtcblx0X3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoXCJzZWxmXCIpO1xuXHRuZXh0KHZhbHVlLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQodmFsdWUsIHRyYW5zZmVyKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZykgcmV0dXJuO1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcihcInNlbGZcIiwgKGQpID0+IHRoaXMuX2Rpc3BhdGNoKGQpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xudmFyIFRyYW5zcG9ydE9ic2VydmFibGVGYWN0b3J5ID0ge1xuXHR3b3JrZXI6ICh3KSA9PiBuZXcgV29ya2VyT2JzZXJ2YWJsZSh3KSxcblx0d29ya2VyRnJvbVVybDogKHVybCwgb3B0cykgPT4gbmV3IFdvcmtlck9ic2VydmFibGUobmV3IFdvcmtlcih0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiID8gdXJsIDogdXJsLmhyZWYsIHtcblx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdC4uLm9wdHNcblx0fSkpLFxuXHRtZXNzYWdlUG9ydDogKHApID0+IG5ldyBNZXNzYWdlUG9ydE9ic2VydmFibGUocCksXG5cdG1lc3NhZ2VDaGFubmVsOiAoKSA9PiB7XG5cdFx0Y29uc3QgY2ggPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cG9ydDE6IG5ldyBNZXNzYWdlUG9ydE9ic2VydmFibGUoY2gucG9ydDEpLFxuXHRcdFx0cG9ydDI6IG5ldyBNZXNzYWdlUG9ydE9ic2VydmFibGUoY2gucG9ydDIpXG5cdFx0fTtcblx0fSxcblx0YnJvYWRjYXN0OiAobmFtZSkgPT4gbmV3IEJyb2FkY2FzdENoYW5uZWxPYnNlcnZhYmxlKG5hbWUpLFxuXHR3ZWJzb2NrZXQ6ICh1cmwsIHByb3RvY29scykgPT4gbmV3IFdlYlNvY2tldE9ic2VydmFibGUodXJsLCBwcm90b2NvbHMpLFxuXHRjaHJvbWVSdW50aW1lOiAoKSA9PiBuZXcgQ2hyb21lUnVudGltZU9ic2VydmFibGUkMSgpLFxuXHRjaHJvbWVUYWJzOiAodGFiSWQpID0+IG5ldyBDaHJvbWVUYWJzT2JzZXJ2YWJsZSQxKHRhYklkKSxcblx0Y2hyb21lUG9ydDogKHBvcnROYW1lLCB0YWJJZCkgPT4gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlJDEocG9ydE5hbWUsIHRhYklkKSxcblx0c2VydmljZVdvcmtlckNsaWVudDogKCkgPT4gbmV3IFNlcnZpY2VXb3JrZXJDbGllbnRPYnNlcnZhYmxlKCksXG5cdHNlcnZpY2VXb3JrZXJIb3N0OiAoKSA9PiBuZXcgU2VydmljZVdvcmtlckhvc3RPYnNlcnZhYmxlKCksXG5cdHNlbGY6ICgpID0+IG5ldyBTZWxmT2JzZXJ2YWJsZSgpXG59O1xuZnVuY3Rpb24gY3JlYXRlQmlkaXJlY3Rpb25hbENoYW5uZWwkMShvdXRib3VuZCwgaW5ib3VuZCkge1xuXHRyZXR1cm4ge1xuXHRcdHNlbmQ6ICh2LCB0KSA9PiBvdXRib3VuZC5uZXh0KHYsIHQpLFxuXHRcdHN1YnNjcmliZTogKGgpID0+IGluYm91bmQuc3Vic2NyaWJlKHsgbmV4dDogaCB9KSxcblx0XHRjbG9zZTogKCkgPT4ge1xuXHRcdFx0b3V0Ym91bmQuY2xvc2UoKTtcblx0XHRcdGluYm91bmQuY2xvc2UoKTtcblx0XHR9XG5cdH07XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3RyYW5zcG9ydC9Xb3JrZXIudHNcbnZhciBXb3JrZXJDb250ZXh0ID0gY2xhc3Mge1xuXHRfY29udGV4dDtcblx0X2NvbmZpZztcblx0X3N1YnNjcmlwdGlvbnMgPSBbXTtcblx0X2luY29taW5nQ29ubmVjdGlvbnMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoeyBidWZmZXJTaXplOiAxMDAgfSk7XG5cdF9jaGFubmVsQ3JlYXRlZCA9IG5ldyBDaGFubmVsU3ViamVjdCh7IGJ1ZmZlclNpemU6IDEwMCB9KTtcblx0X2NoYW5uZWxDbG9zZWQgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jb25maWcgPSB7XG5cdFx0XHRuYW1lOiBjb25maWcubmFtZSA/PyBcIndvcmtlclwiLFxuXHRcdFx0d29ya2VyTmFtZTogY29uZmlnLndvcmtlck5hbWUgPz8gYHdvcmtlci0ke1VVSUR2NCgpLnNsaWNlKDAsIDgpfWAsXG5cdFx0XHRhdXRvQWNjZXB0Q2hhbm5lbHM6IGNvbmZpZy5hdXRvQWNjZXB0Q2hhbm5lbHMgPz8gdHJ1ZSxcblx0XHRcdGFsbG93ZWRDaGFubmVsczogY29uZmlnLmFsbG93ZWRDaGFubmVscyA/PyBbXSxcblx0XHRcdG1heENoYW5uZWxzOiBjb25maWcubWF4Q2hhbm5lbHMgPz8gMTAwLFxuXHRcdFx0YXV0b0Nvbm5lY3Q6IGNvbmZpZy5hdXRvQ29ubmVjdCA/PyB0cnVlLFxuXHRcdFx0dXNlR2xvYmFsU2VsZjogdHJ1ZSxcblx0XHRcdGRlZmF1bHRPcHRpb25zOiBjb25maWcuZGVmYXVsdE9wdGlvbnMgPz8ge30sXG5cdFx0XHRpc29sYXRlZFN0b3JhZ2U6IGNvbmZpZy5pc29sYXRlZFN0b3JhZ2UgPz8gZmFsc2UsXG5cdFx0XHQuLi5jb25maWdcblx0XHR9O1xuXHRcdHRoaXMuX2NvbnRleHQgPSBjcmVhdGVDaGFubmVsQ29udGV4dCh7XG5cdFx0XHRuYW1lOiB0aGlzLl9jb25maWcubmFtZSxcblx0XHRcdHVzZUdsb2JhbFNlbGY6IHRydWUsXG5cdFx0XHRkZWZhdWx0T3B0aW9uczogY29uZmlnLmRlZmF1bHRPcHRpb25zXG5cdFx0fSk7XG5cdFx0dGhpcy5fc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTtcblx0fVxuXHRnZXQgb25Db25uZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zO1xuXHR9XG5cdGdldCBvbkNoYW5uZWxDcmVhdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsQ3JlYXRlZDtcblx0fVxuXHRnZXQgb25DaGFubmVsQ2xvc2VkKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsQ2xvc2VkO1xuXHR9XG5cdHN1YnNjcmliZUNvbm5lY3Rpb25zKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0c3Vic2NyaWJlQ2hhbm5lbENyZWF0ZWQoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsQ3JlYXRlZC5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblx0YWNjZXB0Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cdFx0aWYgKCF0aGlzLl9jYW5BY2NlcHRDaGFubmVsKGNvbm5lY3Rpb24uY2hhbm5lbCkpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVDaGFubmVsKGNvbm5lY3Rpb24uY2hhbm5lbCwgY29ubmVjdGlvbi5vcHRpb25zKTtcblx0XHRpZiAoY29ubmVjdGlvbi5wb3J0KSB7XG5cdFx0XHRjb25uZWN0aW9uLnBvcnQuc3RhcnQ/LigpO1xuXHRcdFx0ZW5kcG9pbnQuaGFuZGxlci5jcmVhdGVSZW1vdGVDaGFubmVsKGNvbm5lY3Rpb24uc2VuZGVyLCBjb25uZWN0aW9uLm9wdGlvbnMsIGNvbm5lY3Rpb24ucG9ydCk7XG5cdFx0fVxuXHRcdHRoaXMuX2NoYW5uZWxDcmVhdGVkLm5leHQoe1xuXHRcdFx0Y2hhbm5lbDogY29ubmVjdGlvbi5jaGFubmVsLFxuXHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHRzZW5kZXI6IGNvbm5lY3Rpb24uc2VuZGVyLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0fSk7XG5cdFx0dGhpcy5fcG9zdENoYW5uZWxDcmVhdGVkKGNvbm5lY3Rpb24uY2hhbm5lbCwgY29ubmVjdGlvbi5zZW5kZXIsIGNvbm5lY3Rpb24uaWQpO1xuXHRcdHJldHVybiBlbmRwb2ludDtcblx0fVxuXHRjcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dC5jcmVhdGVDaGFubmVsKG5hbWUsIG9wdGlvbnMpO1xuXHR9XG5cdGdldENoYW5uZWwobmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0LmdldENoYW5uZWwobmFtZSk7XG5cdH1cblx0aGFzQ2hhbm5lbChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuaGFzQ2hhbm5lbChuYW1lKTtcblx0fVxuXHRnZXRDaGFubmVsTmFtZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQuZ2V0Q2hhbm5lbE5hbWVzKCk7XG5cdH1cblx0cXVlcnlDb25uZWN0aW9ucyhxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQucXVlcnlDb25uZWN0aW9ucyhxdWVyeSk7XG5cdH1cblx0bm90aWZ5Q29ubmVjdGlvbnMocGF5bG9hZCA9IHt9LCBxdWVyeSA9IHt9KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnRleHQubm90aWZ5Q29ubmVjdGlvbnMocGF5bG9hZCwgcXVlcnkpO1xuXHR9XG5cdGNsb3NlQ2hhbm5lbChuYW1lKSB7XG5cdFx0Y29uc3QgY2xvc2VkID0gdGhpcy5fY29udGV4dC5jbG9zZUNoYW5uZWwobmFtZSk7XG5cdFx0aWYgKGNsb3NlZCkgdGhpcy5fY2hhbm5lbENsb3NlZC5uZXh0KHtcblx0XHRcdGNoYW5uZWw6IG5hbWUsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHRyZXR1cm4gY2xvc2VkO1xuXHR9XG5cdGdldCBjb250ZXh0KCkge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHR9XG5cdGdldCBjb25maWcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbmZpZztcblx0fVxuXHRfc2V0dXBNZXNzYWdlTGlzdGVuZXIoKSB7XG5cdFx0YWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKChldmVudCkgPT4ge1xuXHRcdFx0dGhpcy5faGFuZGxlSW5jb21pbmdNZXNzYWdlKGV2ZW50KTtcblx0XHR9KSk7XG5cdH1cblx0X2hhbmRsZUluY29taW5nTWVzc2FnZShldmVudCkge1xuXHRcdGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuXHRcdGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuXHRcdHN3aXRjaCAoZGF0YS50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY3JlYXRlQ2hhbm5lbFwiOlxuXHRcdFx0XHR0aGlzLl9oYW5kbGVDcmVhdGVDaGFubmVsKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb25uZWN0Q2hhbm5lbFwiOlxuXHRcdFx0XHR0aGlzLl9oYW5kbGVDb25uZWN0Q2hhbm5lbChkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYWRkUG9ydFwiOlxuXHRcdFx0XHR0aGlzLl9oYW5kbGVBZGRQb3J0KGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJsaXN0Q2hhbm5lbHNcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlTGlzdENoYW5uZWxzKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjbG9zZUNoYW5uZWxcIjpcblx0XHRcdFx0dGhpcy5faGFuZGxlQ2xvc2VDaGFubmVsKGRhdGEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJwaW5nXCI6XG5cdFx0XHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdFx0XHR0eXBlOiBcInBvbmdcIixcblx0XHRcdFx0XHRpZDogZGF0YS5pZCxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYgKGRhdGEuY2hhbm5lbCAmJiB0aGlzLl9jb250ZXh0Lmhhc0NoYW5uZWwoZGF0YS5jaGFubmVsKSkgKHRoaXMuX2NvbnRleHQuZ2V0Q2hhbm5lbChkYXRhLmNoYW5uZWwpPy5oYW5kbGVyKT8uaGFuZGxlQW5kUmVzcG9uc2U/LihkYXRhLnBheWxvYWQsIGRhdGEucmVxSWQpO1xuXHRcdH1cblx0fVxuXHRfaGFuZGxlQ3JlYXRlQ2hhbm5lbChkYXRhKSB7XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHR5cGU6IFwiY2hhbm5lbFwiLFxuXHRcdFx0cG9ydDogZGF0YS5tZXNzYWdlUG9ydCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdG9wdGlvbnM6IGRhdGEub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0FjY2VwdENoYW5uZWxzKSB0aGlzLmFjY2VwdENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cdH1cblx0X2hhbmRsZUNvbm5lY3RDaGFubmVsKGRhdGEpIHtcblx0XHRjb25zdCBjb25uZWN0aW9uID0ge1xuXHRcdFx0aWQ6IGRhdGEucmVxSWQgPz8gVVVJRHY0KCksXG5cdFx0XHRjaGFubmVsOiBkYXRhLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IGRhdGEuc2VuZGVyID8/IFwidW5rbm93blwiLFxuXHRcdFx0dHlwZTogZGF0YS5wb3J0VHlwZSA/PyBcImNoYW5uZWxcIixcblx0XHRcdHBvcnQ6IGRhdGEucG9ydCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcblx0XHRcdG9wdGlvbnM6IGRhdGEub3B0aW9uc1xuXHRcdH07XG5cdFx0dGhpcy5faW5jb21pbmdDb25uZWN0aW9ucy5uZXh0KGNvbm5lY3Rpb24pO1xuXHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0FjY2VwdENoYW5uZWxzICYmIHRoaXMuX2NhbkFjY2VwdENoYW5uZWwoZGF0YS5jaGFubmVsKSkge1xuXHRcdFx0Y29uc3QgZW5kcG9pbnQgPSB0aGlzLl9jb250ZXh0LmdldE9yQ3JlYXRlQ2hhbm5lbChkYXRhLmNoYW5uZWwsIGRhdGEub3B0aW9ucyk7XG5cdFx0XHRpZiAoZGF0YS5wb3J0KSB7XG5cdFx0XHRcdGRhdGEucG9ydC5zdGFydD8uKCk7XG5cdFx0XHRcdGVuZHBvaW50LmhhbmRsZXIuY3JlYXRlUmVtb3RlQ2hhbm5lbChkYXRhLnNlbmRlciwgZGF0YS5vcHRpb25zLCBkYXRhLnBvcnQpO1xuXHRcdFx0fVxuXHRcdFx0cG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHR0eXBlOiBcImNoYW5uZWxDb25uZWN0ZWRcIixcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdF9oYW5kbGVBZGRQb3J0KGRhdGEpIHtcblx0XHRpZiAoIWRhdGEucG9ydCB8fCAhZGF0YS5jaGFubmVsKSByZXR1cm47XG5cdFx0Y29uc3QgY29ubmVjdGlvbiA9IHtcblx0XHRcdGlkOiBkYXRhLnJlcUlkID8/IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogZGF0YS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBkYXRhLnNlbmRlciA/PyBcInVua25vd25cIixcblx0XHRcdHR5cGU6IFwicG9ydFwiLFxuXHRcdFx0cG9ydDogZGF0YS5wb3J0LFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0b3B0aW9uczogZGF0YS5vcHRpb25zXG5cdFx0fTtcblx0XHR0aGlzLl9pbmNvbWluZ0Nvbm5lY3Rpb25zLm5leHQoY29ubmVjdGlvbik7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5hdXRvQWNjZXB0Q2hhbm5lbHMpIHRoaXMuYWNjZXB0Q29ubmVjdGlvbihjb25uZWN0aW9uKTtcblx0fVxuXHRfaGFuZGxlTGlzdENoYW5uZWxzKGRhdGEpIHtcblx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNoYW5uZWxMaXN0XCIsXG5cdFx0XHRjaGFubmVsczogdGhpcy5nZXRDaGFubmVsTmFtZXMoKSxcblx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkXG5cdFx0fSk7XG5cdH1cblx0X2hhbmRsZUNsb3NlQ2hhbm5lbChkYXRhKSB7XG5cdFx0aWYgKGRhdGEuY2hhbm5lbCkge1xuXHRcdFx0dGhpcy5jbG9zZUNoYW5uZWwoZGF0YS5jaGFubmVsKTtcblx0XHRcdHBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZTogXCJjaGFubmVsQ2xvc2VkXCIsXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRfY2FuQWNjZXB0Q2hhbm5lbChjaGFubmVsKSB7XG5cdFx0aWYgKHRoaXMuX2NvbnRleHQuc2l6ZSA+PSB0aGlzLl9jb25maWcubWF4Q2hhbm5lbHMpIHJldHVybiBmYWxzZTtcblx0XHRpZiAodGhpcy5fY29uZmlnLmFsbG93ZWRDaGFubmVscy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5fY29uZmlnLmFsbG93ZWRDaGFubmVscy5pbmNsdWRlcyhjaGFubmVsKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRfcG9zdENoYW5uZWxDcmVhdGVkKGNoYW5uZWwsIHNlbmRlciwgcmVxSWQpIHtcblx0XHRwb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcImNoYW5uZWxDcmVhdGVkXCIsXG5cdFx0XHRjaGFubmVsLFxuXHRcdFx0c2VuZGVyLFxuXHRcdFx0cmVxSWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2luY29taW5nQ29ubmVjdGlvbnMuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jaGFubmVsQ3JlYXRlZC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX2NoYW5uZWxDbG9zZWQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9jb250ZXh0LmNsb3NlKCk7XG5cdH1cbn07XG52YXIgV09SS0VSX0NPTlRFWFQgPSBudWxsO1xuZnVuY3Rpb24gZ2V0V29ya2VyQ29udGV4dChjb25maWcpIHtcblx0aWYgKCFXT1JLRVJfQ09OVEVYVCkgV09SS0VSX0NPTlRFWFQgPSBuZXcgV29ya2VyQ29udGV4dChjb25maWcpO1xuXHRyZXR1cm4gV09SS0VSX0NPTlRFWFQ7XG59XG5mdW5jdGlvbiBpbml0V29ya2VyQ29udGV4dChjb25maWcpIHtcblx0V09SS0VSX0NPTlRFWFQ/LmNsb3NlKCk7XG5cdFdPUktFUl9DT05URVhUID0gbmV3IFdvcmtlckNvbnRleHQoY29uZmlnKTtcblx0cmV0dXJuIFdPUktFUl9DT05URVhUO1xufVxuZnVuY3Rpb24gb25Xb3JrZXJDb25uZWN0aW9uKGhhbmRsZXIpIHtcblx0cmV0dXJuIGdldFdvcmtlckNvbnRleHQoKS5zdWJzY3JpYmVDb25uZWN0aW9ucyhoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIG9uV29ya2VyQ2hhbm5lbENyZWF0ZWQoaGFuZGxlcikge1xuXHRyZXR1cm4gZ2V0V29ya2VyQ29udGV4dCgpLnN1YnNjcmliZUNoYW5uZWxDcmVhdGVkKGhhbmRsZXIpO1xufVxudmFyIFdPUktFUl9SRVNQT05ERVIgPSBudWxsO1xudmFyIFdPUktFUl9JTlZPS0VSID0gbnVsbDtcbmZ1bmN0aW9uIGdldFdvcmtlclJlc3BvbmRlcihjaGFubmVsKSB7XG5cdGlmICghV09SS0VSX1JFU1BPTkRFUikge1xuXHRcdFdPUktFUl9SRVNQT05ERVIgPSBjcmVhdGVSZXNwb25kZXIoY2hhbm5lbCA/PyBcIndvcmtlclwiKTtcblx0XHRXT1JLRVJfUkVTUE9OREVSLmxpc3RlbihzZWxmKTtcblx0fVxuXHRyZXR1cm4gV09SS0VSX1JFU1BPTkRFUjtcbn1cbmZ1bmN0aW9uIGdldFdvcmtlckludm9rZXIoY2hhbm5lbCkge1xuXHRpZiAoIVdPUktFUl9JTlZPS0VSKSB7XG5cdFx0V09SS0VSX0lOVk9LRVIgPSBjcmVhdGVJbnZva2VyKGNoYW5uZWwgPz8gXCJ3b3JrZXJcIik7XG5cdFx0V09SS0VSX0lOVk9LRVIuY29ubmVjdChzZWxmKTtcblx0fVxuXHRyZXR1cm4gV09SS0VSX0lOVk9LRVI7XG59XG5mdW5jdGlvbiBleHBvc2VGcm9tV29ya2VyKG5hbWUsIG9iaikge1xuXHRnZXRXb3JrZXJSZXNwb25kZXIoKS5leHBvc2UobmFtZSwgb2JqKTtcbn1cbmZ1bmN0aW9uIG9uV29ya2VySW52b2NhdGlvbihoYW5kbGVyKSB7XG5cdHJldHVybiBnZXRXb3JrZXJSZXNwb25kZXIoKS5zdWJzY3JpYmVJbnZvY2F0aW9ucyhoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RQcm94eShob3N0Q2hhbm5lbCA9IFwiaG9zdFwiLCBiYXNlUGF0aCA9IFtdKSB7XG5cdHJldHVybiBnZXRXb3JrZXJJbnZva2VyKCkuY3JlYXRlUHJveHkoaG9zdENoYW5uZWwsIGJhc2VQYXRoKTtcbn1cbmZ1bmN0aW9uIGltcG9ydEluSG9zdCh1cmwsIGhvc3RDaGFubmVsID0gXCJob3N0XCIpIHtcblx0cmV0dXJuIGdldFdvcmtlckludm9rZXIoKS5pbXBvcnRNb2R1bGUoaG9zdENoYW5uZWwsIHVybCk7XG59XG52YXIgY3R4ID0gZ2V0V29ya2VyQ29udGV4dCh7IG5hbWU6IFwid29ya2VyXCIgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L29ic2VydmFibGUvQ2hyb21lT2JzZXJ2YWJsZS50c1xudmFyIEJhc2VDaHJvbWVPYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9saXN0ZW5pbmcgPSBmYWxzZTtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy5fc3Vicy5zaXplID09PSAwO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0aWYgKGZpcnN0ICYmICF0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2FjdGl2YXRlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwICYmIHRoaXMuX2xpc3RlbmluZykgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0X2Rpc3BhdGNoKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRzLm5leHQ/Lih2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHR9XG59O1xudmFyIENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2hyb21lT2JzZXJ2YWJsZSB7XG5cdF9oYW5kbGVyO1xuXHRfb3B0aW9ucztcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdHJ1Y3RvcihfaGFuZGxlciwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5faGFuZGxlciA9IF9oYW5kbGVyO1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0Y2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoZGF0YSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgeyBfc2VuZGVyLCBfdGFiSWQsIF9mcmFtZUlkLCB0cmFuc2ZlcmFibGUsIC4uLmRhdGEgfSA9IHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fTtcblx0XHRcdGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKGRhdGEsIChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZWplY3QobmV3IEVycm9yKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG5cdFx0XHRcdGVsc2UgcmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nIHx8IHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmZpbHRlclNlbmRlciAmJiAhdGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIoc2VuZGVyKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMuZmlsdGVyTWVzc2FnZSAmJiAhdGhpcy5fb3B0aW9ucy5maWx0ZXJNZXNzYWdlKG1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhID0ge1xuXHRcdFx0XHQuLi5tZXNzYWdlLFxuXHRcdFx0XHRpZDogbWVzc2FnZS5pZCA/PyBVVUlEdjQoKSxcblx0XHRcdFx0X3NlbmRlcjogc2VuZGVyLFxuXHRcdFx0XHRfdGFiSWQ6IHNlbmRlci50YWI/LmlkLFxuXHRcdFx0XHRfZnJhbWVJZDogc2VuZGVyLmZyYW1lSWRcblx0XHRcdH07XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0cC5yZXNvbHZlKGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl9oYW5kbGVyKSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbmQgPSAocmVzdWx0KSA9PiBzZW5kUmVzcG9uc2UocmVzdWx0KTtcblx0XHRcdFx0Y29uc3Qgc3Vic2NyaWJlciA9IHtcblx0XHRcdFx0XHRuZXh0OiAodikgPT4gdGhpcy5fZGlzcGF0Y2godiksXG5cdFx0XHRcdFx0ZXJyb3I6ICgpID0+IHt9LFxuXHRcdFx0XHRcdGNvbXBsZXRlOiAoKSA9PiB7fSxcblx0XHRcdFx0XHRzaWduYWw6IG5ldyBBYm9ydENvbnRyb2xsZXIoKS5zaWduYWwsXG5cdFx0XHRcdFx0YWN0aXZlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB0aGlzLl9oYW5kbGVyKGRhdGEsIHJlc3BvbmQsIHN1YnNjcmliZXIpIGluc3RhbmNlb2YgUHJvbWlzZSA/IHRydWUgOiB0aGlzLl9vcHRpb25zLmFzeW5jUmVzcG9uc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9kaXNwYXRjaChkYXRhKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHRcdGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxufTtcbnZhciBDaHJvbWVUYWJzT2JzZXJ2YWJsZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUNocm9tZU9ic2VydmFibGUge1xuXHRfdGFiSWQ7XG5cdF9vcHRpb25zO1xuXHRjb25zdHJ1Y3RvcihfdGFiSWQsIF9vcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX3RhYklkID0gX3RhYklkO1xuXHRcdHRoaXMuX29wdGlvbnMgPSBfb3B0aW9ucztcblx0fVxuXHRzZXRUYWJJZChpZCkge1xuXHRcdHRoaXMuX3RhYklkID0gaWQ7XG5cdH1cblx0c2VuZChtc2cpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnRhYnMgfHwgdGhpcy5fdGFiSWQgPT0gbnVsbCkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0Y2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGhpcy5fdGFiSWQsIGRhdGEpO1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nIHx8IHR5cGVvZiBjaHJvbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIWNocm9tZS5ydW50aW1lKSByZXR1cm47XG5cdFx0Y29uc3QgbGlzdGVuZXIgPSAobWVzc2FnZSwgc2VuZGVyKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdGFiSWQgIT0gbnVsbCAmJiBzZW5kZXIudGFiPy5pZCAhPT0gdGhpcy5fdGFiSWQpIHJldHVybjtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLmZpbHRlclNlbmRlciAmJiAhdGhpcy5fb3B0aW9ucy5maWx0ZXJTZW5kZXIoc2VuZGVyKSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdFx0aWQ6IG1lc3NhZ2UuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdF9zZW5kZXI6IHNlbmRlcixcblx0XHRcdFx0X3RhYklkOiBzZW5kZXIudGFiPy5pZCxcblx0XHRcdFx0X2ZyYW1lSWQ6IHNlbmRlci5mcmFtZUlkXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fZGlzcGF0Y2goZGF0YSk7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2NsZWFudXAgPSAoKSA9PiBjaHJvbWUucnVudGltZS5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cbn07XG52YXIgQ2hyb21lUG9ydE9ic2VydmFibGUgPSBjbGFzcyBleHRlbmRzIEJhc2VDaHJvbWVPYnNlcnZhYmxlIHtcblx0X3BvcnROYW1lO1xuXHRfdGFiSWQ7XG5cdF9wb3J0ID0gbnVsbDtcblx0X2luZm8gPSBudWxsO1xuXHRjb25zdHJ1Y3RvcihfcG9ydE5hbWUsIF90YWJJZCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fcG9ydE5hbWUgPSBfcG9ydE5hbWU7XG5cdFx0dGhpcy5fdGFiSWQgPSBfdGFiSWQ7XG5cdH1cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodHlwZW9mIGNocm9tZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhY2hyb21lLnJ1bnRpbWUpIHJldHVybjtcblx0XHR0aGlzLl9wb3J0ID0gdGhpcy5fdGFiSWQgIT0gbnVsbCA/IGNocm9tZS50YWJzLmNvbm5lY3QodGhpcy5fdGFiSWQsIHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSkgOiBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogdGhpcy5fcG9ydE5hbWUgfSk7XG5cdFx0dGhpcy5faW5mbyA9IHtcblx0XHRcdG5hbWU6IHRoaXMuX3BvcnROYW1lLFxuXHRcdFx0dGFiSWQ6IHRoaXMuX3RhYklkXG5cdFx0fTtcblx0XHR0aGlzLl9zZXR1cExpc3RlbmVycygpO1xuXHR9XG5cdHNlbmQobXNnKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0Y29uc3QgeyBfc2VuZGVyLCBfdGFiSWQsIF9mcmFtZUlkLCB0cmFuc2ZlcmFibGUsIC4uLmRhdGEgfSA9IG1zZztcblx0XHR0aGlzLl9wb3J0LnBvc3RNZXNzYWdlKGRhdGEpO1xuXHR9XG5cdF9zZXR1cExpc3RlbmVycygpIHtcblx0XHRpZiAoIXRoaXMuX3BvcnQpIHJldHVybjtcblx0XHR0aGlzLl9wb3J0Lm9uTWVzc2FnZS5hZGRMaXN0ZW5lcigobXNnKSA9PiB0aGlzLl9kaXNwYXRjaCh7XG5cdFx0XHQuLi5tc2csXG5cdFx0XHRpZDogbXNnLmlkID8/IFVVSUR2NCgpXG5cdFx0fSkpO1xuXHRcdHRoaXMuX3BvcnQub25EaXNjb25uZWN0LmFkZExpc3RlbmVyKCgpID0+IHtcblx0XHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdFx0dGhpcy5fcG9ydCA9IG51bGw7XG5cdFx0fSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy5fcG9ydCkgdGhpcy5jb25uZWN0KCk7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gdHJ1ZTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9wb3J0Py5kaXNjb25uZWN0KCk7XG5cdFx0dGhpcy5fcG9ydCA9IG51bGw7XG5cdFx0c3VwZXIuX2RlYWN0aXZhdGUoKTtcblx0fVxuXHRnZXQgcG9ydEluZm8oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZm87XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0ICE9IG51bGw7XG5cdH1cbn07XG52YXIgQ2hyb21lRXh0ZXJuYWxPYnNlcnZhYmxlID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2hyb21lT2JzZXJ2YWJsZSB7XG5cdF9leHRlbnNpb25JZDtcblx0Y29uc3RydWN0b3IoX2V4dGVuc2lvbklkKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9leHRlbnNpb25JZCA9IF9leHRlbnNpb25JZDtcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdGlmICh0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZSkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgX3NlbmRlciwgX3RhYklkLCBfZnJhbWVJZCwgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0aWYgKHRoaXMuX2V4dGVuc2lvbklkKSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh0aGlzLl9leHRlbnNpb25JZCwgZGF0YSk7XG5cdFx0ZWxzZSBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShkYXRhKTtcblx0fVxuXHRfYWN0aXZhdGUoKSB7XG5cdFx0aWYgKHRoaXMuX2xpc3RlbmluZyB8fCB0eXBlb2YgY2hyb21lID09PSBcInVuZGVmaW5lZFwiIHx8ICFjaHJvbWUucnVudGltZT8ub25NZXNzYWdlRXh0ZXJuYWwpIHJldHVybjtcblx0XHRjb25zdCBsaXN0ZW5lciA9IChtZXNzYWdlLCBzZW5kZXIpID0+IHtcblx0XHRcdHRoaXMuX2Rpc3BhdGNoKHtcblx0XHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdFx0aWQ6IG1lc3NhZ2UuaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdF9zZW5kZXI6IHNlbmRlclxuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRjaHJvbWUucnVudGltZS5vbk1lc3NhZ2VFeHRlcm5hbC5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZUV4dGVybmFsLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlQ2hyb21lUmVxdWVzdEhhbmRsZXIoY2hhbm5lbE5hbWUsIGhhbmRsZXJzKSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSwgcmVzcG9uZCwgc3Vic2NyaWJlcikgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiKSB7XG5cdFx0XHRzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGFjdGlvbiA9IGRhdGEucGF5bG9hZD8uYWN0aW9uO1xuXHRcdGlmIChhY3Rpb24gJiYgaGFuZGxlcnNbYWN0aW9uXSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJzW2FjdGlvbl0oZGF0YS5wYXlsb2FkPy5hcmdzID8/IFtdLCBkYXRhKTtcblx0XHRcdHJlc3BvbmQoe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IHJlc3VsdCB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZXNwb25kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0cmVxSWQ6IGRhdGEucmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdFx0cGF5bG9hZDogeyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGVsc2Ugc3Vic2NyaWJlci5uZXh0KGRhdGEpO1xuXHR9O1xufVxudmFyIENocm9tZU9ic2VydmFibGVGYWN0b3J5ID0ge1xuXHRydW50aW1lOiAoaGFuZGxlciwgb3B0aW9ucykgPT4gbmV3IENocm9tZVJ1bnRpbWVPYnNlcnZhYmxlKGhhbmRsZXIsIG9wdGlvbnMpLFxuXHR0YWJzOiAodGFiSWQsIG9wdGlvbnMpID0+IG5ldyBDaHJvbWVUYWJzT2JzZXJ2YWJsZSh0YWJJZCwgb3B0aW9ucyksXG5cdHBvcnQ6IChuYW1lLCB0YWJJZCkgPT4gbmV3IENocm9tZVBvcnRPYnNlcnZhYmxlKG5hbWUsIHRhYklkKSxcblx0ZXh0ZXJuYWw6IChleHRlbnNpb25JZCkgPT4gbmV3IENocm9tZUV4dGVybmFsT2JzZXJ2YWJsZShleHRlbnNpb25JZClcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L29ic2VydmFibGUvU29ja2V0SU9PYnNlcnZhYmxlLnRzXG52YXIgU29ja2V0SU9PYnNlcnZhYmxlID0gY2xhc3Mge1xuXHRfc29ja2V0O1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9vcHRpb25zO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xpc3RlbmluZyA9IGZhbHNlO1xuXHRfY2xlYW51cHMgPSBbXTtcblx0X2V2ZW50cztcblx0X2RlZmF1bHRFdmVudDtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9zb2NrZXQsIF9jaGFubmVsTmFtZSwgX29wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMuX3NvY2tldCA9IF9zb2NrZXQ7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuXHRcdHRoaXMuX2V2ZW50cyA9IF9vcHRpb25zLmV2ZW50cyA/PyBbXCJtZXNzYWdlXCIsIFwiY2hhbm5lbFwiXTtcblx0XHR0aGlzLl9kZWZhdWx0RXZlbnQgPSBfb3B0aW9ucy5kZWZhdWx0RXZlbnQgPz8gXCJtZXNzYWdlXCI7XG5cdFx0aWYgKF9vcHRpb25zLmF1dG9Db25uZWN0ICE9PSBmYWxzZSkgdGhpcy5fc29ja2V0LmNvbm5lY3Q/LigpO1xuXHR9XG5cdHNlbmQobXNnLCBldmVudCkge1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCBhY2ssIC4uLmRhdGEgfSA9IG1zZztcblx0XHR0aGlzLl9zb2NrZXQuZW1pdChldmVudCA/PyBtc2cuZXZlbnQgPz8gdGhpcy5fZGVmYXVsdEV2ZW50LCBkYXRhKTtcblx0fVxuXHRlbWl0KGV2ZW50LCBkYXRhKSB7XG5cdFx0dGhpcy5fc29ja2V0LmVtaXQoZXZlbnQsIGRhdGEpO1xuXHR9XG5cdHJlcXVlc3QobXNnLCBldmVudCkge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9wZW5kaW5nLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAzZTQpO1xuXHRcdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGUsIGFjaywgLi4uZGF0YSB9ID0ge1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgPz8gdGhpcy5fZGVmYXVsdEV2ZW50LCBkYXRhLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHRjb25zdCBmaXJzdCA9IHRoaXMuX3N1YnMuc2l6ZSA9PT0gMDtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmIChmaXJzdCAmJiAhdGhpcy5fbGlzdGVuaW5nKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdFx0aWYgKHRoaXMuX3N1YnMuc2l6ZSA9PT0gMCAmJiB0aGlzLl9saXN0ZW5pbmcpIHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9hY3RpdmF0ZSgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCBldmVudCBvZiB0aGlzLl9ldmVudHMpIHtcblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZGF0YSwgYWNrKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHtcblx0XHRcdFx0XHQuLi50eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiA/IGRhdGEgOiB7IHBheWxvYWQ6IGRhdGEgfSxcblx0XHRcdFx0XHRpZDogZGF0YT8uaWQgPz8gVVVJRHY0KCksXG5cdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0YWNrXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChtc2cudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIG1zZy5yZXFJZCkge1xuXHRcdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChtc2cucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0XHRwLnJlc29sdmUobXNnLnBheWxvYWQpO1xuXHRcdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUobXNnLnJlcUlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdFx0cy5uZXh0Py4obXNnKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3NvY2tldC5vbihldmVudCwgaGFuZGxlcik7XG5cdFx0XHR0aGlzLl9jbGVhbnVwcy5wdXNoKCgpID0+IHRoaXMuX3NvY2tldC5vZmYoZXZlbnQsIGhhbmRsZXIpKTtcblx0XHR9XG5cdFx0Y29uc3Qgb25Db25uZWN0ID0gKCkgPT4gdGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0XHRjb25zdCBvbkRpc2Nvbm5lY3QgPSAoKSA9PiB0aGlzLl9zdGF0ZS5uZXh0KFwiZGlzY29ubmVjdGVkXCIpO1xuXHRcdGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB7XG5cdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG5cdFx0fTtcblx0XHR0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsIG9uQ29ubmVjdCk7XG5cdFx0dGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCBvbkRpc2Nvbm5lY3QpO1xuXHRcdHRoaXMuX3NvY2tldC5vbihcImVycm9yXCIsIG9uRXJyb3IpO1xuXHRcdHRoaXMuX2NsZWFudXBzLnB1c2goKCkgPT4gdGhpcy5fc29ja2V0Lm9mZihcImNvbm5lY3RcIiwgb25Db25uZWN0KSwgKCkgPT4gdGhpcy5fc29ja2V0Lm9mZihcImRpc2Nvbm5lY3RcIiwgb25EaXNjb25uZWN0KSwgKCkgPT4gdGhpcy5fc29ja2V0Lm9mZihcImVycm9yXCIsIG9uRXJyb3IpKTtcblx0XHR0aGlzLl9saXN0ZW5pbmcgPSB0cnVlO1xuXHR9XG5cdF9kZWFjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2NsZWFudXBzLmZvckVhY2goKGZuKSA9PiBmbigpKTtcblx0XHR0aGlzLl9jbGVhbnVwcyA9IFtdO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IGZhbHNlO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0dGhpcy5fc29ja2V0LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG5cdGdldCBzb2NrZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvY2tldDtcblx0fVxuXHRnZXQgY2hhbm5lbE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGdldCBpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc29ja2V0LmNvbm5lY3RlZCA/PyBmYWxzZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG59O1xudmFyIFNvY2tldElPUm9vbU9ic2VydmFibGUgPSBjbGFzcyB7XG5cdF9wYXJlbnQ7XG5cdF9yb29tTmFtZTtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRfcGFyZW50U3ViID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX3BhcmVudCwgX3Jvb21OYW1lKSB7XG5cdFx0dGhpcy5fcGFyZW50ID0gX3BhcmVudDtcblx0XHR0aGlzLl9yb29tTmFtZSA9IF9yb29tTmFtZTtcblx0fVxuXHRzZW5kKG1zZykge1xuXHRcdHRoaXMuX3BhcmVudC5zZW5kKHtcblx0XHRcdC4uLm1zZyxcblx0XHRcdHJvb206IHRoaXMuX3Jvb21OYW1lXG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHRjb25zdCBmaXJzdCA9IHRoaXMuX3N1YnMuc2l6ZSA9PT0gMDtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmIChmaXJzdCAmJiAhdGhpcy5fcGFyZW50U3ViKSB0aGlzLl9wYXJlbnRTdWIgPSB0aGlzLl9wYXJlbnQuc3Vic2NyaWJlKHtcblx0XHRcdG5leHQ6IChtc2cpID0+IHtcblx0XHRcdFx0aWYgKG1zZy5yb29tID09PSB0aGlzLl9yb29tTmFtZSB8fCBtc2cuY2hhbm5lbCA9PT0gdGhpcy5fcm9vbU5hbWUpIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRlcnJvcjogKGUpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlKTtcblx0XHRcdH0sXG5cdFx0XHRjb21wbGV0ZTogKCkgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5jb21wbGV0ZT8uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGFyZW50U3ViPy51bnN1YnNjcmliZSgpO1xuXHRcdFx0XHRcdHRoaXMuX3BhcmVudFN1YiA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGdldCByb29tTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcm9vbU5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVTb2NrZXRSZXF1ZXN0SGFuZGxlcihjaGFubmVsTmFtZSwgaGFuZGxlcnMpIHtcblx0cmV0dXJuIGFzeW5jIChkYXRhKSA9PiB7XG5cdFx0aWYgKGRhdGEudHlwZSAhPT0gXCJyZXF1ZXN0XCIgfHwgIWRhdGEuYWNrKSByZXR1cm47XG5cdFx0Y29uc3QgYWN0aW9uID0gZGF0YS5wYXlsb2FkPy5hY3Rpb247XG5cdFx0aWYgKGFjdGlvbiAmJiBoYW5kbGVyc1thY3Rpb25dKSB0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcnNbYWN0aW9uXShkYXRhLnBheWxvYWQ/LmFyZ3MgPz8gW10sIGRhdGEpO1xuXHRcdFx0ZGF0YS5hY2soe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IGRhdGEuc2VuZGVyLFxuXHRcdFx0XHRzZW5kZXI6IGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRwYXlsb2FkOiB7IHJlc3VsdCB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRkYXRhLmFjayh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogZGF0YS5zZW5kZXIsXG5cdFx0XHRcdHNlbmRlcjogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHJlcUlkOiBkYXRhLnJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlc3BvbnNlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn1cbnZhciBTb2NrZXRJT09ic2VydmFibGVGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IChzb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zKSA9PiBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKHNvY2tldCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpLFxuXHRyb29tOiAocGFyZW50LCByb29tTmFtZSkgPT4gbmV3IFNvY2tldElPUm9vbU9ic2VydmFibGUocGFyZW50LCByb29tTmFtZSlcbn07XG5mdW5jdGlvbiBjcmVhdGVTb2NrZXRPYnNlcnZhYmxlKHNvY2tldCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBTb2NrZXRJT09ic2VydmFibGUoc29ja2V0LCBjaGFubmVsTmFtZSwgb3B0aW9ucyk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3RyYW5zcG9ydC9TaGFyZWRXb3JrZXJUcmFuc3BvcnQudHNcbnZhciBTaGFyZWRXb3JrZXJDbGllbnQgPSBjbGFzcyB7XG5cdF9zY3JpcHRVcmw7XG5cdF9jaGFubmVsTmFtZTtcblx0X29wdGlvbnM7XG5cdF93b3JrZXIgPSBudWxsO1xuXHRfcG9ydCA9IG51bGw7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfbGlzdGVuaW5nID0gZmFsc2U7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BvcnRJZCA9IFVVSUR2NCgpO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoX3NjcmlwdFVybCwgX2NoYW5uZWxOYW1lLCBfb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fc2NyaXB0VXJsID0gX3NjcmlwdFVybDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG5cdFx0aWYgKF9vcHRpb25zLmF1dG9Db25uZWN0ICE9PSBmYWxzZSkgdGhpcy5jb25uZWN0KCk7XG5cdH1cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fd29ya2VyKSByZXR1cm47XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX3dvcmtlciA9IG5ldyBTaGFyZWRXb3JrZXIodGhpcy5fc2NyaXB0VXJsLCB7XG5cdFx0XHRcdG5hbWU6IHRoaXMuX29wdGlvbnMubmFtZSxcblx0XHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMuX29wdGlvbnMuY3JlZGVudGlhbHMsXG5cdFx0XHRcdHR5cGU6IHRoaXMuX29wdGlvbnMudHlwZVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9wb3J0ID0gdGhpcy5fd29ya2VyLnBvcnQ7XG5cdFx0XHR0aGlzLl9zZXR1cExpc3RlbmVycygpO1xuXHRcdFx0dGhpcy5fcG9ydC5zdGFydCgpO1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RpbmdcIik7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX3BvcnRJZCxcblx0XHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGFjdGlvbjogXCJjb25uZWN0XCIsXG5cdFx0XHRcdFx0cG9ydElkOiB0aGlzLl9wb3J0SWRcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImVycm9yXCIpO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdH1cblx0c2VuZChtc2csIHRyYW5zZmVyKSB7XG5cdFx0aWYgKCF0aGlzLl9wb3J0KSByZXR1cm47XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGUsIC4uLmRhdGEgfSA9IG1zZztcblx0XHR0aGlzLl9wb3J0LnBvc3RNZXNzYWdlKHtcblx0XHRcdC4uLmRhdGEsXG5cdFx0XHRwb3J0SWQ6IHRoaXMuX3BvcnRJZFxuXHRcdH0sIHRyYW5zZmVyID8/IFtdKTtcblx0fVxuXHRyZXF1ZXN0KG1zZykge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9wZW5kaW5nLmhhcyhyZXFJZCkpIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAzZTQpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZTogKHYpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0YnJvYWRjYXN0KG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0Li4ubXNnLFxuXHRcdFx0YnJvYWRjYXN0OiB0cnVlXG5cdFx0fSwgdHJhbnNmZXIpO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRpZiAoIXRoaXMuX2xpc3RlbmluZykgdGhpcy5fYWN0aXZhdGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHRcdGlmICh0aGlzLl9zdWJzLnNpemUgPT09IDApIHRoaXMuX2RlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdF9zZXR1cExpc3RlbmVycygpIHtcblx0XHRpZiAoIXRoaXMuX3BvcnQpIHJldHVybjtcblx0XHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBlLmRhdGE7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInNpZ25hbFwiICYmIGRhdGEucGF5bG9hZD8uYWN0aW9uID09PSBcImNvbm5lY3RlZFwiKSB0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGVkXCIpO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSBwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5wYXlsb2FkLmVycm9yKSk7XG5cdFx0XHRcdFx0ZWxzZSBwLnJlc29sdmUoZGF0YS5wYXlsb2FkPy5yZXN1bHQgPz8gZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBlcnJIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdGNvbnN0IGVyciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJTaGFyZWRXb3JrZXIgZXJyb3JcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdFx0fTtcblx0XHR0aGlzLl9wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1zZ0hhbmRsZXIpO1xuXHRcdHRoaXMuX3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCBlcnJIYW5kbGVyKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fcG9ydD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9wb3J0Py5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIGVyckhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdH1cblx0X2RlYWN0aXZhdGUoKSB7XG5cdFx0dGhpcy5fY2xlYW51cD8uKCk7XG5cdFx0dGhpcy5fY2xlYW51cCA9IG51bGw7XG5cdFx0dGhpcy5fbGlzdGVuaW5nID0gZmFsc2U7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX3BvcnRJZCxcblx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGFjdGlvbjogXCJkaXNjb25uZWN0XCIsXG5cdFx0XHRcdHBvcnRJZDogdGhpcy5fcG9ydElkXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5fZGVhY3RpdmF0ZSgpO1xuXHRcdHRoaXMuX3BvcnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5fcG9ydCA9IG51bGw7XG5cdFx0dGhpcy5fd29ya2VyID0gbnVsbDtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZGlzY29ubmVjdGVkXCIpO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0fVxuXHRnZXQgcG9ydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydDtcblx0fVxuXHRnZXQgcG9ydElkKCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0SWQ7XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZSgpID09PSBcImNvbm5lY3RlZFwiO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxufTtcbnZhciBTaGFyZWRXb3JrZXJIb3N0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9wb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX3NldHVwR2xvYmFsSGFuZGxlcigpO1xuXHR9XG5cdF9zZXR1cEdsb2JhbEhhbmRsZXIoKSB7XG5cdFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIFwib25jb25uZWN0XCIgaW4gc2VsZikge1xuXHRcdFx0c2VsZi5vbmNvbm5lY3QgPSAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gZS5wb3J0c1swXTtcblx0XHRcdFx0Y29uc3QgcG9ydElkID0gVVVJRHY0KCk7XG5cdFx0XHRcdHRoaXMuX3JlZ2lzdGVyUG9ydChwb3J0SWQsIHBvcnQpO1xuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJyZWFkeVwiKTtcblx0XHR9XG5cdH1cblx0X3JlZ2lzdGVyUG9ydChwb3J0SWQsIHBvcnQpIHtcblx0XHRjb25zdCBpbmZvID0ge1xuXHRcdFx0aWQ6IHBvcnRJZCxcblx0XHRcdGNvbm5lY3RlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0bGFzdFNlZW46IERhdGUubm93KClcblx0XHR9O1xuXHRcdHBvcnQub25tZXNzYWdlID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBlLmRhdGE7XG5cdFx0XHRpbmZvLmxhc3RTZWVuID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwic2lnbmFsXCIpIHtcblx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uYWN0aW9uID09PSBcImNvbm5lY3RcIikge1xuXHRcdFx0XHRcdGNvbnN0IHJlYWxQb3J0SWQgPSBkYXRhLnBheWxvYWQucG9ydElkIHx8IHBvcnRJZDtcblx0XHRcdFx0XHR0aGlzLl9wb3J0cy5kZWxldGUocG9ydElkKTtcblx0XHRcdFx0XHRpbmZvLmlkID0gcmVhbFBvcnRJZDtcblx0XHRcdFx0XHR0aGlzLl9wb3J0cy5zZXQocmVhbFBvcnRJZCwge1xuXHRcdFx0XHRcdFx0cG9ydCxcblx0XHRcdFx0XHRcdGluZm9cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRwb3J0LnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRcdFx0c2VuZGVyOiBcImhvc3RcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogXCJjb25uZWN0ZWRcIixcblx0XHRcdFx0XHRcdFx0cG9ydElkOiByZWFsUG9ydElkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmFjdGlvbiA9PT0gXCJkaXNjb25uZWN0XCIpIHtcblx0XHRcdFx0XHR0aGlzLl91bnJlZ2lzdGVyUG9ydChkYXRhLnBvcnRJZCA/PyBwb3J0SWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGEuYnJvYWRjYXN0KSB0aGlzLmJyb2FkY2FzdChkYXRhLCBkYXRhLnBvcnRJZCA/PyBwb3J0SWQpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKHtcblx0XHRcdFx0XHQuLi5kYXRhLFxuXHRcdFx0XHRcdHBvcnRJZDogZGF0YS5wb3J0SWQgPz8gcG9ydElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRwb3J0Lm9ubWVzc2FnZWVycm9yID0gKGUpID0+IHtcblx0XHRcdGNvbnN0IGVyciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJQb3J0IG1lc3NhZ2UgZXJyb3JcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdFx0fTtcblx0XHRwb3J0LnN0YXJ0KCk7XG5cdFx0dGhpcy5fcG9ydHMuc2V0KHBvcnRJZCwge1xuXHRcdFx0cG9ydCxcblx0XHRcdGluZm9cblx0XHR9KTtcblx0fVxuXHRfdW5yZWdpc3RlclBvcnQocG9ydElkKSB7XG5cdFx0Y29uc3QgZW50cnkgPSB0aGlzLl9wb3J0cy5nZXQocG9ydElkKTtcblx0XHRpZiAoZW50cnkpIHtcblx0XHRcdGVudHJ5LnBvcnQuY2xvc2UoKTtcblx0XHRcdHRoaXMuX3BvcnRzLmRlbGV0ZShwb3J0SWQpO1xuXHRcdH1cblx0fVxuXHRzZW5kKHBvcnRJZCwgbXNnLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5fcG9ydHMuZ2V0KHBvcnRJZCk7XG5cdFx0aWYgKCFlbnRyeSkgcmV0dXJuO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0ZW50cnkucG9ydC5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlciA/PyBbXSk7XG5cdH1cblx0YnJvYWRjYXN0KG1zZywgZXhjbHVkZVBvcnRJZCkge1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0Zm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiB0aGlzLl9wb3J0cykgaWYgKGlkICE9PSBleGNsdWRlUG9ydElkKSBlbnRyeS5wb3J0LnBvc3RNZXNzYWdlKHtcblx0XHRcdC4uLmRhdGEsXG5cdFx0XHRicm9hZGNhc3Q6IHRydWVcblx0XHR9KTtcblx0fVxuXHRyZXNwb25kKG1zZywgcmVzdWx0LCB0cmFuc2Zlcikge1xuXHRcdGlmICghbXNnLnBvcnRJZCB8fCAhbXNnLnJlcUlkKSByZXR1cm47XG5cdFx0dGhpcy5zZW5kKG1zZy5wb3J0SWQsIHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1zZy5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0cmVxSWQ6IG1zZy5yZXFJZCxcblx0XHRcdHBheWxvYWQ6IHsgcmVzdWx0IH1cblx0XHR9LCB0cmFuc2Zlcik7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdGdldFBvcnRzKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiB0aGlzLl9wb3J0cykgcmVzdWx0LnNldChpZCwgeyAuLi5lbnRyeS5pbmZvIH0pO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0Z2V0IHBvcnRDb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydHMuc2l6ZTtcblx0fVxuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YXRlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVTaGFyZWRXb3JrZXJPYnNlcnZhYmxlKHNjcmlwdFVybCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBTaGFyZWRXb3JrZXJDbGllbnQoc2NyaXB0VXJsLCBjaGFubmVsTmFtZSwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjcmVhdGVTaGFyZWRXb3JrZXJIb3N0T2JzZXJ2YWJsZShjaGFubmVsTmFtZSkge1xuXHRyZXR1cm4gbmV3IFNoYXJlZFdvcmtlckhvc3QoY2hhbm5lbE5hbWUpO1xufVxudmFyIFNoYXJlZFdvcmtlck9ic2VydmFibGVGYWN0b3J5ID0ge1xuXHRjbGllbnQ6ICh1cmwsIG5hbWUsIG9wdHMpID0+IG5ldyBTaGFyZWRXb3JrZXJDbGllbnQodXJsLCBuYW1lLCBvcHRzKSxcblx0aG9zdDogKG5hbWUpID0+IG5ldyBTaGFyZWRXb3JrZXJIb3N0KG5hbWUpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvQXRvbWljc1RyYW5zcG9ydC50c1xudmFyIGNib3JFbmNvZGVyID0gbnVsbDtcbmFzeW5jIGZ1bmN0aW9uIGdldENCT1JFbmNvZGVyKCkge1xuXHRpZiAoY2JvckVuY29kZXIpIHJldHVybiBjYm9yRW5jb2Rlcjtcblx0dHJ5IHtcblx0XHRjb25zdCBjYm9yeCA9IGF3YWl0IGltcG9ydChcIi4vY2Jvci14LSF+ezAwMH1+LmpzXCIpO1xuXHRcdGNib3JFbmNvZGVyID0ge1xuXHRcdFx0ZW5jb2RlOiAodikgPT4gY2JvcnguZW5jb2RlKHYpLFxuXHRcdFx0ZGVjb2RlOiAoZCkgPT4gY2JvcnguZGVjb2RlKGQpXG5cdFx0fTtcblx0fSBjYXRjaCB7XG5cdFx0Y2JvckVuY29kZXIgPSB7XG5cdFx0XHRlbmNvZGU6ICh2KSA9PiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodiwgcmVwbGFjZXIpKSxcblx0XHRcdGRlY29kZTogKGQpID0+IEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGQpLCByZXZpdmVyKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGNib3JFbmNvZGVyO1xufVxuZnVuY3Rpb24gcmVwbGFjZXIoX2tleSwgdmFsdWUpIHtcblx0aWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGFWaWV3KSkgcmV0dXJuIHtcblx0XHRfX3R5cGVkQXJyYXk6IHRydWUsXG5cdFx0dHlwZTogdmFsdWUuY29uc3RydWN0b3IubmFtZSxcblx0XHRkYXRhOiBBcnJheS5mcm9tKHZhbHVlKVxuXHR9O1xuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIHtcblx0XHRfX2FycmF5QnVmZmVyOiB0cnVlLFxuXHRcdGRhdGE6IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkodmFsdWUpKVxuXHR9O1xuXHRyZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiByZXZpdmVyKF9rZXksIHZhbHVlKSB7XG5cdGlmICh2YWx1ZT8uX190eXBlZEFycmF5KSB7XG5cdFx0Y29uc3QgVHlwZWRBcnJheUN0b3IgPSBnbG9iYWxUaGlzW3ZhbHVlLnR5cGVdO1xuXHRcdHJldHVybiBUeXBlZEFycmF5Q3RvciA/IG5ldyBUeXBlZEFycmF5Q3Rvcih2YWx1ZS5kYXRhKSA6IHZhbHVlLmRhdGE7XG5cdH1cblx0aWYgKHZhbHVlPy5fX2FycmF5QnVmZmVyKSByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodmFsdWUuZGF0YSkuYnVmZmVyO1xuXHRyZXR1cm4gdmFsdWU7XG59XG52YXIgSEVBREVSX1NJWkUgPSAzMjtcbnZhciBMT0NLX09GRlNFVCA9IDA7XG52YXIgU0VRX09GRlNFVCA9IDQ7XG52YXIgU0laRV9PRkZTRVQgPSA4O1xudmFyIEZMQUdTX09GRlNFVCA9IDEyO1xudmFyIFJFQURZX09GRlNFVCA9IDE2O1xudmFyIEFDS19PRkZTRVQgPSAyMDtcbnZhciBEQVRBX09GRlNFVCA9IEhFQURFUl9TSVpFO1xudmFyIEZMQUdfSEFTX1RSQU5TRkVSID0gMTtcbnZhciBGTEFHX0NPTVBSRVNTRUQgPSAyO1xudmFyIEZMQUdfUkVTUE9OU0UgPSA0O1xudmFyIEF0b21pY3NCdWZmZXIgPSBjbGFzcyB7XG5cdF9jb25maWc7XG5cdF9zaGFyZWRCdWZmZXI7XG5cdF9pbnQzMlZpZXc7XG5cdF91aW50OFZpZXc7XG5cdF9tYXhEYXRhU2l6ZTtcblx0Y29uc3RydWN0b3IoYnVmZmVyT3JTaXplID0gNjU1MzYsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdFx0aWYgKHR5cGVvZiBidWZmZXJPclNpemUgPT09IFwibnVtYmVyXCIpIHRoaXMuX3NoYXJlZEJ1ZmZlciA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcihidWZmZXJPclNpemUpO1xuXHRcdGVsc2UgdGhpcy5fc2hhcmVkQnVmZmVyID0gYnVmZmVyT3JTaXplO1xuXHRcdHRoaXMuX2ludDMyVmlldyA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX3NoYXJlZEJ1ZmZlcik7XG5cdFx0dGhpcy5fdWludDhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fc2hhcmVkQnVmZmVyKTtcblx0XHR0aGlzLl9tYXhEYXRhU2l6ZSA9IHRoaXMuX2NvbmZpZy5tYXhNZXNzYWdlU2l6ZSA/PyB0aGlzLl9zaGFyZWRCdWZmZXIuYnl0ZUxlbmd0aCAtIEhFQURFUl9TSVpFO1xuXHR9XG5cdGFzeW5jIHdyaXRlKGRhdGEsIGZsYWdzID0gMCkge1xuXHRcdGlmIChkYXRhLmJ5dGVMZW5ndGggPiB0aGlzLl9tYXhEYXRhU2l6ZSkgdGhyb3cgbmV3IEVycm9yKGBNZXNzYWdlIHRvbyBsYXJnZTogJHtkYXRhLmJ5dGVMZW5ndGh9ID4gJHt0aGlzLl9tYXhEYXRhU2l6ZX1gKTtcblx0XHR3aGlsZSAoQXRvbWljcy5jb21wYXJlRXhjaGFuZ2UodGhpcy5faW50MzJWaWV3LCBMT0NLX09GRlNFVCAvIDQsIDAsIDEpICE9PSAwKSBpZiAoKHRoaXMuX2NvbmZpZy51c2VBc3luY1dhaXQgJiYgXCJ3YWl0QXN5bmNcIiBpbiBBdG9taWNzID8gYXdhaXQgQXRvbWljcy53YWl0QXN5bmModGhpcy5faW50MzJWaWV3LCBMT0NLX09GRlNFVCAvIDQsIDEsIHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyAxMDApLnZhbHVlIDogQXRvbWljcy53YWl0KHRoaXMuX2ludDMyVmlldywgTE9DS19PRkZTRVQgLyA0LCAxLCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gMTAwKSkgPT09IFwidGltZWQtb3V0XCIpIGNvbnRpbnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX2ludDMyVmlldywgU0laRV9PRkZTRVQgLyA0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuXHRcdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIEZMQUdTX09GRlNFVCAvIDQsIGZsYWdzKTtcblx0XHRcdHRoaXMuX3VpbnQ4Vmlldy5zZXQoZGF0YSwgREFUQV9PRkZTRVQpO1xuXHRcdFx0QXRvbWljcy5hZGQodGhpcy5faW50MzJWaWV3LCBTRVFfT0ZGU0VUIC8gNCwgMSk7XG5cdFx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCwgMSk7XG5cdFx0XHRBdG9taWNzLm5vdGlmeSh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEF0b21pY3Muc3RvcmUodGhpcy5faW50MzJWaWV3LCBMT0NLX09GRlNFVCAvIDQsIDApO1xuXHRcdFx0QXRvbWljcy5ub3RpZnkodGhpcy5faW50MzJWaWV3LCBMT0NLX09GRlNFVCAvIDQpO1xuXHRcdH1cblx0fVxuXHRhc3luYyByZWFkKCkge1xuXHRcdGlmIChBdG9taWNzLmxvYWQodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0KSA9PT0gMCkge1xuXHRcdFx0aWYgKCh0aGlzLl9jb25maWcudXNlQXN5bmNXYWl0ICYmIFwid2FpdEFzeW5jXCIgaW4gQXRvbWljcyA/IGF3YWl0IEF0b21pY3Mud2FpdEFzeW5jKHRoaXMuX2ludDMyVmlldywgUkVBRFlfT0ZGU0VUIC8gNCwgMCwgdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDFlMykudmFsdWUgOiBBdG9taWNzLndhaXQodGhpcy5faW50MzJWaWV3LCBSRUFEWV9PRkZTRVQgLyA0LCAwLCB0aGlzLl9jb25maWcud2FpdFRpbWVvdXQgPz8gMWUzKSkgPT09IFwidGltZWQtb3V0XCIpIHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBzaXplID0gQXRvbWljcy5sb2FkKHRoaXMuX2ludDMyVmlldywgU0laRV9PRkZTRVQgLyA0KTtcblx0XHRjb25zdCBmbGFncyA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIEZMQUdTX09GRlNFVCAvIDQpO1xuXHRcdGNvbnN0IHNlcSA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIFNFUV9PRkZTRVQgLyA0KTtcblx0XHRpZiAoc2l6ZSA8PSAwIHx8IHNpemUgPiB0aGlzLl9tYXhEYXRhU2l6ZSkgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuXHRcdGRhdGEuc2V0KHRoaXMuX3VpbnQ4Vmlldy5zdWJhcnJheShEQVRBX09GRlNFVCwgREFUQV9PRkZTRVQgKyBzaXplKSk7XG5cdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9pbnQzMlZpZXcsIFJFQURZX09GRlNFVCAvIDQsIDApO1xuXHRcdEF0b21pY3MuYWRkKHRoaXMuX2ludDMyVmlldywgQUNLX09GRlNFVCAvIDQsIDEpO1xuXHRcdEF0b21pY3Mubm90aWZ5KHRoaXMuX2ludDMyVmlldywgQUNLX09GRlNFVCAvIDQpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkYXRhLFxuXHRcdFx0ZmxhZ3MsXG5cdFx0XHRzZXFcblx0XHR9O1xuXHR9XG5cdGFzeW5jIHdhaXRBY2soZXhwZWN0ZWRTZXEpIHtcblx0XHRjb25zdCB0aW1lb3V0ID0gdGhpcy5fY29uZmlnLndhaXRUaW1lb3V0ID8/IDVlMztcblx0XHRjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG5cdFx0d2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcblx0XHRcdGNvbnN0IGFjayA9IEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0KTtcblx0XHRcdGlmIChhY2sgPj0gZXhwZWN0ZWRTZXEpIHJldHVybiB0cnVlO1xuXHRcdFx0aWYgKHRoaXMuX2NvbmZpZy51c2VBc3luY1dhaXQgJiYgXCJ3YWl0QXN5bmNcIiBpbiBBdG9taWNzKSBhd2FpdCBBdG9taWNzLndhaXRBc3luYyh0aGlzLl9pbnQzMlZpZXcsIEFDS19PRkZTRVQgLyA0LCBhY2ssIDEwMCkudmFsdWU7XG5cdFx0XHRlbHNlIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRnZXQgYnVmZmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zaGFyZWRCdWZmZXI7XG5cdH1cblx0Z2V0IGN1cnJlbnRTZXEoKSB7XG5cdFx0cmV0dXJuIEF0b21pY3MubG9hZCh0aGlzLl9pbnQzMlZpZXcsIFNFUV9PRkZTRVQgLyA0KTtcblx0fVxufTtcbnZhciBBdG9taWNzVHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9zZW5kQnVmZmVyO1xuXHRfcmVjdkJ1ZmZlcjtcblx0X2VuY29kZXIgPSBudWxsO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X3BvbGxpbmcgPSBmYWxzZTtcblx0X3BvbGxBYm9ydCA9IG51bGw7XG5cdF93b3JrZXJJZCA9IFVVSUR2NCgpO1xuXHRfbGFzdFNlcSA9IDA7XG5cdF9zdGF0ZSA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRjb25zdHJ1Y3RvcihfY2hhbm5lbE5hbWUsIHNlbmRCdWZmZXIsIHJlY3ZCdWZmZXIsIF9jb25maWcgPSB7fSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX2NvbmZpZyA9IF9jb25maWc7XG5cdFx0dGhpcy5fc2VuZEJ1ZmZlciA9IHNlbmRCdWZmZXIgaW5zdGFuY2VvZiBBdG9taWNzQnVmZmVyID8gc2VuZEJ1ZmZlciA6IG5ldyBBdG9taWNzQnVmZmVyKHNlbmRCdWZmZXIsIF9jb25maWcpO1xuXHRcdHRoaXMuX3JlY3ZCdWZmZXIgPSByZWN2QnVmZmVyIGluc3RhbmNlb2YgQXRvbWljc0J1ZmZlciA/IHJlY3ZCdWZmZXIgOiBuZXcgQXRvbWljc0J1ZmZlcihyZWN2QnVmZmVyLCBfY29uZmlnKTtcblx0XHR0aGlzLl9pbml0KCk7XG5cdH1cblx0YXN5bmMgX2luaXQoKSB7XG5cdFx0dGhpcy5fZW5jb2RlciA9IGF3YWl0IGdldENCT1JFbmNvZGVyKCk7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInJlYWR5XCIpO1xuXHR9XG5cdGFzeW5jIHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdGlmICghdGhpcy5fZW5jb2RlcikgYXdhaXQgdGhpcy5faW5pdCgpO1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0bGV0IGZsYWdzID0gMDtcblx0XHRpZiAodHJhbnNmZXI/Lmxlbmd0aCkge1xuXHRcdFx0ZmxhZ3MgfD0gRkxBR19IQVNfVFJBTlNGRVI7XG5cdFx0XHRkYXRhLl90cmFuc2Zlck1ldGEgPSB0cmFuc2Zlci5tYXAoKHQsIGkpID0+ICh7XG5cdFx0XHRcdGluZGV4OiBpLFxuXHRcdFx0XHR0eXBlOiB0LmNvbnN0cnVjdG9yLm5hbWUsXG5cdFx0XHRcdHRyYW5zZmVycmVkOiB0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgJiYgXCJ0cmFuc2ZlclwiIGluIHRcblx0XHRcdH0pKTtcblx0XHR9XG5cdFx0Y29uc3QgZW5jb2RlZCA9IHRoaXMuX2VuY29kZXIuZW5jb2RlKGRhdGEpO1xuXHRcdGlmICh0aGlzLl9jb25maWcuY29tcHJlc3Npb24gJiYgZW5jb2RlZC5sZW5ndGggPiAxMDI0KSBmbGFncyB8PSBGTEFHX0NPTVBSRVNTRUQ7XG5cdFx0YXdhaXQgdGhpcy5fc2VuZEJ1ZmZlci53cml0ZShlbmNvZGVkLCBmbGFncyk7XG5cdH1cblx0YXN5bmMgcmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy53YWl0VGltZW91dCA/PyAzZTQpO1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZTogKHYpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh2KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdHJlcUlkLFxuXHRcdFx0XHR0eXBlOiBcInJlcXVlc3RcIlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdGlmICghdGhpcy5fcG9sbGluZykgdGhpcy5fc3RhcnRQb2xsaW5nKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9zdG9wUG9sbGluZygpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0YXN5bmMgX3N0YXJ0UG9sbGluZygpIHtcblx0XHRpZiAodGhpcy5fcG9sbGluZykgcmV0dXJuO1xuXHRcdHRoaXMuX3BvbGxpbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3BvbGxBYm9ydCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwicG9sbGluZ1wiKTtcblx0XHR3aGlsZSAodGhpcy5fcG9sbGluZyAmJiAhdGhpcy5fcG9sbEFib3J0LnNpZ25hbC5hYm9ydGVkKSB0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fcmVjdkJ1ZmZlci5yZWFkKCk7XG5cdFx0XHRpZiAoIXJlc3VsdCkgY29udGludWU7XG5cdFx0XHRpZiAocmVzdWx0LnNlcSA8PSB0aGlzLl9sYXN0U2VxKSBjb250aW51ZTtcblx0XHRcdHRoaXMuX2xhc3RTZXEgPSByZXN1bHQuc2VxO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHRoaXMuX2VuY29kZXIuZGVjb2RlKHJlc3VsdC5kYXRhKTtcblx0XHRcdGRhdGEuc2VxID0gcmVzdWx0LnNlcTtcblx0XHRcdGRhdGEud29ya2VySWQgPSBkYXRhLndvcmtlcklkID8/IHRoaXMuX3dvcmtlcklkO1xuXHRcdFx0aWYgKHJlc3VsdC5mbGFncyAmIEZMQUdfUkVTUE9OU0UgfHwgZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIpIHtcblx0XHRcdFx0aWYgKGRhdGEucmVxSWQpIHtcblx0XHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRcdGVsc2UgcC5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0ID8/IGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oZSk7XG5cdFx0fVxuXHR9XG5cdF9zdG9wUG9sbGluZygpIHtcblx0XHR0aGlzLl9wb2xsaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5fcG9sbEFib3J0Py5hYm9ydCgpO1xuXHRcdHRoaXMuX3BvbGxBYm9ydCA9IG51bGw7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInN0b3BwZWRcIik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdHRoaXMuX3N0b3BQb2xsaW5nKCk7XG5cdH1cblx0Z2V0IHNlbmRCdWZmZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NlbmRCdWZmZXIuYnVmZmVyO1xuXHR9XG5cdGdldCByZWN2QnVmZmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZWN2QnVmZmVyLmJ1ZmZlcjtcblx0fVxuXHRnZXQgd29ya2VySWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dvcmtlcklkO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUF0b21pY3NDaGFubmVsUGFpcihjaGFubmVsTmFtZSwgY29uZmlnID0ge30pIHtcblx0Y29uc3QgYnVmZmVyU2l6ZSA9IGNvbmZpZy5idWZmZXJTaXplID8/IDY1NTM2O1xuXHRjb25zdCBidWZmZXJBID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKGJ1ZmZlclNpemUpO1xuXHRjb25zdCBidWZmZXJCID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKGJ1ZmZlclNpemUpO1xuXHRyZXR1cm4ge1xuXHRcdG1haW46IG5ldyBBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBidWZmZXJBLCBidWZmZXJCLCBjb25maWcpLFxuXHRcdHdvcmtlcjoge1xuXHRcdFx0c2VuZEJ1ZmZlcjogYnVmZmVyQixcblx0XHRcdHJlY3ZCdWZmZXI6IGJ1ZmZlckFcblx0XHR9XG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBzZW5kQnVmZmVyLCByZWN2QnVmZmVyLCBjb25maWcgPSB7fSkge1xuXHRyZXR1cm4gbmV3IEF0b21pY3NUcmFuc3BvcnQoY2hhbm5lbE5hbWUsIHNlbmRCdWZmZXIsIHJlY3ZCdWZmZXIsIGNvbmZpZyk7XG59XG52YXIgQXRvbWljc1JpbmdCdWZmZXIgPSBjbGFzcyBBdG9taWNzUmluZ0J1ZmZlciB7XG5cdF9idWZmZXI7XG5cdF9tZXRhO1xuXHRfZGF0YTtcblx0X3Nsb3RTaXplO1xuXHRfc2xvdENvdW50O1xuXHRfbWFzaztcblx0c3RhdGljIE1FVEFfU0laRSA9IDE2O1xuXHRzdGF0aWMgV1JJVEVfSURYID0gMDtcblx0c3RhdGljIFJFQURfSURYID0gNDtcblx0c3RhdGljIE9WRVJGTE9XID0gODtcblx0Y29uc3RydWN0b3IoYnVmZmVyT3JDb25maWcgPSB7fSkge1xuXHRcdGlmIChidWZmZXJPckNvbmZpZyBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSB7XG5cdFx0XHR0aGlzLl9idWZmZXIgPSBidWZmZXJPckNvbmZpZztcblx0XHRcdHRoaXMuX3Nsb3RDb3VudCA9IDY0O1xuXHRcdFx0dGhpcy5fc2xvdFNpemUgPSAodGhpcy5fYnVmZmVyLmJ5dGVMZW5ndGggLSBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUpIC8gdGhpcy5fc2xvdENvdW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9zbG90U2l6ZSA9IGJ1ZmZlck9yQ29uZmlnLnNsb3RTaXplID8/IDEwMjQ7XG5cdFx0XHR0aGlzLl9zbG90Q291bnQgPSBidWZmZXJPckNvbmZpZy5zbG90Q291bnQgPz8gNjQ7XG5cdFx0XHR0aGlzLl9zbG90Q291bnQgPSAxIDw8IE1hdGguY2VpbChNYXRoLmxvZzIodGhpcy5fc2xvdENvdW50KSk7XG5cdFx0XHRjb25zdCB0b3RhbFNpemUgPSBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgKyB0aGlzLl9zbG90U2l6ZSAqIHRoaXMuX3Nsb3RDb3VudDtcblx0XHRcdHRoaXMuX2J1ZmZlciA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0b3RhbFNpemUpO1xuXHRcdH1cblx0XHR0aGlzLl9tZXRhID0gbmV3IEludDMyQXJyYXkodGhpcy5fYnVmZmVyLCAwLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUgLyA0KTtcblx0XHR0aGlzLl9kYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fYnVmZmVyLCBBdG9taWNzUmluZ0J1ZmZlci5NRVRBX1NJWkUpO1xuXHRcdHRoaXMuX21hc2sgPSB0aGlzLl9zbG90Q291bnQgLSAxO1xuXHR9XG5cdHdyaXRlKGRhdGEpIHtcblx0XHRpZiAoZGF0YS5ieXRlTGVuZ3RoID4gdGhpcy5fc2xvdFNpemUgLSA0KSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3Qgd3JpdGVJZHggPSBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRjb25zdCByZWFkSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKTtcblx0XHRpZiAoKHdyaXRlSWR4ICsgMSAmIHRoaXMuX21hc2spID09PSAocmVhZElkeCAmIHRoaXMuX21hc2spKSB7XG5cdFx0XHRBdG9taWNzLmFkZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5PVkVSRkxPVywgMSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNsb3QgPSAod3JpdGVJZHggJiB0aGlzLl9tYXNrKSAqIHRoaXMuX3Nsb3RTaXplO1xuXHRcdG5ldyBEYXRhVmlldyh0aGlzLl9idWZmZXIsIEF0b21pY3NSaW5nQnVmZmVyLk1FVEFfU0laRSArIHNsb3QpLnNldFVpbnQzMigwLCBkYXRhLmJ5dGVMZW5ndGgsIHRydWUpO1xuXHRcdHRoaXMuX2RhdGEuc2V0KGRhdGEsIHNsb3QgKyA0KTtcblx0XHRBdG9taWNzLnN0b3JlKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLldSSVRFX0lEWCwgd3JpdGVJZHggKyAxKTtcblx0XHRBdG9taWNzLm5vdGlmeSh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJlYWQoKSB7XG5cdFx0Y29uc3Qgd3JpdGVJZHggPSBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYKTtcblx0XHRjb25zdCByZWFkSWR4ID0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKTtcblx0XHRpZiAocmVhZElkeCA9PT0gd3JpdGVJZHgpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IHNsb3QgPSAocmVhZElkeCAmIHRoaXMuX21hc2spICogdGhpcy5fc2xvdFNpemU7XG5cdFx0Y29uc3Qgc2l6ZSA9IG5ldyBEYXRhVmlldyh0aGlzLl9idWZmZXIsIEF0b21pY3NSaW5nQnVmZmVyLk1FVEFfU0laRSArIHNsb3QpLmdldFVpbnQzMigwLCB0cnVlKTtcblx0XHRpZiAoc2l6ZSA9PT0gMCB8fCBzaXplID4gdGhpcy5fc2xvdFNpemUgLSA0KSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG5cdFx0ZGF0YS5zZXQodGhpcy5fZGF0YS5zdWJhcnJheShzbG90ICsgNCwgc2xvdCArIDQgKyBzaXplKSk7XG5cdFx0QXRvbWljcy5zdG9yZSh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5SRUFEX0lEWCwgcmVhZElkeCArIDEpO1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cdGFzeW5jIHdhaXRSZWFkKHRpbWVvdXQpIHtcblx0XHRjb25zdCB3cml0ZUlkeCA9IEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgpO1xuXHRcdGlmIChBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuUkVBRF9JRFgpIDwgd3JpdGVJZHgpIHJldHVybiB0aGlzLnJlYWQoKTtcblx0XHRpZiAoXCJ3YWl0QXN5bmNcIiBpbiBBdG9taWNzKSB7XG5cdFx0XHRpZiAoYXdhaXQgQXRvbWljcy53YWl0QXN5bmModGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuV1JJVEVfSURYLCB3cml0ZUlkeCwgdGltZW91dCA/PyAxZTMpLnZhbHVlID09PSBcIm9rXCIpIHJldHVybiB0aGlzLnJlYWQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgTWF0aC5taW4odGltZW91dCA/PyAxZTMsIDEwMCkpKTtcblx0XHRcdHJldHVybiB0aGlzLnJlYWQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Z2V0IGJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHR9XG5cdGdldCBhdmFpbGFibGUoKSB7XG5cdFx0cmV0dXJuIEF0b21pY3MubG9hZCh0aGlzLl9tZXRhLCBBdG9taWNzUmluZ0J1ZmZlci5XUklURV9JRFgpIC0gQXRvbWljcy5sb2FkKHRoaXMuX21ldGEsIEF0b21pY3NSaW5nQnVmZmVyLlJFQURfSURYKSAmIHRoaXMuX21hc2s7XG5cdH1cblx0Z2V0IG92ZXJmbG93KCkge1xuXHRcdHJldHVybiBBdG9taWNzLmxvYWQodGhpcy5fbWV0YSwgQXRvbWljc1JpbmdCdWZmZXIuT1ZFUkZMT1cpO1xuXHR9XG59O1xudmFyIEF0b21pY3NUcmFuc3BvcnRGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpID0+IG5ldyBBdG9taWNzVHJhbnNwb3J0KG5hbWUsIHNlbmQsIHJlY3YsIGNvbmZpZyksXG5cdGNyZWF0ZVBhaXI6IChuYW1lLCBjb25maWcpID0+IGNyZWF0ZUF0b21pY3NDaGFubmVsUGFpcihuYW1lLCBjb25maWcpLFxuXHRjcmVhdGVCdWZmZXI6IChzaXplT3JCdWZmZXIsIGNvbmZpZykgPT4gbmV3IEF0b21pY3NCdWZmZXIoc2l6ZU9yQnVmZmVyLCBjb25maWcpLFxuXHRjcmVhdGVSaW5nQnVmZmVyOiAoY29uZmlnKSA9PiBuZXcgQXRvbWljc1JpbmdCdWZmZXIoY29uZmlnKSxcblx0Z2V0Q0JPUjogZ2V0Q0JPUkVuY29kZXJcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3RyYW5zcG9ydC9SVENEYXRhQ2hhbm5lbFRyYW5zcG9ydC50c1xudmFyIERFRkFVTFRfSUNFX1NFUlZFUlMgPSBbXG5cdHsgdXJsczogXCJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyXCIgfSxcblx0eyB1cmxzOiBcInN0dW46c3R1bjEubC5nb29nbGUuY29tOjE5MzAyXCIgfSxcblx0eyB1cmxzOiBcInN0dW46c3R1bjIubC5nb29nbGUuY29tOjE5MzAyXCIgfVxuXTtcbnZhciBSVENQZWVyVHJhbnNwb3J0ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9wYztcblx0X2NoYW5uZWwgPSBudWxsO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9wZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2xvY2FsSWQgPSBVVUlEdjQoKTtcblx0X3JlbW90ZUlkID0gbnVsbDtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jaGFubmVsU3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2ljZUNhbmRpZGF0ZXMgPSBbXTtcblx0X2ljZUdhdGhlcmluZ0NvbXBsZXRlID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0XHR0aGlzLl9wYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbih7IGljZVNlcnZlcnM6IF9jb25maWcuaWNlU2VydmVycyA/PyBERUZBVUxUX0lDRV9TRVJWRVJTIH0pO1xuXHRcdHRoaXMuX3NldHVwUGVlckNvbm5lY3Rpb24oKTtcblx0fVxuXHRfc2V0dXBQZWVyQ29ubmVjdGlvbigpIHtcblx0XHR0aGlzLl9wYy5vbmljZWNhbmRpZGF0ZSA9IChlKSA9PiB7XG5cdFx0XHRpZiAoZS5jYW5kaWRhdGUpIHtcblx0XHRcdFx0dGhpcy5faWNlQ2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlLnRvSlNPTigpKTtcblx0XHRcdFx0aWYgKHRoaXMuX3JlbW90ZUlkICYmIHRoaXMuX2NvbmZpZy5zaWduYWxpbmcpIHRoaXMuX2NvbmZpZy5zaWduYWxpbmcuc2VuZCh0aGlzLl9yZW1vdGVJZCwge1xuXHRcdFx0XHRcdHR5cGU6IFwiaWNlLWNhbmRpZGF0ZVwiLFxuXHRcdFx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHRcdFx0dG9QZWVySWQ6IHRoaXMuX3JlbW90ZUlkLFxuXHRcdFx0XHRcdGNhbmRpZGF0ZTogZS5jYW5kaWRhdGUudG9KU09OKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLl9wYy5vbmljZWdhdGhlcmluZ3N0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3BjLmljZUdhdGhlcmluZ1N0YXRlID09PSBcImNvbXBsZXRlXCIpIHRoaXMuX2ljZUdhdGhlcmluZ0NvbXBsZXRlID0gdHJ1ZTtcblx0XHR9O1xuXHRcdHRoaXMuX3BjLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fc3RhdGUubmV4dCh0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUpO1xuXHRcdFx0aWYgKHRoaXMuX3BjLmNvbm5lY3Rpb25TdGF0ZSA9PT0gXCJmYWlsZWRcIiB8fCB0aGlzLl9wYy5jb25uZWN0aW9uU3RhdGUgPT09IFwiZGlzY29ubmVjdGVkXCIpIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmVycm9yPy4oLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgQ29ubmVjdGlvbiAke3RoaXMuX3BjLmNvbm5lY3Rpb25TdGF0ZX1gKSk7XG5cdFx0fTtcblx0XHR0aGlzLl9wYy5vbmRhdGFjaGFubmVsID0gKGUpID0+IHtcblx0XHRcdHRoaXMuX3NldHVwRGF0YUNoYW5uZWwoZS5jaGFubmVsKTtcblx0XHR9O1xuXHR9XG5cdF9zZXR1cERhdGFDaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLl9jaGFubmVsID0gY2hhbm5lbDtcblx0XHRjaGFubmVsLmJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cdFx0Y2hhbm5lbC5vbm9wZW4gPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGFubmVsU3RhdGUubmV4dChcIm9wZW5cIik7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9uY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl9jaGFubmVsU3RhdGUubmV4dChcImNsb3NlZFwiKTtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSBzLmNvbXBsZXRlPy4oKTtcblx0XHR9O1xuXHRcdGNoYW5uZWwub25lcnJvciA9IChlKSA9PiB7XG5cdFx0XHRjb25zdCBlcnIgPSAvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiRGF0YUNoYW5uZWwgZXJyb3JcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3Vicykgcy5lcnJvcj8uKGVycik7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9ubWVzc2FnZSA9IChlKSA9PiB7XG5cdFx0XHRsZXQgZGF0YTtcblx0XHRcdGlmICh0eXBlb2YgZS5kYXRhID09PSBcInN0cmluZ1wiKSBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuXHRcdFx0ZWxzZSBkYXRhID0gdGhpcy5fZGVjb2RlQmluYXJ5KGUuZGF0YSk7XG5cdFx0XHRkYXRhLnBlZXJJZCA9IHRoaXMuX3JlbW90ZUlkID8/IHZvaWQgMDtcblx0XHRcdGRhdGEuZGF0YUNoYW5uZWxMYWJlbCA9IGNoYW5uZWwubGFiZWw7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzLmVycm9yPy4oZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRhc3luYyBjcmVhdGVPZmZlcihyZW1vdGVJZCkge1xuXHRcdHRoaXMuX3JlbW90ZUlkID0gcmVtb3RlSWQ7XG5cdFx0Y29uc3QgY2hhbm5lbCA9IHRoaXMuX3BjLmNyZWF0ZURhdGFDaGFubmVsKHRoaXMuX2NoYW5uZWxOYW1lLCB0aGlzLl9jb25maWcuZGF0YUNoYW5uZWxPcHRpb25zKTtcblx0XHR0aGlzLl9zZXR1cERhdGFDaGFubmVsKGNoYW5uZWwpO1xuXHRcdGNvbnN0IG9mZmVyID0gYXdhaXQgdGhpcy5fcGMuY3JlYXRlT2ZmZXIoKTtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJvZmZlclwiLFxuXHRcdFx0ZnJvbVBlZXJJZDogdGhpcy5fbG9jYWxJZCxcblx0XHRcdHRvUGVlcklkOiByZW1vdGVJZCxcblx0XHRcdHNkcDogb2ZmZXIuc2RwXG5cdFx0fTtcblx0fVxuXHRhc3luYyBoYW5kbGVPZmZlcihzaWduYWwpIHtcblx0XHR0aGlzLl9yZW1vdGVJZCA9IHNpZ25hbC5mcm9tUGVlcklkO1xuXHRcdGF3YWl0IHRoaXMuX3BjLnNldFJlbW90ZURlc2NyaXB0aW9uKHtcblx0XHRcdHR5cGU6IFwib2ZmZXJcIixcblx0XHRcdHNkcDogc2lnbmFsLnNkcFxuXHRcdH0pO1xuXHRcdGNvbnN0IGFuc3dlciA9IGF3YWl0IHRoaXMuX3BjLmNyZWF0ZUFuc3dlcigpO1xuXHRcdGF3YWl0IHRoaXMuX3BjLnNldExvY2FsRGVzY3JpcHRpb24oYW5zd2VyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJhbnN3ZXJcIixcblx0XHRcdGZyb21QZWVySWQ6IHRoaXMuX2xvY2FsSWQsXG5cdFx0XHR0b1BlZXJJZDogc2lnbmFsLmZyb21QZWVySWQsXG5cdFx0XHRzZHA6IGFuc3dlci5zZHBcblx0XHR9O1xuXHR9XG5cdGFzeW5jIGhhbmRsZUFuc3dlcihzaWduYWwpIHtcblx0XHRhd2FpdCB0aGlzLl9wYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7XG5cdFx0XHR0eXBlOiBcImFuc3dlclwiLFxuXHRcdFx0c2RwOiBzaWduYWwuc2RwXG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgYWRkSWNlQ2FuZGlkYXRlKHNpZ25hbCkge1xuXHRcdGlmIChzaWduYWwuY2FuZGlkYXRlKSBhd2FpdCB0aGlzLl9wYy5hZGRJY2VDYW5kaWRhdGUoc2lnbmFsLmNhbmRpZGF0ZSk7XG5cdH1cblx0c2VuZChtc2csIGJpbmFyeSkge1xuXHRcdGlmICghdGhpcy5fY2hhbm5lbCB8fCB0aGlzLl9jaGFubmVsLnJlYWR5U3RhdGUgIT09IFwib3BlblwiKSByZXR1cm47XG5cdFx0Y29uc3QgeyB0cmFuc2ZlcmFibGUsIHBlZXJJZCwgZGF0YUNoYW5uZWxMYWJlbCwgLi4uZGF0YSB9ID0gbXNnO1xuXHRcdGlmIChiaW5hcnkgfHwgbXNnLmJpbmFyeSkgdGhpcy5fY2hhbm5lbC5zZW5kKHRoaXMuX2VuY29kZUJpbmFyeShkYXRhKSk7XG5cdFx0ZWxzZSB0aGlzLl9jaGFubmVsLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHR9XG5cdHJlcXVlc3QobXNnKSB7XG5cdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUocmVxSWQpO1xuXHRcdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlJlcXVlc3QgdGltZW91dFwiKSk7XG5cdFx0XHR9LCB0aGlzLl9jb25maWcuY29ubmVjdGlvblRpbWVvdXQgPz8gM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfZW5jb2RlQmluYXJ5KGRhdGEpIHtcblx0XHRjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdFx0cmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShqc29uKS5idWZmZXI7XG5cdH1cblx0X2RlY29kZUJpbmFyeShidWZmZXIpIHtcblx0XHRjb25zdCBqc29uID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ1ZmZlcik7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoanNvbik7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSk7XG5cdFx0dGhpcy5fc3Vicy5jbGVhcigpO1xuXHRcdGlmICh0aGlzLl9yZW1vdGVJZCAmJiB0aGlzLl9jb25maWcuc2lnbmFsaW5nKSB0aGlzLl9jb25maWcuc2lnbmFsaW5nLnNlbmQodGhpcy5fcmVtb3RlSWQsIHtcblx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdFwiLFxuXHRcdFx0ZnJvbVBlZXJJZDogdGhpcy5fbG9jYWxJZCxcblx0XHRcdHRvUGVlcklkOiB0aGlzLl9yZW1vdGVJZFxuXHRcdH0pO1xuXHRcdHRoaXMuX2NoYW5uZWw/LmNsb3NlKCk7XG5cdFx0dGhpcy5fcGMuY2xvc2UoKTtcblx0fVxuXHRnZXQgbG9jYWxJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxJZDtcblx0fVxuXHRnZXQgcmVtb3RlSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlbW90ZUlkO1xuXHR9XG5cdGdldCBjb25uZWN0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BjLmNvbm5lY3Rpb25TdGF0ZTtcblx0fVxuXHRnZXQgY2hhbm5lbFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsPy5yZWFkeVN0YXRlID8/IG51bGw7XG5cdH1cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZTtcblx0fVxuXHRnZXQgY2hhbm5lbFN0YXRlT2JzZXJ2YWJsZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbFN0YXRlO1xuXHR9XG5cdGdldCBpY2VDYW5kaWRhdGVzKCkge1xuXHRcdHJldHVybiBbLi4udGhpcy5faWNlQ2FuZGlkYXRlc107XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxufTtcbnZhciBSVENQZWVyTWFuYWdlciA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfY29uZmlnO1xuXHRfcGVlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfbG9jYWxJZCA9IFVVSUR2NCgpO1xuXHRfc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdF9zaWduYWxpbmdDbGVhbnVwID0gbnVsbDtcblx0X3BlZXJFdmVudHMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0Y29uc3RydWN0b3IoX2NoYW5uZWxOYW1lLCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdHRoaXMuX3NldHVwU2lnbmFsaW5nKCk7XG5cdH1cblx0X3NldHVwU2lnbmFsaW5nKCkge1xuXHRcdGlmICghdGhpcy5fY29uZmlnLnNpZ25hbGluZykgcmV0dXJuO1xuXHRcdGNvbnN0IGNsZWFudXAgPSB0aGlzLl9jb25maWcuc2lnbmFsaW5nLm9uTWVzc2FnZShhc3luYyAoc2lnbmFsKSA9PiB7XG5cdFx0XHRpZiAoc2lnbmFsLnRvUGVlcklkICE9PSB0aGlzLl9sb2NhbElkKSByZXR1cm47XG5cdFx0XHRzd2l0Y2ggKHNpZ25hbC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJvZmZlclwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5zd2VyID0gYXdhaXQgdGhpcy5fZ2V0T3JDcmVhdGVQZWVyKHNpZ25hbC5mcm9tUGVlcklkKS5oYW5kbGVPZmZlcihzaWduYWwpO1xuXHRcdFx0XHRcdHRoaXMuX2NvbmZpZy5zaWduYWxpbmcuc2VuZChzaWduYWwuZnJvbVBlZXJJZCwgYW5zd2VyKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFwiYW5zd2VyXCI6IHtcblx0XHRcdFx0XHRjb25zdCBwZWVyID0gdGhpcy5fcGVlcnMuZ2V0KHNpZ25hbC5mcm9tUGVlcklkKTtcblx0XHRcdFx0XHRpZiAocGVlcikgYXdhaXQgcGVlci5oYW5kbGVBbnN3ZXIoc2lnbmFsKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFwiaWNlLWNhbmRpZGF0ZVwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgcGVlciA9IHRoaXMuX3BlZXJzLmdldChzaWduYWwuZnJvbVBlZXJJZCk7XG5cdFx0XHRcdFx0aWYgKHBlZXIpIGF3YWl0IHBlZXIuYWRkSWNlQ2FuZGlkYXRlKHNpZ25hbCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImRpc2Nvbm5lY3RcIjogdGhpcy5fcmVtb3ZlUGVlcihzaWduYWwuZnJvbVBlZXJJZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKHR5cGVvZiBjbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuX3NpZ25hbGluZ0NsZWFudXAgPSBjbGVhbnVwO1xuXHRcdGVsc2UgaWYgKGNsZWFudXAgJiYgXCJ1bnN1YnNjcmliZVwiIGluIGNsZWFudXApIHRoaXMuX3NpZ25hbGluZ0NsZWFudXAgPSAoKSA9PiBjbGVhbnVwLnVuc3Vic2NyaWJlKCk7XG5cdH1cblx0X2dldE9yQ3JlYXRlUGVlcihwZWVySWQpIHtcblx0XHRsZXQgcGVlciA9IHRoaXMuX3BlZXJzLmdldChwZWVySWQpO1xuXHRcdGlmICghcGVlcikge1xuXHRcdFx0cGVlciA9IG5ldyBSVENQZWVyVHJhbnNwb3J0KHRoaXMuX2NoYW5uZWxOYW1lLCB0aGlzLl9jb25maWcpO1xuXHRcdFx0dGhpcy5fcGVlcnMuc2V0KHBlZXJJZCwgcGVlcik7XG5cdFx0XHRwZWVyLnN0YXRlLnN1YnNjcmliZSh7IG5leHQ6IChzdGF0ZSkgPT4ge1xuXHRcdFx0XHRpZiAoc3RhdGUgPT09IFwiY29ubmVjdGVkXCIpIHRoaXMuX3BlZXJFdmVudHMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJjb25uZWN0ZWRcIixcblx0XHRcdFx0XHRwZWVySWQsXG5cdFx0XHRcdFx0cGVlclxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZWxzZSBpZiAoc3RhdGUgPT09IFwiZGlzY29ubmVjdGVkXCIgfHwgc3RhdGUgPT09IFwiY2xvc2VkXCIpIHRoaXMuX3BlZXJFdmVudHMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJkaXNjb25uZWN0ZWRcIixcblx0XHRcdFx0XHRwZWVySWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSBcImZhaWxlZFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGVlckV2ZW50cy5uZXh0KHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiZmFpbGVkXCIsXG5cdFx0XHRcdFx0XHRwZWVySWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLl9yZW1vdmVQZWVyKHBlZXJJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gfSk7XG5cdFx0XHRwZWVyLnN1YnNjcmliZSh7XG5cdFx0XHRcdG5leHQ6IChtc2cpID0+IHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3I6IChlKSA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBwZWVyO1xuXHR9XG5cdF9yZW1vdmVQZWVyKHBlZXJJZCkge1xuXHRcdGNvbnN0IHBlZXIgPSB0aGlzLl9wZWVycy5nZXQocGVlcklkKTtcblx0XHRpZiAocGVlcikge1xuXHRcdFx0cGVlci5jbG9zZSgpO1xuXHRcdFx0dGhpcy5fcGVlcnMuZGVsZXRlKHBlZXJJZCk7XG5cdFx0XHR0aGlzLl9wZWVyRXZlbnRzLm5leHQoe1xuXHRcdFx0XHR0eXBlOiBcImRpc2Nvbm5lY3RlZFwiLFxuXHRcdFx0XHRwZWVySWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRhc3luYyBjb25uZWN0KHBlZXJJZCkge1xuXHRcdGNvbnN0IHBlZXIgPSB0aGlzLl9nZXRPckNyZWF0ZVBlZXIocGVlcklkKTtcblx0XHRjb25zdCBvZmZlciA9IGF3YWl0IHBlZXIuY3JlYXRlT2ZmZXIocGVlcklkKTtcblx0XHRpZiAodGhpcy5fY29uZmlnLnNpZ25hbGluZykgYXdhaXQgdGhpcy5fY29uZmlnLnNpZ25hbGluZy5zZW5kKHBlZXJJZCwgb2ZmZXIpO1xuXHRcdHJldHVybiBwZWVyO1xuXHR9XG5cdHNlbmQocGVlcklkLCBtc2cpIHtcblx0XHR0aGlzLl9wZWVycy5nZXQocGVlcklkKT8uc2VuZChtc2cpO1xuXHR9XG5cdGJyb2FkY2FzdChtc2cpIHtcblx0XHRmb3IgKGNvbnN0IHBlZXIgb2YgdGhpcy5fcGVlcnMudmFsdWVzKCkpIHBlZXIuc2VuZChtc2cpO1xuXHR9XG5cdHJlcXVlc3QocGVlcklkLCBtc2cpIHtcblx0XHRjb25zdCBwZWVyID0gdGhpcy5fcGVlcnMuZ2V0KHBlZXJJZCk7XG5cdFx0aWYgKCFwZWVyKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlBlZXIgbm90IGZvdW5kXCIpKTtcblx0XHRyZXR1cm4gcGVlci5yZXF1ZXN0KG1zZyk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0Y29uc3Qgb2JzID0gdHlwZW9mIG9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIgPyB7IG5leHQ6IG9ic2VydmVyIH0gOiBvYnNlcnZlcjtcblx0XHR0aGlzLl9zdWJzLmFkZChvYnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbG9zZWQ6IGZhbHNlLFxuXHRcdFx0dW5zdWJzY3JpYmU6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fc3Vicy5kZWxldGUob2JzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdG9uUGVlckV2ZW50KGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fcGVlckV2ZW50cy5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVyIH0pO1xuXHR9XG5cdGdldFBlZXJzKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBbaWQsIHBlZXJdIG9mIHRoaXMuX3BlZXJzKSByZXN1bHQuc2V0KGlkLCB7XG5cdFx0XHRpZCxcblx0XHRcdGNvbm5lY3Rpb25TdGF0ZTogcGVlci5jb25uZWN0aW9uU3RhdGUsXG5cdFx0XHRpY2VDb25uZWN0aW9uU3RhdGU6IFwibmV3XCIsXG5cdFx0XHRkYXRhQ2hhbm5lbFN0YXRlOiBwZWVyLmNoYW5uZWxTdGF0ZSA/PyBcImNsb3NlZFwiXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zaWduYWxpbmdDbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBwZWVyIG9mIHRoaXMuX3BlZXJzLnZhbHVlcygpKSBwZWVyLmNsb3NlKCk7XG5cdFx0dGhpcy5fcGVlcnMuY2xlYXIoKTtcblx0fVxuXHRnZXQgbG9jYWxJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxJZDtcblx0fVxuXHRnZXQgcGVlckNvdW50KCkge1xuXHRcdHJldHVybiB0aGlzLl9wZWVycy5zaXplO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cbn07XG5mdW5jdGlvbiBjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmcoY2hhbm5lbE5hbWUpIHtcblx0Y29uc3QgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChgcnRjLXNpZ25hbGluZzoke2NoYW5uZWxOYW1lfWApO1xuXHRjb25zdCBoYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGJjLm9ubWVzc2FnZSA9IChlKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBoIG9mIGhhbmRsZXJzKSBoKGUuZGF0YSk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0c2VuZChwZWVySWQsIG1lc3NhZ2UpIHtcblx0XHRcdGJjLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdH0sXG5cdFx0b25NZXNzYWdlKGhhbmRsZXIpIHtcblx0XHRcdGhhbmRsZXJzLmFkZChoYW5kbGVyKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiBoYW5kbGVycy5kZWxldGUoaGFuZGxlciksXG5cdFx0XHRcdGNsb3NlZDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSxcblx0XHRjbG9zZSgpIHtcblx0XHRcdGJjLmNsb3NlKCk7XG5cdFx0XHRoYW5kbGVycy5jbGVhcigpO1xuXHRcdH1cblx0fTtcbn1cbnZhciBSVENUcmFuc3BvcnRGYWN0b3J5ID0ge1xuXHRjcmVhdGVQZWVyOiAobmFtZSwgY29uZmlnKSA9PiBuZXcgUlRDUGVlclRyYW5zcG9ydChuYW1lLCBjb25maWcpLFxuXHRjcmVhdGVNYW5hZ2VyOiAobmFtZSwgY29uZmlnKSA9PiBuZXcgUlRDUGVlck1hbmFnZXIobmFtZSwgY29uZmlnKSxcblx0Y3JlYXRlU2lnbmFsaW5nOiAobmFtZSkgPT4gY3JlYXRlQnJvYWRjYXN0U2lnbmFsaW5nKG5hbWUpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvUG9ydFRyYW5zcG9ydC50c1xudmFyIFBvcnRUcmFuc3BvcnQgPSBjbGFzcyB7XG5cdF9jaGFubmVsTmFtZTtcblx0X2NvbmZpZztcblx0X3BvcnQ7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfbGlzdGVuaW5nID0gZmFsc2U7XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0X3BvcnRJZCA9IFVVSUR2NCgpO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2tlZXBBbGl2ZVRpbWVyID0gbnVsbDtcblx0Y29uc3RydWN0b3IocG9ydCwgX2NoYW5uZWxOYW1lLCBfY29uZmlnID0ge30pIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHRcdHRoaXMuX3BvcnQgPSBwb3J0O1xuXHRcdHRoaXMuX3NldHVwUG9ydCgpO1xuXHRcdGlmIChfY29uZmlnLmF1dG9TdGFydCAhPT0gZmFsc2UpIHRoaXMuc3RhcnQoKTtcblx0fVxuXHRfc2V0dXBQb3J0KCkge1xuXHRcdGNvbnN0IG1zZ0hhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGUuZGF0YTtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdFx0aWYgKHApIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShkYXRhLnJlcUlkKTtcblx0XHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcC5yZWplY3QobmV3IEVycm9yKGRhdGEucGF5bG9hZC5lcnJvcikpO1xuXHRcdFx0XHRcdGVsc2UgcC5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0ID8/IGRhdGEucGF5bG9hZCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInNpZ25hbFwiICYmIGRhdGEucGF5bG9hZD8uYWN0aW9uID09PSBcInBpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNlbmQoe1xuXHRcdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0XHRzZW5kZXI6IHRoaXMuX3BvcnRJZCxcblx0XHRcdFx0XHR0eXBlOiBcInNpZ25hbFwiLFxuXHRcdFx0XHRcdHBheWxvYWQ6IHsgYWN0aW9uOiBcInBvbmdcIiB9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRkYXRhLnBvcnRJZCA9IGRhdGEucG9ydElkID8/IHRoaXMuX3BvcnRJZDtcblx0XHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0XHRzLm5leHQ/LihkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZXJySGFuZGxlciA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdGNvbnN0IGVyciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJQb3J0IGVycm9yXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHMuZXJyb3I/LihlcnIpO1xuXHRcdH07XG5cdFx0dGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHR0aGlzLl9wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0dGhpcy5fY2xlYW51cCA9ICgpID0+IHtcblx0XHRcdHRoaXMuX3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbXNnSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgZXJySGFuZGxlcik7XG5cdFx0fTtcblx0fVxuXHRzdGFydCgpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuaW5nKSByZXR1cm47XG5cdFx0dGhpcy5fcG9ydC5zdGFydCgpO1xuXHRcdHRoaXMuX2xpc3RlbmluZyA9IHRydWU7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcInJlYWR5XCIpO1xuXHRcdGlmICh0aGlzLl9jb25maWcua2VlcEFsaXZlKSB0aGlzLl9zdGFydEtlZXBBbGl2ZSgpO1xuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdGNvbnN0IHsgdHJhbnNmZXJhYmxlLCAuLi5kYXRhIH0gPSBtc2c7XG5cdFx0dGhpcy5fcG9ydC5wb3N0TWVzc2FnZSh7XG5cdFx0XHQuLi5kYXRhLFxuXHRcdFx0cG9ydElkOiB0aGlzLl9wb3J0SWRcblx0XHR9LCB0cmFuc2ZlciA/PyBbXSk7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy50aW1lb3V0ID8/IDNlNCk7XG5cdFx0XHR0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRyZXNvbHZlOiAodikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWplY3Q6IChlKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2VuZCh7XG5cdFx0XHRcdC4uLm1zZyxcblx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0X3N0YXJ0S2VlcEFsaXZlKCkge1xuXHRcdHRoaXMuX2tlZXBBbGl2ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdFx0c2VuZGVyOiB0aGlzLl9wb3J0SWQsXG5cdFx0XHRcdHR5cGU6IFwic2lnbmFsXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHsgYWN0aW9uOiBcInBpbmdcIiB9XG5cdFx0XHR9KTtcblx0XHR9LCB0aGlzLl9jb25maWcua2VlcEFsaXZlSW50ZXJ2YWwgPz8gM2U0KTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHRpZiAodGhpcy5fa2VlcEFsaXZlVGltZXIpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fa2VlcEFsaXZlVGltZXIpO1xuXHRcdFx0dGhpcy5fa2VlcEFsaXZlVGltZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fcG9ydC5jbG9zZSgpO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJjbG9zZWRcIik7XG5cdH1cblx0Z2V0IHBvcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnQ7XG5cdH1cblx0Z2V0IHBvcnRJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydElkO1xuXHR9XG5cdGdldCBpc0xpc3RlbmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5fbGlzdGVuaW5nO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5uZWxOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVsTmFtZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNoYW5uZWxQYWlyKGNoYW5uZWxOYW1lLCBjb25maWcpIHtcblx0Y29uc3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuXHRyZXR1cm4ge1xuXHRcdGxvY2FsOiBuZXcgUG9ydFRyYW5zcG9ydChjaGFubmVsLnBvcnQxLCBjaGFubmVsTmFtZSwgY29uZmlnKSxcblx0XHRyZW1vdGU6IGNoYW5uZWwucG9ydDIsXG5cdFx0dHJhbnNmZXI6ICgpID0+IHtcblx0XHRcdHJldHVybiBjaGFubmVsLnBvcnQyO1xuXHRcdH1cblx0fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZyb21Qb3J0KHBvcnQsIGNoYW5uZWxOYW1lLCBjb25maWcpIHtcblx0cmV0dXJuIG5ldyBQb3J0VHJhbnNwb3J0KHBvcnQsIGNoYW5uZWxOYW1lLCBjb25maWcpO1xufVxudmFyIFBvcnRQb29sID0gY2xhc3Mge1xuXHRfZGVmYXVsdENvbmZpZztcblx0X2NoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X21haW5Qb3J0ID0gbnVsbDtcblx0X3N1YnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdHJ1Y3RvcihfZGVmYXVsdENvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fZGVmYXVsdENvbmZpZyA9IF9kZWZhdWx0Q29uZmlnO1xuXHR9XG5cdGNyZWF0ZShjaGFubmVsTmFtZSwgY29uZmlnKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY3JlYXRlQ2hhbm5lbFBhaXIoY2hhbm5lbE5hbWUsIHtcblx0XHRcdC4uLnRoaXMuX2RlZmF1bHRDb25maWcsXG5cdFx0XHQuLi5jb25maWdcblx0XHR9KTtcblx0XHRyZXN1bHQubG9jYWwuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9IH0pO1xuXHRcdHRoaXMuX2NoYW5uZWxzLnNldChjaGFubmVsTmFtZSwgcmVzdWx0LmxvY2FsKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGFkZChjaGFubmVsTmFtZSwgcG9ydCwgY29uZmlnKSB7XG5cdFx0Y29uc3QgdHJhbnNwb3J0ID0gbmV3IFBvcnRUcmFuc3BvcnQocG9ydCwgY2hhbm5lbE5hbWUsIHtcblx0XHRcdC4uLnRoaXMuX2RlZmF1bHRDb25maWcsXG5cdFx0XHQuLi5jb25maWdcblx0XHR9KTtcblx0XHR0cmFuc3BvcnQuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3N1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKG1zZyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9IH0pO1xuXHRcdHRoaXMuX2NoYW5uZWxzLnNldChjaGFubmVsTmFtZSwgdHJhbnNwb3J0KTtcblx0XHRyZXR1cm4gdHJhbnNwb3J0O1xuXHR9XG5cdGdldChjaGFubmVsTmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuXHR9XG5cdHNlbmQoY2hhbm5lbE5hbWUsIG1zZywgdHJhbnNmZXIpIHtcblx0XHR0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpPy5zZW5kKG1zZywgdHJhbnNmZXIpO1xuXHR9XG5cdGJyb2FkY2FzdChtc2csIHRyYW5zZmVyKSB7XG5cdFx0Zm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdGhpcy5fY2hhbm5lbHMudmFsdWVzKCkpIHRyYW5zcG9ydC5zZW5kKG1zZywgdHJhbnNmZXIpO1xuXHR9XG5cdHJlcXVlc3QoY2hhbm5lbE5hbWUsIG1zZykge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLl9jaGFubmVscy5nZXQoY2hhbm5lbE5hbWUpO1xuXHRcdGlmICghY2hhbm5lbCkgcmV0dXJuIFByb21pc2UucmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENoYW5uZWwgJHtjaGFubmVsTmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdHJldHVybiBjaGFubmVsLnJlcXVlc3QobXNnKTtcblx0fVxuXHRzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBvYnMgPSB0eXBlb2Ygb2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IHsgbmV4dDogb2JzZXJ2ZXIgfSA6IG9ic2VydmVyO1xuXHRcdHRoaXMuX3N1YnMuYWRkKG9icyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsb3NlZDogZmFsc2UsXG5cdFx0XHR1bnN1YnNjcmliZTogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0cmVtb3ZlKGNoYW5uZWxOYW1lKSB7XG5cdFx0Y29uc3QgY2hhbm5lbCA9IHRoaXMuX2NoYW5uZWxzLmdldChjaGFubmVsTmFtZSk7XG5cdFx0aWYgKGNoYW5uZWwpIHtcblx0XHRcdGNoYW5uZWwuY2xvc2UoKTtcblx0XHRcdHRoaXMuX2NoYW5uZWxzLmRlbGV0ZShjaGFubmVsTmFtZSk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlKCkge1xuXHRcdHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4gcy5jb21wbGV0ZT8uKCkpO1xuXHRcdHRoaXMuX3N1YnMuY2xlYXIoKTtcblx0XHRmb3IgKGNvbnN0IGNoYW5uZWwgb2YgdGhpcy5fY2hhbm5lbHMudmFsdWVzKCkpIGNoYW5uZWwuY2xvc2UoKTtcblx0XHR0aGlzLl9jaGFubmVscy5jbGVhcigpO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZXMoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy5fY2hhbm5lbHMua2V5cygpKTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbHMuc2l6ZTtcblx0fVxufTtcbnZhciBXaW5kb3dQb3J0Q29ubmVjdG9yID0gY2xhc3Mge1xuXHRfdGFyZ2V0O1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF90cmFuc3BvcnQgPSBudWxsO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X2hhbmRzaGFrZUNvbXBsZXRlID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQsIF9jaGFubmVsTmFtZSwgX2NvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl9jb25maWcgPSBfY29uZmlnO1xuXHR9XG5cdGFzeW5jIGNvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuX3RyYW5zcG9ydCAmJiB0aGlzLl9oYW5kc2hha2VDb21wbGV0ZSkgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGluZ1wiKTtcblx0XHRjb25zdCB7IGxvY2FsLCByZW1vdGUgfSA9IGNyZWF0ZUNoYW5uZWxQYWlyKHRoaXMuX2NoYW5uZWxOYW1lLCB0aGlzLl9jb25maWcpO1xuXHRcdHRoaXMuX3RhcmdldC5wb3N0TWVzc2FnZSh7XG5cdFx0XHR0eXBlOiBcInBvcnQtY29ubmVjdFwiLFxuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cG9ydElkOiBsb2NhbC5wb3J0SWRcblx0XHR9LCB0aGlzLl9jb25maWcudGFyZ2V0T3JpZ2luID8/IFwiKlwiLCBbcmVtb3RlXSk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJIYW5kc2hha2UgdGltZW91dFwiKSk7XG5cdFx0XHRcdHRoaXMuX3N0YXRlLm5leHQoXCJlcnJvclwiKTtcblx0XHRcdH0sIHRoaXMuX2NvbmZpZy5oYW5kc2hha2VUaW1lb3V0ID8/IDFlNCk7XG5cdFx0XHRjb25zdCBzdWIgPSBsb2NhbC5zdWJzY3JpYmUoeyBuZXh0OiAobXNnKSA9PiB7XG5cdFx0XHRcdGlmIChtc2cudHlwZSA9PT0gXCJzaWduYWxcIiAmJiBtc2cucGF5bG9hZD8uYWN0aW9uID09PSBcImhhbmRzaGFrZS1hY2tcIikge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHR0aGlzLl9oYW5kc2hha2VDb21wbGV0ZSA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fdHJhbnNwb3J0ID0gbG9jYWw7XG5cdFx0XHRcdFx0dGhpcy5fc3RhdGUubmV4dChcImNvbm5lY3RlZFwiKTtcblx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRyZXNvbHZlKGxvY2FsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSB9KTtcblx0XHR9KTtcblx0fVxuXHRzdGF0aWMgbGlzdGVuKGNoYW5uZWxOYW1lLCBoYW5kbGVyLCBjb25maWcpIHtcblx0XHRjb25zdCBtc2dIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdGlmIChlLmRhdGE/LnR5cGUgIT09IFwicG9ydC1jb25uZWN0XCIgfHwgZS5kYXRhPy5jaGFubmVsTmFtZSAhPT0gY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRcdGlmICghZS5wb3J0c1swXSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgdHJhbnNwb3J0ID0gbmV3IFBvcnRUcmFuc3BvcnQoZS5wb3J0c1swXSwgY2hhbm5lbE5hbWUsIGNvbmZpZyk7XG5cdFx0XHR0cmFuc3BvcnQuc2VuZCh7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0Y2hhbm5lbDogY2hhbm5lbE5hbWUsXG5cdFx0XHRcdHNlbmRlcjogdHJhbnNwb3J0LnBvcnRJZCxcblx0XHRcdFx0dHlwZTogXCJzaWduYWxcIixcblx0XHRcdFx0cGF5bG9hZDogeyBhY3Rpb246IFwiaGFuZHNoYWtlLWFja1wiIH1cblx0XHRcdH0pO1xuXHRcdFx0aGFuZGxlcih0cmFuc3BvcnQpO1xuXHRcdH07XG5cdFx0Z2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0XHRyZXR1cm4gKCkgPT4gZ2xvYmFsVGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtc2dIYW5kbGVyKTtcblx0fVxuXHRkaXNjb25uZWN0KCkge1xuXHRcdHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKTtcblx0XHR0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXHRcdHRoaXMuX2hhbmRzaGFrZUNvbXBsZXRlID0gZmFsc2U7XG5cdFx0dGhpcy5fc3RhdGUubmV4dChcImRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXHRnZXQgaXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hhbmRzaGFrZUNvbXBsZXRlO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IHRyYW5zcG9ydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNwb3J0O1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlUG9ydFByb3h5KHRyYW5zcG9ydCwgdGFyZ2V0UGF0aCA9IFtdKSB7XG5cdHJldHVybiBjcmVhdGVTZW5kZXJQcm94eSh7XG5cdFx0cmVxdWVzdDogKG1zZykgPT4gdHJhbnNwb3J0LnJlcXVlc3QobXNnKSxcblx0XHRjaGFubmVsTmFtZTogdHJhbnNwb3J0LmNoYW5uZWxOYW1lLFxuXHRcdHNlbmRlcklkOiB0cmFuc3BvcnQucG9ydElkXG5cdH0sIHRhcmdldFBhdGgpO1xufVxuZnVuY3Rpb24gZXhwb3NlT3ZlclBvcnQodHJhbnNwb3J0LCB0YXJnZXQpIHtcblx0Y29uc3QgaGFuZGxlciA9IGNyZWF0ZUV4cG9zZUhhbmRsZXIodGFyZ2V0KTtcblx0cmV0dXJuIHRyYW5zcG9ydC5zdWJzY3JpYmUoeyBuZXh0OiBhc3luYyAobXNnKSA9PiB7XG5cdFx0aWYgKG1zZy50eXBlICE9PSBcInJlcXVlc3RcIiB8fCAhbXNnLnBheWxvYWQ/LnBhdGgpIHJldHVybjtcblx0XHRjb25zdCB7IGFjdGlvbiwgcGF0aCwgYXJncyB9ID0gbXNnLnBheWxvYWQ7XG5cdFx0bGV0IHJlc3VsdDtcblx0XHRsZXQgZXJyb3I7XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYWN0aW9uLCBwYXRoLCBhcmdzID8/IFtdKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRlcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcblx0XHR9XG5cdFx0dHJhbnNwb3J0LnNlbmQoe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogbXNnLnNlbmRlcixcblx0XHRcdHNlbmRlcjogdHJhbnNwb3J0LnBvcnRJZCxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBtc2cucmVxSWQsXG5cdFx0XHRwYXlsb2FkOiBlcnJvciA/IHsgZXJyb3IgfSA6IHsgcmVzdWx0IH1cblx0XHR9KTtcblx0fSB9KTtcbn1cbnZhciBQb3J0VHJhbnNwb3J0RmFjdG9yeSA9IHtcblx0Y3JlYXRlOiAocG9ydCwgbmFtZSwgY29uZmlnKSA9PiBuZXcgUG9ydFRyYW5zcG9ydChwb3J0LCBuYW1lLCBjb25maWcpLFxuXHRjcmVhdGVQYWlyOiAobmFtZSwgY29uZmlnKSA9PiBjcmVhdGVDaGFubmVsUGFpcihuYW1lLCBjb25maWcpLFxuXHRjcmVhdGVQb29sOiAoY29uZmlnKSA9PiBuZXcgUG9ydFBvb2woY29uZmlnKSxcblx0Y3JlYXRlV2luZG93Q29ubmVjdG9yOiAodGFyZ2V0LCBuYW1lLCBjb25maWcpID0+IG5ldyBXaW5kb3dQb3J0Q29ubmVjdG9yKHRhcmdldCwgbmFtZSwgY29uZmlnKSxcblx0bGlzdGVuOiBXaW5kb3dQb3J0Q29ubmVjdG9yLmxpc3Rlbixcblx0Y3JlYXRlUHJveHk6IGNyZWF0ZVBvcnRQcm94eSxcblx0ZXhwb3NlOiBleHBvc2VPdmVyUG9ydFxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvc3RvcmFnZS9UcmFuc2ZlcmFibGVTdG9yYWdlLnRzXG52YXIgVHJhbnNmZXJhYmxlU3RvcmFnZSA9IGNsYXNzIHtcblx0X2RiID0gbnVsbDtcblx0X2NvbmZpZztcblx0X2NoYW5nZXMgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X3N0YXRlID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdF9jbGVhbnVwVGltZXIgPSBudWxsO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb25maWcgPSB7XG5cdFx0XHRzdG9yZU5hbWU6IFwidHJhbnNmZXJhYmxlXCIsXG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0aW5kZXhlczogW10sXG5cdFx0XHRlbmFibGVDaGFuZ2VUcmFja2luZzogdHJ1ZSxcblx0XHRcdGF1dG9DbGVhbnVwRXhwaXJlZDogdHJ1ZSxcblx0XHRcdGNsZWFudXBJbnRlcnZhbDogNmU0LFxuXHRcdFx0Li4uY29uZmlnXG5cdFx0fTtcblx0fVxuXHRhc3luYyBvcGVuKCkge1xuXHRcdGlmICh0aGlzLl9kYikgcmV0dXJuO1xuXHRcdHRoaXMuX3N0YXRlLm5leHQoXCJvcGVuaW5nXCIpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4odGhpcy5fY29uZmlnLmRiTmFtZSwgdGhpcy5fY29uZmlnLnZlcnNpb24pO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZXJyb3JcIik7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZTogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5fZGIgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0dGhpcy5fc3RhdGUubmV4dChcIm9wZW5cIik7XG5cdFx0XHRcdGlmICh0aGlzLl9jb25maWcuYXV0b0NsZWFudXBFeHBpcmVkKSB0aGlzLl9zdGFydENsZWFudXBUaW1lcigpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXHRcdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy5fY29uZmlnLnN0b3JlTmFtZSkpIHtcblx0XHRcdFx0XHRjb25zdCBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIHsga2V5UGF0aDogXCJpZFwiIH0pO1xuXHRcdFx0XHRcdHN0b3JlLmNyZWF0ZUluZGV4KFwiY3JlYXRlZEF0XCIsIFwiY3JlYXRlZEF0XCIpO1xuXHRcdFx0XHRcdHN0b3JlLmNyZWF0ZUluZGV4KFwidXBkYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIpO1xuXHRcdFx0XHRcdHN0b3JlLmNyZWF0ZUluZGV4KFwiZXhwaXJlc0F0XCIsIFwiZXhwaXJlc0F0XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaWR4IG9mIHRoaXMuX2NvbmZpZy5pbmRleGVzKSBzdG9yZS5jcmVhdGVJbmRleChpZHgubmFtZSwgaWR4LmtleVBhdGgsIHsgdW5pcXVlOiBpZHgudW5pcXVlID8/IGZhbHNlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGlmICh0aGlzLl9jbGVhbnVwVGltZXIpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fY2xlYW51cFRpbWVyKTtcblx0XHRcdHRoaXMuX2NsZWFudXBUaW1lciA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMuX2RiPy5jbG9zZSgpO1xuXHRcdHRoaXMuX2RiID0gbnVsbDtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY2xvc2VkXCIpO1xuXHR9XG5cdGFzeW5jIHB1dChpZCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdGxldCBidWZmZXJzID0gb3B0aW9ucy5idWZmZXJzID8/IFtdO1xuXHRcdGlmIChvcHRpb25zLnRyYW5zZmVyICYmIGJ1ZmZlcnMubGVuZ3RoID4gMCkgYnVmZmVycyA9IGJ1ZmZlcnMubWFwKChidWYpID0+IHtcblx0XHRcdGlmIChcInRyYW5zZmVyXCIgaW4gYnVmICYmIHR5cGVvZiBidWYudHJhbnNmZXIgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGJ1Zi50cmFuc2ZlcigpO1xuXHRcdFx0cmV0dXJuIGJ1Zjtcblx0XHR9KTtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5nZXQoaWQpO1xuXHRcdGNvbnN0IHJlY29yZCA9IHtcblx0XHRcdGlkLFxuXHRcdFx0ZGF0YSxcblx0XHRcdGJ1ZmZlcnM6IGJ1ZmZlcnMubGVuZ3RoID4gMCA/IGJ1ZmZlcnMgOiB2b2lkIDAsXG5cdFx0XHRtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcblx0XHRcdGNyZWF0ZWRBdDogZXhpc3Rpbmc/LmNyZWF0ZWRBdCA/PyBub3csXG5cdFx0XHR1cGRhdGVkQXQ6IG5vdyxcblx0XHRcdGV4cGlyZXNBdDogb3B0aW9ucy5leHBpcmVzSW4gPyBub3cgKyBvcHRpb25zLmV4cGlyZXNJbiA6IHZvaWQgMFxuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKS5wdXQocmVjb3JkKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fY29uZmlnLmVuYWJsZUNoYW5nZVRyYWNraW5nKSB0aGlzLl9jaGFuZ2VzLm5leHQoe1xuXHRcdFx0XHRcdHR5cGU6IGV4aXN0aW5nID8gXCJwdXRcIiA6IFwiYWRkXCIsXG5cdFx0XHRcdFx0a2V5OiBpZCxcblx0XHRcdFx0XHRyZWNvcmQsXG5cdFx0XHRcdFx0cHJldmlvdXNSZWNvcmQ6IGV4aXN0aW5nID8/IHZvaWQgMCxcblx0XHRcdFx0XHR0aW1lc3RhbXA6IG5vd1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzb2x2ZShyZWNvcmQpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBQdXQgZmFpbGVkOiAke3JlcXVlc3QuZXJyb3I/Lm1lc3NhZ2V9YCkpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHB1dEJ1ZmZlcihpZCwgYnVmZmVyLCBvcHRpb25zID0ge30pIHtcblx0XHRyZXR1cm4gdGhpcy5wdXQoaWQsIGJ1ZmZlciwge1xuXHRcdFx0YnVmZmVyczogW2J1ZmZlcl0sXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgcHV0VHlwZWRBcnJheShpZCwgYXJyYXksIG9wdGlvbnMgPSB7fSkge1xuXHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHR0eXBlOiBhcnJheS5jb25zdHJ1Y3Rvci5uYW1lLFxuXHRcdFx0ZGF0YTogQXJyYXkuZnJvbShhcnJheSlcblx0XHR9O1xuXHRcdHJldHVybiB0aGlzLnB1dChpZCwgZGF0YSwge1xuXHRcdFx0YnVmZmVyczogb3B0aW9ucy50cmFuc2ZlciA/IFthcnJheS5idWZmZXJdIDogdm9pZCAwLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldChpZCkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSkuZ2V0KGlkKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWNvcmQgPSByZXF1ZXN0LnJlc3VsdDtcblx0XHRcdFx0aWYgKHJlY29yZD8uZXhwaXJlc0F0ICYmIHJlY29yZC5leHBpcmVzQXQgPCBEYXRlLm5vdygpKSB7XG5cdFx0XHRcdFx0dGhpcy5kZWxldGUoaWQpO1xuXHRcdFx0XHRcdHJlc29sdmUobnVsbCk7XG5cdFx0XHRcdH0gZWxzZSByZXNvbHZlKHJlY29yZCA/PyBudWxsKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgR2V0IGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBnZXRCdWZmZXIoaWQsIHRyYW5zZmVyKSB7XG5cdFx0Y29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5nZXQoaWQpO1xuXHRcdGlmICghcmVjb3JkKSByZXR1cm4gbnVsbDtcblx0XHRsZXQgYnVmZmVyID0gcmVjb3JkLmJ1ZmZlcnM/LlswXSA/PyAocmVjb3JkLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IHJlY29yZC5kYXRhIDogbnVsbCk7XG5cdFx0aWYgKGJ1ZmZlciAmJiB0cmFuc2Zlcikge1xuXHRcdFx0aWYgKFwidHJhbnNmZXJcIiBpbiBidWZmZXIgJiYgdHlwZW9mIGJ1ZmZlci50cmFuc2ZlciA9PT0gXCJmdW5jdGlvblwiKSBidWZmZXIgPSBidWZmZXIudHJhbnNmZXIoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ1ZmZlcjtcblx0fVxuXHRhc3luYyBnZXRUeXBlZEFycmF5KGlkKSB7XG5cdFx0Y29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5nZXQoaWQpO1xuXHRcdGlmICghcmVjb3JkIHx8ICFyZWNvcmQuZGF0YSB8fCB0eXBlb2YgcmVjb3JkLmRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IHsgdHlwZSwgZGF0YSB9ID0gcmVjb3JkLmRhdGE7XG5cdFx0Y29uc3QgVHlwZWRBcnJheUN0b3IgPSBnbG9iYWxUaGlzW3R5cGVdO1xuXHRcdGlmICghVHlwZWRBcnJheUN0b3IpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgVHlwZWRBcnJheUN0b3IoZGF0YSk7XG5cdH1cblx0YXN5bmMgZGVsZXRlKGlkKSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fY29uZmlnLmVuYWJsZUNoYW5nZVRyYWNraW5nID8gYXdhaXQgdGhpcy5nZXQoaWQpIDogbnVsbDtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpLmRlbGV0ZShpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbmZpZy5lbmFibGVDaGFuZ2VUcmFja2luZyAmJiBleGlzdGluZykgdGhpcy5fY2hhbmdlcy5uZXh0KHtcblx0XHRcdFx0XHR0eXBlOiBcImRlbGV0ZVwiLFxuXHRcdFx0XHRcdGtleTogaWQsXG5cdFx0XHRcdFx0cHJldmlvdXNSZWNvcmQ6IGV4aXN0aW5nLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgRGVsZXRlIGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBxdWVyeShxdWVyeSA9IHt9KSB7XG5cdFx0YXdhaXQgdGhpcy5fZW5zdXJlT3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHRoaXMuX2RiLnRyYW5zYWN0aW9uKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUodGhpcy5fY29uZmlnLnN0b3JlTmFtZSk7XG5cdFx0XHRjb25zdCBzb3VyY2UgPSBxdWVyeS5pbmRleCA/IHN0b3JlLmluZGV4KHF1ZXJ5LmluZGV4KSA6IHN0b3JlO1xuXHRcdFx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRcdFx0bGV0IHNraXBwZWQgPSAwO1xuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gcXVlcnkub2Zmc2V0ID8/IDA7XG5cdFx0XHRjb25zdCBsaW1pdCA9IHF1ZXJ5LmxpbWl0ID8/IEluZmluaXR5O1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IHNvdXJjZS5vcGVuQ3Vyc29yKHF1ZXJ5LnJhbmdlLCBxdWVyeS5kaXJlY3Rpb24pO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnNvciA9IHJlcXVlc3QucmVzdWx0O1xuXHRcdFx0XHRpZiAoIWN1cnNvciB8fCByZXN1bHRzLmxlbmd0aCA+PSBsaW1pdCkge1xuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0cyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlY29yZCA9IGN1cnNvci52YWx1ZTtcblx0XHRcdFx0aWYgKHJlY29yZC5leHBpcmVzQXQgJiYgcmVjb3JkLmV4cGlyZXNBdCA8IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRjdXJzb3IuY29udGludWUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHF1ZXJ5LmZpbHRlciAmJiAhcXVlcnkuZmlsdGVyKHJlY29yZCkpIHtcblx0XHRcdFx0XHRjdXJzb3IuY29udGludWUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNraXBwZWQgPCBvZmZzZXQpIHtcblx0XHRcdFx0XHRza2lwcGVkKys7XG5cdFx0XHRcdFx0Y3Vyc29yLmNvbnRpbnVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdHMucHVzaChyZWNvcmQpO1xuXHRcdFx0XHRjdXJzb3IuY29udGludWUoKTtcblx0XHRcdH07XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgUXVlcnkgZmFpbGVkOiAke3JlcXVlc3QuZXJyb3I/Lm1lc3NhZ2V9YCkpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGJhdGNoKG9wZXJhdGlvbnMpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHR4ID0gdGhpcy5fZGIudHJhbnNhY3Rpb24odGhpcy5fY29uZmlnLnN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG5cdFx0XHRjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGZvciAoY29uc3Qgb3Agb2Ygb3BlcmF0aW9ucykgaWYgKG9wLnR5cGUgPT09IFwicHV0XCIpIHtcblx0XHRcdFx0Y29uc3QgcmVjb3JkID0ge1xuXHRcdFx0XHRcdGlkOiBvcC5pZCxcblx0XHRcdFx0XHRkYXRhOiBvcC5kYXRhLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiBvcC5vcHRpb25zPy5tZXRhZGF0YSxcblx0XHRcdFx0XHRjcmVhdGVkQXQ6IG5vdyxcblx0XHRcdFx0XHR1cGRhdGVkQXQ6IG5vdyxcblx0XHRcdFx0XHRleHBpcmVzQXQ6IG9wLm9wdGlvbnM/LmV4cGlyZXNJbiA/IG5vdyArIG9wLm9wdGlvbnMuZXhwaXJlc0luIDogdm9pZCAwXG5cdFx0XHRcdH07XG5cdFx0XHRcdHN0b3JlLnB1dChyZWNvcmQpO1xuXHRcdFx0fSBlbHNlIGlmIChvcC50eXBlID09PSBcImRlbGV0ZVwiKSBzdG9yZS5kZWxldGUob3AuaWQpO1xuXHRcdFx0dHgub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHR4Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgQmF0Y2ggZmFpbGVkOiAke3R4LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBjbGVhcigpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLl9jb25maWcuc3RvcmVOYW1lKS5jbGVhcigpO1xuXHRcdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb25maWcuZW5hYmxlQ2hhbmdlVHJhY2tpbmcpIHRoaXMuX2NoYW5nZXMubmV4dCh7XG5cdFx0XHRcdFx0dHlwZTogXCJjbGVhclwiLFxuXHRcdFx0XHRcdGtleTogXCIqXCIsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYENsZWFyIGZhaWxlZDogJHtyZXF1ZXN0LmVycm9yPy5tZXNzYWdlfWApKTtcblx0XHR9KTtcblx0fVxuXHRhc3luYyBjb3VudChxdWVyeSkge1xuXHRcdGF3YWl0IHRoaXMuX2Vuc3VyZU9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RvcmUgPSB0aGlzLl9kYi50cmFuc2FjdGlvbih0aGlzLl9jb25maWcuc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKHRoaXMuX2NvbmZpZy5zdG9yZU5hbWUpO1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IChxdWVyeT8uaW5kZXggPyBzdG9yZS5pbmRleChxdWVyeS5pbmRleCkgOiBzdG9yZSkuY291bnQocXVlcnk/LnJhbmdlKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihgQ291bnQgZmFpbGVkOiAke3JlcXVlc3QuZXJyb3I/Lm1lc3NhZ2V9YCkpO1xuXHRcdH0pO1xuXHR9XG5cdG9uQ2hhbmdlcyhoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5nZXMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRvblN0YXRlKGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGUuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRhc3luYyBjbGVhbnVwRXhwaXJlZCgpIHtcblx0XHRhd2FpdCB0aGlzLl9lbnN1cmVPcGVuKCk7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRjb25zdCBleHBpcmVkID0gYXdhaXQgdGhpcy5xdWVyeSh7XG5cdFx0XHRpbmRleDogXCJleHBpcmVzQXRcIixcblx0XHRcdHJhbmdlOiBJREJLZXlSYW5nZS51cHBlckJvdW5kKG5vdylcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IHJlY29yZCBvZiBleHBpcmVkKSBhd2FpdCB0aGlzLmRlbGV0ZShyZWNvcmQuaWQpO1xuXHRcdHJldHVybiBleHBpcmVkLmxlbmd0aDtcblx0fVxuXHRhc3luYyBfZW5zdXJlT3BlbigpIHtcblx0XHRpZiAoIXRoaXMuX2RiKSBhd2FpdCB0aGlzLm9wZW4oKTtcblx0fVxuXHRfc3RhcnRDbGVhbnVwVGltZXIoKSB7XG5cdFx0dGhpcy5fY2xlYW51cFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5jbGVhbnVwRXhwaXJlZCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuXHRcdH0sIHRoaXMuX2NvbmZpZy5jbGVhbnVwSW50ZXJ2YWwpO1xuXHR9XG5cdGdldCBpc09wZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RiICE9PSBudWxsO1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cblx0Z2V0IGNoYW5nZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoYW5nZXM7XG5cdH1cbn07XG52YXIgTWVzc2FnZVF1ZXVlU3RvcmFnZSA9IGNsYXNzIGV4dGVuZHMgVHJhbnNmZXJhYmxlU3RvcmFnZSB7XG5cdGNvbnN0cnVjdG9yKGRiTmFtZSA9IFwidW5pZm9ybS1tZXNzYWdlLXF1ZXVlXCIpIHtcblx0XHRzdXBlcih7XG5cdFx0XHRkYk5hbWUsXG5cdFx0XHRzdG9yZU5hbWU6IFwibWVzc2FnZXNcIixcblx0XHRcdGluZGV4ZXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY2hhbm5lbFwiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwiY2hhbm5lbFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcInN0YXR1c1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwic3RhdHVzXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwicHJpb3JpdHlcIixcblx0XHRcdFx0XHRrZXlQYXRoOiBcInByaW9yaXR5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwic2NoZWR1bGVkRm9yXCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJzY2hlZHVsZWRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJjaGFubmVsLXN0YXR1c1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFtcImNoYW5uZWxcIiwgXCJzdGF0dXNcIl1cblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGVucXVldWUobWVzc2FnZSkge1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgaWQgPSBVVUlEdjQoKTtcblx0XHRjb25zdCBxdWV1ZWRNZXNzYWdlID0ge1xuXHRcdFx0aWQsXG5cdFx0XHRjaGFubmVsOiBtZXNzYWdlLmNoYW5uZWwsXG5cdFx0XHRzZW5kZXI6IG1lc3NhZ2Uuc2VuZGVyLFxuXHRcdFx0dHlwZTogbWVzc2FnZS50eXBlLFxuXHRcdFx0cGF5bG9hZDogbWVzc2FnZS5wYXlsb2FkLFxuXHRcdFx0cHJpb3JpdHk6IG1lc3NhZ2UucHJpb3JpdHkgPz8gMCxcblx0XHRcdGF0dGVtcHRzOiAwLFxuXHRcdFx0bWF4QXR0ZW1wdHM6IG1lc3NhZ2UubWF4QXR0ZW1wdHMgPz8gMyxcblx0XHRcdHN0YXR1czogXCJwZW5kaW5nXCIsXG5cdFx0XHRjcmVhdGVkQXQ6IG5vdyxcblx0XHRcdHNjaGVkdWxlZEZvcjogbm93ICsgKG1lc3NhZ2UuZGVsYXkgPz8gMCksXG5cdFx0XHRleHBpcmVzQXQ6IG1lc3NhZ2UuZXhwaXJlc0luID8gbm93ICsgbWVzc2FnZS5leHBpcmVzSW4gOiB2b2lkIDBcblx0XHR9O1xuXHRcdGF3YWl0IHRoaXMucHV0KGlkLCBxdWV1ZWRNZXNzYWdlKTtcblx0XHRyZXR1cm4gcXVldWVkTWVzc2FnZTtcblx0fVxuXHRhc3luYyBkZXF1ZXVlKGNoYW5uZWwpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5xdWVyeSh7XG5cdFx0XHRmaWx0ZXI6IChyKSA9PiByLmRhdGEuY2hhbm5lbCA9PT0gY2hhbm5lbCAmJiByLmRhdGEuc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJiByLmRhdGEuc2NoZWR1bGVkRm9yIDw9IG5vdyAmJiAoIXIuZGF0YS5leHBpcmVzQXQgfHwgci5kYXRhLmV4cGlyZXNBdCA+IG5vdyksXG5cdFx0XHRsaW1pdDogMVxuXHRcdH0pO1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1swXS5kYXRhO1xuXHRcdG1lc3NhZ2Uuc3RhdHVzID0gXCJwcm9jZXNzaW5nXCI7XG5cdFx0bWVzc2FnZS5hdHRlbXB0cysrO1xuXHRcdG1lc3NhZ2UubGFzdEF0dGVtcHRBdCA9IG5vdztcblx0XHRhd2FpdCB0aGlzLnB1dChtZXNzYWdlLmlkLCBtZXNzYWdlKTtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXHRhc3luYyBjb21wbGV0ZShpZCkge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCkgcmV0dXJuO1xuXHRcdHJlY29yZC5kYXRhLnN0YXR1cyA9IFwiY29tcGxldGVkXCI7XG5cdFx0YXdhaXQgdGhpcy5wdXQoaWQsIHJlY29yZC5kYXRhKTtcblx0fVxuXHRhc3luYyBmYWlsKGlkLCBlcnJvcikge1xuXHRcdGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcblx0XHRpZiAoIXJlY29yZCkgcmV0dXJuO1xuXHRcdGlmIChyZWNvcmQuZGF0YS5hdHRlbXB0cyA+PSByZWNvcmQuZGF0YS5tYXhBdHRlbXB0cykgcmVjb3JkLmRhdGEuc3RhdHVzID0gXCJmYWlsZWRcIjtcblx0XHRlbHNlIHJlY29yZC5kYXRhLnN0YXR1cyA9IFwicGVuZGluZ1wiO1xuXHRcdHJlY29yZC5kYXRhLmVycm9yID0gZXJyb3I7XG5cdFx0YXdhaXQgdGhpcy5wdXQoaWQsIHJlY29yZC5kYXRhKTtcblx0fVxuXHRhc3luYyBnZXRQZW5kaW5nQ291bnQoY2hhbm5lbCkge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5xdWVyeSh7IGZpbHRlcjogKHIpID0+IHIuZGF0YS5jaGFubmVsID09PSBjaGFubmVsICYmIHIuZGF0YS5zdGF0dXMgPT09IFwicGVuZGluZ1wiIH0pKS5sZW5ndGg7XG5cdH1cbn07XG52YXIgVHJhbnNmZXJhYmxlU3RvcmFnZUZhY3RvcnkgPSB7XG5cdGNyZWF0ZTogKGNvbmZpZykgPT4gbmV3IFRyYW5zZmVyYWJsZVN0b3JhZ2UoY29uZmlnKSxcblx0Y3JlYXRlTWVzc2FnZVF1ZXVlOiAoZGJOYW1lKSA9PiBuZXcgTWVzc2FnZVF1ZXVlU3RvcmFnZShkYk5hbWUpXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC90cmFuc3BvcnQvU2VydmljZVdvcmtlckhvc3QudHNcbnZhciBTZXJ2aWNlV29ya2VySG9zdCA9IGNsYXNzIHtcblx0X2Nvbm5lY3Rpb247XG5cdF9zdG9yYWdlO1xuXHRfY2xpZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9jaGFubmVsU3Vic2NyaWJlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRfY2xlYW51cEludGVydmFsID0gbnVsbDtcblx0X2NsaWVudEV2ZW50cyA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfY29uZmlnO1xuXHRjb25zdHJ1Y3Rvcihjb25maWcpIHtcblx0XHR0aGlzLl9jb25maWcgPSB7XG5cdFx0XHRlbmFibGVPZmZsaW5lUXVldWU6IHRydWUsXG5cdFx0XHRtYXhPZmZsaW5lUXVldWVTaXplOiAxMDAsXG5cdFx0XHRtZXNzYWdlVFRMOiA4NjRlNSxcblx0XHRcdGF1dG9DbGVhbnVwOiB0cnVlLFxuXHRcdFx0Y2xlYW51cEludGVydmFsOiA2ZTQsXG5cdFx0XHQuLi5jb25maWdcblx0XHR9O1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uUG9vbCgpLmdldE9yQ3JlYXRlKHRoaXMuX2NvbmZpZy5jaGFubmVsTmFtZSwgXCJzZXJ2aWNlLXdvcmtlclwiLCB7IG1ldGFkYXRhOiB7IGlzSG9zdDogdHJ1ZSB9IH0pO1xuXHRcdHRoaXMuX3N0b3JhZ2UgPSBnZXRDaGFubmVsU3RvcmFnZSh0aGlzLl9jb25maWcuY2hhbm5lbE5hbWUpO1xuXHRcdHRoaXMuX3NldHVwTWVzc2FnZUhhbmRsZXJzKCk7XG5cdFx0aWYgKHRoaXMuX2NvbmZpZy5hdXRvQ2xlYW51cCkgdGhpcy5fc3RhcnRDbGVhbnVwSW50ZXJ2YWwoKTtcblx0fVxuXHRhc3luYyByZWdpc3RlckNsaWVudChjbGllbnRJZCwgY2xpZW50SW5mbyA9IHt9KSB7XG5cdFx0Y29uc3QgaW5mbyA9IHtcblx0XHRcdGlkOiBjbGllbnRJZCxcblx0XHRcdHR5cGU6IGNsaWVudEluZm8udHlwZSA/PyBcIndpbmRvd1wiLFxuXHRcdFx0dXJsOiBjbGllbnRJbmZvLnVybCA/PyBcIlwiLFxuXHRcdFx0dmlzaWJpbGl0eVN0YXRlOiBjbGllbnRJbmZvLnZpc2liaWxpdHlTdGF0ZSA/PyBcInZpc2libGVcIixcblx0XHRcdGZvY3VzZWQ6IGNsaWVudEluZm8uZm9jdXNlZCA/PyBmYWxzZSxcblx0XHRcdGNvbm5lY3RlZEF0OiBEYXRlLm5vdygpLFxuXHRcdFx0bGFzdFNlZW46IERhdGUubm93KCksXG5cdFx0XHRjaGFubmVsczogbmV3IFNldChjbGllbnRJbmZvLmNoYW5uZWxzID8/IFtdKVxuXHRcdH07XG5cdFx0dGhpcy5fY2xpZW50cy5zZXQoY2xpZW50SWQsIGluZm8pO1xuXHRcdHRoaXMuX2NsaWVudEV2ZW50cy5uZXh0KHtcblx0XHRcdHR5cGU6IFwiY29ubmVjdGVkXCIsXG5cdFx0XHRjbGllbnQ6IGluZm9cblx0XHR9KTtcblx0XHRhd2FpdCB0aGlzLl9kZWxpdmVyUXVldWVkTWVzc2FnZXMoY2xpZW50SWQpO1xuXHR9XG5cdHVucmVnaXN0ZXJDbGllbnQoY2xpZW50SWQpIHtcblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLl9jbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0aWYgKGNsaWVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJzY3JpYmVycyBvZiB0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMudmFsdWVzKCkpIHN1YnNjcmliZXJzLmRlbGV0ZShjbGllbnRJZCk7XG5cdFx0XHR0aGlzLl9jbGllbnRzLmRlbGV0ZShjbGllbnRJZCk7XG5cdFx0XHR0aGlzLl9jbGllbnRFdmVudHMubmV4dCh7XG5cdFx0XHRcdHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsXG5cdFx0XHRcdGNsaWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHVwZGF0ZUNsaWVudChjbGllbnRJZCwgdXBkYXRlcykge1xuXHRcdGNvbnN0IGNsaWVudCA9IHRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKTtcblx0XHRpZiAoY2xpZW50KSB7XG5cdFx0XHRPYmplY3QuYXNzaWduKGNsaWVudCwgdXBkYXRlcywgeyBsYXN0U2VlbjogRGF0ZS5ub3coKSB9KTtcblx0XHRcdHRoaXMuX2NsaWVudEV2ZW50cy5uZXh0KHtcblx0XHRcdFx0dHlwZTogXCJ1cGRhdGVkXCIsXG5cdFx0XHRcdGNsaWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHN1YnNjcmliZUNsaWVudFRvQ2hhbm5lbChjbGllbnRJZCwgY2hhbm5lbCkge1xuXHRcdGNvbnN0IGNsaWVudCA9IHRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKTtcblx0XHRpZiAoY2xpZW50KSBjbGllbnQuY2hhbm5lbHMuYWRkKGNoYW5uZWwpO1xuXHRcdGlmICghdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLmhhcyhjaGFubmVsKSkgdGhpcy5fY2hhbm5lbFN1YnNjcmliZXJzLnNldChjaGFubmVsLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcblx0XHR0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpLmFkZChjbGllbnRJZCk7XG5cdH1cblx0dW5zdWJzY3JpYmVDbGllbnRGcm9tQ2hhbm5lbChjbGllbnRJZCwgY2hhbm5lbCkge1xuXHRcdGNvbnN0IGNsaWVudCA9IHRoaXMuX2NsaWVudHMuZ2V0KGNsaWVudElkKTtcblx0XHRpZiAoY2xpZW50KSBjbGllbnQuY2hhbm5lbHMuZGVsZXRlKGNoYW5uZWwpO1xuXHRcdHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5nZXQoY2hhbm5lbCk/LmRlbGV0ZShjbGllbnRJZCk7XG5cdH1cblx0Z2V0Q2xpZW50cygpIHtcblx0XHRyZXR1cm4gbmV3IE1hcCh0aGlzLl9jbGllbnRzKTtcblx0fVxuXHRnZXRDaGFubmVsU3Vic2NyaWJlcnMoY2hhbm5lbCkge1xuXHRcdHJldHVybiBuZXcgU2V0KHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5nZXQoY2hhbm5lbCkgPz8gW10pO1xuXHR9XG5cdGFzeW5jIHNlbmRUb0NsaWVudChjbGllbnRJZCwgbWVzc2FnZSkge1xuXHRcdGlmICghdGhpcy5fY2xpZW50cy5nZXQoY2xpZW50SWQpKSB7XG5cdFx0XHRpZiAodGhpcy5fY29uZmlnLmVuYWJsZU9mZmxpbmVRdWV1ZSkgYXdhaXQgdGhpcy5fcXVldWVNZXNzYWdlKGNsaWVudElkLCBtZXNzYWdlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3Bvc3RUb0NsaWVudChjbGllbnRJZCwgbWVzc2FnZSk7XG5cdH1cblx0YXN5bmMgYnJvYWRjYXN0VG9DaGFubmVsKGNoYW5uZWwsIG1lc3NhZ2UpIHtcblx0XHRjb25zdCBzdWJzY3JpYmVycyA9IHRoaXMuX2NoYW5uZWxTdWJzY3JpYmVycy5nZXQoY2hhbm5lbCk7XG5cdFx0aWYgKCFzdWJzY3JpYmVycyB8fCBzdWJzY3JpYmVycy5zaXplID09PSAwKSByZXR1cm4gMDtcblx0XHRsZXQgZGVsaXZlcmVkQ291bnQgPSAwO1xuXHRcdGZvciAoY29uc3QgY2xpZW50SWQgb2Ygc3Vic2NyaWJlcnMpIGlmIChhd2FpdCB0aGlzLnNlbmRUb0NsaWVudChjbGllbnRJZCwgbWVzc2FnZSkpIGRlbGl2ZXJlZENvdW50Kys7XG5cdFx0cmV0dXJuIGRlbGl2ZXJlZENvdW50O1xuXHR9XG5cdGFzeW5jIGJyb2FkY2FzdFRvQWxsKG1lc3NhZ2UpIHtcblx0XHRsZXQgZGVsaXZlcmVkQ291bnQgPSAwO1xuXHRcdGZvciAoY29uc3QgY2xpZW50SWQgb2YgdGhpcy5fY2xpZW50cy5rZXlzKCkpIGlmIChhd2FpdCB0aGlzLnNlbmRUb0NsaWVudChjbGllbnRJZCwgbWVzc2FnZSkpIGRlbGl2ZXJlZENvdW50Kys7XG5cdFx0cmV0dXJuIGRlbGl2ZXJlZENvdW50O1xuXHR9XG5cdGFzeW5jIGhhbmRsZUNsaWVudE1lc3NhZ2UoY2xpZW50SWQsIGRhdGEpIHtcblx0XHR0aGlzLnVwZGF0ZUNsaWVudChjbGllbnRJZCwgeyBsYXN0U2VlbjogRGF0ZS5ub3coKSB9KTtcblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHRzd2l0Y2ggKGRhdGEudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbm5lY3RcIjpcblx0XHRcdFx0YXdhaXQgdGhpcy5yZWdpc3RlckNsaWVudChjbGllbnRJZCwgZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZGlzY29ubmVjdFwiOlxuXHRcdFx0XHR0aGlzLnVucmVnaXN0ZXJDbGllbnQoY2xpZW50SWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzdWJzY3JpYmVcIjpcblx0XHRcdFx0dGhpcy5zdWJzY3JpYmVDbGllbnRUb0NoYW5uZWwoY2xpZW50SWQsIGRhdGEucGF5bG9hZD8uY2hhbm5lbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInVuc3Vic2NyaWJlXCI6XG5cdFx0XHRcdHRoaXMudW5zdWJzY3JpYmVDbGllbnRGcm9tQ2hhbm5lbChjbGllbnRJZCwgZGF0YS5wYXlsb2FkPy5jaGFubmVsKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicmVxdWVzdFwiOlxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2hhbmRsZVJlcXVlc3QoZGF0YSk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSkgYXdhaXQgdGhpcy5zZW5kVG9DbGllbnQoY2xpZW50SWQsIHJlc3BvbnNlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZXZlbnRcIjpcblx0XHRcdFx0aWYgKGRhdGEuY2hhbm5lbCkgYXdhaXQgdGhpcy5icm9hZGNhc3RUb0NoYW5uZWwoZGF0YS5jaGFubmVsLCBkYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aGlzLl9jb25uZWN0aW9uLnB1c2hJbmJvdW5kKHtcblx0XHRcdFx0Li4uZGF0YSxcblx0XHRcdFx0X2NsaWVudElkOiBjbGllbnRJZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdG9uQ2xpZW50RXZlbnQoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jbGllbnRFdmVudHMuc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRvbk1lc3NhZ2UoaGFuZGxlcikge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnN1YnNjcmliZShoYW5kbGVyKTtcblx0fVxuXHRvbk1lc3NhZ2VUeXBlKHR5cGUsIGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJzY3JpYmUoKG1zZykgPT4ge1xuXHRcdFx0aWYgKG1zZy50eXBlID09PSB0eXBlKSBoYW5kbGVyKG1zZyk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgX3F1ZXVlTWVzc2FnZShjbGllbnRJZCwgbWVzc2FnZSkge1xuXHRcdGF3YWl0IHRoaXMuX3N0b3JhZ2UuZGVmZXIoe1xuXHRcdFx0Y2hhbm5lbDogbWVzc2FnZS5jaGFubmVsLFxuXHRcdFx0c2VuZGVyOiBtZXNzYWdlLnNlbmRlcixcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0Li4ubWVzc2FnZS5wYXlsb2FkLFxuXHRcdFx0XHRfdGFyZ2V0Q2xpZW50OiBjbGllbnRJZFxuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdGV4cGlyZXNJbjogdGhpcy5fY29uZmlnLm1lc3NhZ2VUVEwsXG5cdFx0XHRwcmlvcml0eTogMCxcblx0XHRcdG1ldGFkYXRhOiB7IHRhcmdldENsaWVudDogY2xpZW50SWQgfVxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIF9kZWxpdmVyUXVldWVkTWVzc2FnZXMoY2xpZW50SWQpIHtcblx0XHRpZiAoIXRoaXMuX2NvbmZpZy5lbmFibGVPZmZsaW5lUXVldWUpIHJldHVybjtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuX3N0b3JhZ2UuZ2V0RGVmZXJyZWRNZXNzYWdlcyhjbGllbnRJZCwgeyBzdGF0dXM6IFwicGVuZGluZ1wiIH0pO1xuXHRcdGZvciAoY29uc3Qgc3RvcmVkIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0ge1xuXHRcdFx0XHRpZDogc3RvcmVkLmlkLFxuXHRcdFx0XHRjaGFubmVsOiBzdG9yZWQuY2hhbm5lbCxcblx0XHRcdFx0c2VuZGVyOiBzdG9yZWQuc2VuZGVyLFxuXHRcdFx0XHR0eXBlOiBzdG9yZWQudHlwZSxcblx0XHRcdFx0cGF5bG9hZDogc3RvcmVkLnBheWxvYWQsXG5cdFx0XHRcdHRpbWVzdGFtcDogc3RvcmVkLmNyZWF0ZWRBdFxuXHRcdFx0fTtcblx0XHRcdGlmIChhd2FpdCB0aGlzLl9wb3N0VG9DbGllbnQoY2xpZW50SWQsIG1lc3NhZ2UpKSBhd2FpdCB0aGlzLl9zdG9yYWdlLm1hcmtEZWxpdmVyZWQoc3RvcmVkLmlkKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0YXdhaXQgdGhpcy5fc3RvcmFnZS5vcGVuKCk7XG5cdFx0dGhpcy5fY29ubmVjdGlvbi5tYXJrQ29ubmVjdGVkKCk7XG5cdFx0YXdhaXQgdGhpcy5fc3RvcmFnZS5jbGVhbnVwRXhwaXJlZCgpO1xuXHR9XG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMuX2NsZWFudXBJbnRlcnZhbCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLl9jbGVhbnVwSW50ZXJ2YWwpO1xuXHRcdFx0dGhpcy5fY2xlYW51cEludGVydmFsID0gbnVsbDtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBzdWIgb2YgdGhpcy5fc3Vic2NyaXB0aW9ucykgc3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtdO1xuXHRcdHRoaXMuX2Nvbm5lY3Rpb24uY2xvc2UoKTtcblx0XHR0aGlzLl9zdG9yYWdlLmNsb3NlKCk7XG5cdH1cblx0X3NldHVwTWVzc2FnZUhhbmRsZXJzKCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VTdWIgPSB0aGlzLl9jb25uZWN0aW9uLnN1YnNjcmliZSh7IG5leHQ6IChtc2cpID0+IHtcblx0XHRcdGlmIChtc2cudHlwZSA9PT0gXCJyZXF1ZXN0XCIpIHRoaXMuX2hhbmRsZVJlcXVlc3QobXNnKTtcblx0XHR9IH0pO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChtZXNzYWdlU3ViKTtcblx0fVxuXHRhc3luYyBfaGFuZGxlUmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXNwb25zZSA9IHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdGNoYW5uZWw6IG1zZy5zZW5kZXIsXG5cdFx0XHRzZW5kZXI6IHRoaXMuX2NvbmZpZy5jaGFubmVsTmFtZSxcblx0XHRcdHR5cGU6IFwicmVzcG9uc2VcIixcblx0XHRcdHJlcUlkOiBtc2cucmVxSWQsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHJlc3VsdDogbnVsbCxcblx0XHRcdFx0ZXJyb3I6IG51bGxcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdHRyeSB7XG5cdFx0XHRzd2l0Y2ggKG1zZy5wYXlsb2FkPy5hY3Rpb24pIHtcblx0XHRcdFx0Y2FzZSBcImdldENsaWVudHNcIjpcblx0XHRcdFx0XHRyZXNwb25zZS5wYXlsb2FkLnJlc3VsdCA9IEFycmF5LmZyb20odGhpcy5fY2xpZW50cy52YWx1ZXMoKSkubWFwKChjKSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uYyxcblx0XHRcdFx0XHRcdGNoYW5uZWxzOiBBcnJheS5mcm9tKGMuY2hhbm5lbHMpXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZ2V0Q2hhbm5lbEluZm9cIjpcblx0XHRcdFx0XHRjb25zdCBjaGFubmVsID0gbXNnLnBheWxvYWQ/LmNoYW5uZWw7XG5cdFx0XHRcdFx0cmVzcG9uc2UucGF5bG9hZC5yZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRjaGFubmVsLFxuXHRcdFx0XHRcdFx0c3Vic2NyaWJlckNvdW50OiB0aGlzLl9jaGFubmVsU3Vic2NyaWJlcnMuZ2V0KGNoYW5uZWwpPy5zaXplID8/IDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicGluZ1wiOlxuXHRcdFx0XHRcdHJlc3BvbnNlLnBheWxvYWQucmVzdWx0ID0gXCJwb25nXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhpcy5fY29ubmVjdGlvbi5wdXNoSW5ib3VuZChtc2cpO1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZXNwb25zZS5wYXlsb2FkLmVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH1cblx0YXN5bmMgX3Bvc3RUb0NsaWVudChjbGllbnRJZCwgbWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY2xpZW50cyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjbGllbnQgPSBhd2FpdCBjbGllbnRzLmdldChjbGllbnRJZCk7XG5cdFx0XHRpZiAoY2xpZW50KSB7XG5cdFx0XHRcdGNsaWVudC5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltTV0hvc3RdIEZhaWxlZCB0byBwb3N0IHRvIGNsaWVudDpcIiwgZSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRfc3RhcnRDbGVhbnVwSW50ZXJ2YWwoKSB7XG5cdFx0dGhpcy5fY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5fY2xlYW51cFN0YWxlQ2xpZW50cygpO1xuXHRcdFx0dGhpcy5fc3RvcmFnZS5jbGVhbnVwRXhwaXJlZCgpO1xuXHRcdH0sIHRoaXMuX2NvbmZpZy5jbGVhbnVwSW50ZXJ2YWwpO1xuXHR9XG5cdGFzeW5jIF9jbGVhbnVwU3RhbGVDbGllbnRzKCkge1xuXHRcdGlmICh0eXBlb2YgY2xpZW50cyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXHRcdGNvbnN0IGFsbENsaWVudHMgPSBhd2FpdCBjbGllbnRzLm1hdGNoQWxsKHsgaW5jbHVkZVVuY29udHJvbGxlZDogdHJ1ZSB9KTtcblx0XHRjb25zdCBhY3RpdmVJZHMgPSBuZXcgU2V0KGFsbENsaWVudHMubWFwKChjKSA9PiBjLmlkKSk7XG5cdFx0Zm9yIChjb25zdCBjbGllbnRJZCBvZiB0aGlzLl9jbGllbnRzLmtleXMoKSkgaWYgKCFhY3RpdmVJZHMuaGFzKGNsaWVudElkKSkgdGhpcy51bnJlZ2lzdGVyQ2xpZW50KGNsaWVudElkKTtcblx0fVxufTtcbnZhciBTZXJ2aWNlV29ya2VyQ2xpZW50ID0gY2xhc3Mge1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9yZWdpc3RyYXRpb24gPSBudWxsO1xuXHRfbWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuXHRfc3ViamVjdCA9IG5ldyBDaGFubmVsU3ViamVjdCgpO1xuXHRfcGVuZGluZ1JlcXVlc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0X2lzQ29ubmVjdGVkID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSkge1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHR9XG5cdGFzeW5jIGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEoXCJzZXJ2aWNlV29ya2VyXCIgaW4gbmF2aWdhdG9yKSkgdGhyb3cgbmV3IEVycm9yKFwiU2VydmljZSBXb3JrZXIgbm90IHN1cHBvcnRlZFwiKTtcblx0XHR0aGlzLl9yZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTtcblx0XHR0aGlzLl9tZXNzYWdlSGFuZGxlciA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XG5cdFx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRcdGNvbnN0IHJlc29sdmVycyA9IHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChyZXNvbHZlcnMpIHtcblx0XHRcdFx0XHR0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRcdGlmIChkYXRhLnBheWxvYWQ/LmVycm9yKSByZXNvbHZlcnMucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHJlc29sdmVycy5yZXNvbHZlKGRhdGEucGF5bG9hZD8ucmVzdWx0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX3N1YmplY3QubmV4dChkYXRhKTtcblx0XHR9O1xuXHRcdG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX21lc3NhZ2VIYW5kbGVyKTtcblx0XHR0aGlzLl9zZW5kVG9TVyh7XG5cdFx0XHR0eXBlOiBcImNvbm5lY3RcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0XHRcdHZpc2liaWxpdHlTdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuXHRcdFx0XHRmb2N1c2VkOiBkb2N1bWVudC5oYXNGb2N1cygpXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5faXNDb25uZWN0ZWQgPSB0cnVlO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMuX29uVmlzaWJpbGl0eUNoYW5nZSk7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5fbWVzc2FnZUhhbmRsZXIpIHtcblx0XHRcdG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX21lc3NhZ2VIYW5kbGVyKTtcblx0XHRcdHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0dHlwZTogXCJkaXNjb25uZWN0XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZVxuXHRcdH0pO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMuX29uVmlzaWJpbGl0eUNoYW5nZSk7XG5cdFx0dGhpcy5faXNDb25uZWN0ZWQgPSBmYWxzZTtcblx0fVxuXHRzdWJzY3JpYmVUb0NoYW5uZWwoY2hhbm5lbCkge1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwic3Vic2NyaWJlXCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHBheWxvYWQ6IHsgY2hhbm5lbCB9XG5cdFx0fSk7XG5cdH1cblx0dW5zdWJzY3JpYmVGcm9tQ2hhbm5lbChjaGFubmVsKSB7XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0dHlwZTogXCJ1bnN1YnNjcmliZVwiLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRwYXlsb2FkOiB7IGNoYW5uZWwgfVxuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHJlcXVlc3QoYWN0aW9uLCBwYXlsb2FkID0ge30pIHtcblx0XHRjb25zdCByZXFJZCA9IFVVSUR2NCgpO1xuXHRcdGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVycygpO1xuXHRcdHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5zZXQocmVxSWQsIHJlc29sdmVycyk7XG5cdFx0dGhpcy5fc2VuZFRvU1coe1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJyZXF1ZXN0XCIsXG5cdFx0XHRjaGFubmVsOiB0aGlzLl9jaGFubmVsTmFtZSxcblx0XHRcdHNlbmRlcjogXCJjbGllbnRcIixcblx0XHRcdHJlcUlkLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdC4uLnBheWxvYWRcblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9wZW5kaW5nUmVxdWVzdHMuaGFzKHJlcUlkKSkge1xuXHRcdFx0XHR0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVzb2x2ZXJzLnJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiUmVxdWVzdCB0aW1lb3V0XCIpKTtcblx0XHRcdH1cblx0XHR9LCAzZTQpO1xuXHRcdHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcblx0fVxuXHRlbWl0KGV2ZW50VHlwZSwgZGF0YSwgdGFyZ2V0Q2hhbm5lbCkge1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdGNoYW5uZWw6IHRhcmdldENoYW5uZWwgPz8gdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHRzZW5kZXI6IFwiY2xpZW50XCIsXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHR5cGU6IGV2ZW50VHlwZSxcblx0XHRcdFx0ZGF0YVxuXHRcdFx0fSxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHsgbmV4dDogaGFuZGxlciB9KTtcblx0fVxuXHRvbihldmVudFR5cGUsIGhhbmRsZXIpIHtcblx0XHRyZXR1cm4gZmlsdGVyKChtKSA9PiBtLnR5cGUgPT09IFwiZXZlbnRcIiAmJiBtLnBheWxvYWQ/LnR5cGUgPT09IGV2ZW50VHlwZSkodGhpcy5fc3ViamVjdCkuc3Vic2NyaWJlKHsgbmV4dDogKG1zZykgPT4gaGFuZGxlcihtc2cucGF5bG9hZD8uZGF0YSkgfSk7XG5cdH1cblx0Z2V0IGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pc0Nvbm5lY3RlZDtcblx0fVxuXHRfc2VuZFRvU1cobWVzc2FnZSkge1xuXHRcdGlmICghdGhpcy5fcmVnaXN0cmF0aW9uPy5hY3RpdmUpIHJldHVybjtcblx0XHR0aGlzLl9yZWdpc3RyYXRpb24uYWN0aXZlLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuXHR9XG5cdF9vblZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB7XG5cdFx0aWYgKCF0aGlzLl9pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRcdHRoaXMuX3NlbmRUb1NXKHtcblx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdGNoYW5uZWw6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHR0eXBlOiBcInZpc2liaWxpdHlDaGFuZ2VcIixcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdHZpc2liaWxpdHlTdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuXHRcdFx0XHRcdGZvY3VzZWQ6IGRvY3VtZW50Lmhhc0ZvY3VzKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xufTtcbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VXb3JrZXJIb3N0KGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFNlcnZpY2VXb3JrZXJIb3N0KGNvbmZpZyk7XG59XG5mdW5jdGlvbiBjcmVhdGVTZXJ2aWNlV29ya2VyQ2xpZW50KGNoYW5uZWxOYW1lKSB7XG5cdHJldHVybiBuZXcgU2VydmljZVdvcmtlckNsaWVudChjaGFubmVsTmFtZSk7XG59XG5mdW5jdGlvbiBiaW5kU2VydmljZVdvcmtlckhvc3RCcmlkZ2UoaG9zdCwgc2NvcGUgPSBzZWxmKSB7XG5cdGNvbnN0IG9uTWVzc2FnZSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGNsaWVudElkID0gU3RyaW5nKGV2ZW50LnNvdXJjZT8uaWQgfHwgXCJcIikudHJpbSgpO1xuXHRcdGlmICghY2xpZW50SWQpIHJldHVybjtcblx0XHRob3N0LmhhbmRsZUNsaWVudE1lc3NhZ2UoY2xpZW50SWQsIGV2ZW50LmRhdGEpO1xuXHR9O1xuXHRzY29wZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuXHRob3N0LnN0YXJ0KCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFwiW1NlcnZpY2VXb3JrZXJIb3N0XSBGYWlsZWQgdG8gc3RhcnQgYm91bmQgaG9zdDpcIiwgZXJyb3IpO1xuXHR9KTtcblx0cmV0dXJuIHsgc3RvcCgpIHtcblx0XHRzY29wZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbk1lc3NhZ2UpO1xuXHRcdGhvc3Quc3RvcCgpO1xuXHR9IH07XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9uZXh0L3RyYW5zcG9ydC9VbmlmaWVkVHJhbnNwb3J0LnRzXG52YXIgQWJzdHJhY3RUcmFuc3BvcnQgPSBjbGFzcyB7XG5cdF90eXBlO1xuXHRfY2hhbm5lbE5hbWU7XG5cdF9jb25maWc7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3RhdGUgPSBuZXcgQ2hhbm5lbFN1YmplY3QoKTtcblx0X3JlYWR5ID0gZmFsc2U7XG5cdGNvbnN0cnVjdG9yKF90eXBlLCBfY2hhbm5lbE5hbWUsIF9jb25maWcpIHtcblx0XHR0aGlzLl90eXBlID0gX3R5cGU7XG5cdFx0dGhpcy5fY2hhbm5lbE5hbWUgPSBfY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5fY29uZmlnID0gX2NvbmZpZztcblx0fVxuXHRyZXF1ZXN0KG1zZykge1xuXHRcdGNvbnN0IHJlcUlkID0gbXNnLnJlcUlkID8/IFVVSUR2NCgpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKHJlcUlkKTtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0fSwgdGhpcy5fY29uZmlnLnRpbWVvdXQgPz8gM2U0KTtcblx0XHRcdHRoaXMuX3BlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdHJlc29sdmUodik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlamVjdDogKGUpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZW5kKHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZCxcblx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHN1YnNjcmliZShvYnNlcnZlcikge1xuXHRcdGNvbnN0IG9icyA9IHR5cGVvZiBvYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnNlcnZlciB9IDogb2JzZXJ2ZXI7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3N1YnMuZGVsZXRlKG9icyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRfaGFuZGxlTWVzc2FnZShkYXRhKSB7XG5cdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLl9wZW5kaW5nLmdldChkYXRhLnJlcUlkKTtcblx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAoZGF0YS5wYXlsb2FkPy5lcnJvcikgcC5yZWplY3QobmV3IEVycm9yKGRhdGEucGF5bG9hZC5lcnJvcikpO1xuXHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdWJzKSB0cnkge1xuXHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cy5lcnJvcj8uKGUpO1xuXHRcdH1cblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKTtcblx0XHR0aGlzLl9zdWJzLmNsZWFyKCk7XG5cdFx0dGhpcy5fcmVhZHkgPSBmYWxzZTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiZGlzY29ubmVjdGVkXCIpO1xuXHR9XG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzLl90eXBlO1xuXHR9XG5cdGdldCBjaGFubmVsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2hhbm5lbE5hbWU7XG5cdH1cblx0Z2V0IGlzUmVhZHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlYWR5O1xuXHR9XG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGU7XG5cdH1cbn07XG52YXIgTmF0aXZlVHJhbnNwb3J0ID0gY2xhc3MgZXh0ZW5kcyBBYnN0cmFjdFRyYW5zcG9ydCB7XG5cdF90YXJnZXQ7XG5cdF9zZW5kRm47XG5cdF9jbGVhbnVwID0gbnVsbDtcblx0Y29uc3RydWN0b3IoX3RhcmdldCwgY29uZmlnKSB7XG5cdFx0c3VwZXIoZGV0ZWN0VHJhbnNwb3J0VHlwZSQxKF90YXJnZXQpLCBjb25maWcuY2hhbm5lbE5hbWUsIGNvbmZpZyk7XG5cdFx0dGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcblx0XHR0aGlzLl9zZW5kRm4gPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoX3RhcmdldCk7XG5cdFx0dGhpcy5fc2V0dXBMaXN0ZW5lcigpO1xuXHR9XG5cdF9zZXR1cExpc3RlbmVyKCkge1xuXHRcdHRoaXMuX2NsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0aGlzLl90YXJnZXQsIChkYXRhKSA9PiB0aGlzLl9oYW5kbGVNZXNzYWdlKGRhdGEpLCAoZXJyKSA9PiB0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuZXJyb3I/LihlcnIpKSwgKCkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmNvbXBsZXRlPy4oKSkpO1xuXHRcdHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblx0XHR0aGlzLl9zdGF0ZS5uZXh0KFwiY29ubmVjdGVkXCIpO1xuXHR9XG5cdHNlbmQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmRGbihtc2csIHRyYW5zZmVyKTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHRzdXBlci5jbG9zZSgpO1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBvcHRpb25zID0ge30sIGNvbmZpZyA9IHt9KSB7XG5cdGNvbnN0IGJhc2VDb25maWcgPSB7XG5cdFx0Y2hhbm5lbE5hbWUsXG5cdFx0dGltZW91dDogM2U0LFxuXHRcdGF1dG9Db25uZWN0OiB0cnVlLFxuXHRcdC4uLmNvbmZpZ1xuXHR9O1xuXHRpZiAob3B0aW9ucy53b3JrZXIpIHtcblx0XHRjb25zdCB3b3JrZXIgPSBvcHRpb25zLndvcmtlci5leGlzdGluZyA/PyBuZXcgV29ya2VyKG9wdGlvbnMud29ya2VyLnNjcmlwdFVybCwgb3B0aW9ucy53b3JrZXIub3B0aW9ucyk7XG5cdFx0cmV0dXJuIG5ldyBOYXRpdmVUcmFuc3BvcnQod29ya2VyLCBiYXNlQ29uZmlnKTtcblx0fVxuXHRpZiAob3B0aW9ucy5zaGFyZWRXb3JrZXIpIHtcblx0XHRjb25zdCBjbGllbnQgPSBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KG9wdGlvbnMuc2hhcmVkV29ya2VyLnNjcmlwdFVybCwgY2hhbm5lbE5hbWUsIG9wdGlvbnMuc2hhcmVkV29ya2VyLm9wdGlvbnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiAobXNnLCB0cmFuc2ZlcikgPT4gY2xpZW50LnNlbmQobXNnLCB0cmFuc2ZlciksXG5cdFx0XHRyZXF1ZXN0OiAobXNnKSA9PiBjbGllbnQucmVxdWVzdChtc2cpLFxuXHRcdFx0c3Vic2NyaWJlOiAob2JzKSA9PiBjbGllbnQuc3Vic2NyaWJlKG9icyksXG5cdFx0XHRjbG9zZTogKCkgPT4gY2xpZW50LmNsb3NlKCksXG5cdFx0XHR0eXBlOiBcInNoYXJlZC13b3JrZXJcIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdH07XG5cdH1cblx0aWYgKG9wdGlvbnMud2Vic29ja2V0KSB7XG5cdFx0Y29uc3Qgd3MgPSBjcmVhdGVXZWJTb2NrZXRUcmFuc3BvcnQob3B0aW9ucy53ZWJzb2NrZXQudXJsLCB7XG5cdFx0XHRwcm90b2NvbHM6IG9wdGlvbnMud2Vic29ja2V0LnByb3RvY29scyxcblx0XHRcdHJlY29ubmVjdDogb3B0aW9ucy53ZWJzb2NrZXQucmVjb25uZWN0XG5cdFx0fSk7XG5cdFx0Y29uc3Qgc3VicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdFx0Y29uc3QgcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0d3MubGlzdGVuKChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlc3BvbnNlXCIgJiYgZGF0YS5yZXFJZCkge1xuXHRcdFx0XHRjb25zdCBwID0gcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0cGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdFx0aWYgKGRhdGEucGF5bG9hZD8uZXJyb3IpIHAucmVqZWN0KG5ldyBFcnJvcihkYXRhLnBheWxvYWQuZXJyb3IpKTtcblx0XHRcdFx0XHRlbHNlIHAucmVzb2x2ZShkYXRhLnBheWxvYWQ/LnJlc3VsdCA/PyBkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBzIG9mIHN1YnMpIHRyeSB7XG5cdFx0XHRcdHMubmV4dD8uKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiAobXNnLCB0cmFuc2ZlcikgPT4gd3Muc2VuZChtc2csIHRyYW5zZmVyKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRwZW5kaW5nLmRlbGV0ZShyZXFJZCk7XG5cdFx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoXCJSZXF1ZXN0IHRpbWVvdXRcIikpO1xuXHRcdFx0XHR9LCBiYXNlQ29uZmlnLnRpbWVvdXQpO1xuXHRcdFx0XHRwZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0XHRcdHJlc29sdmU6ICh2KSA9PiB7XG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0OiAoZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR3cy5zZW5kKHtcblx0XHRcdFx0XHQuLi5tc2csXG5cdFx0XHRcdFx0cmVxSWQsXG5cdFx0XHRcdFx0dHlwZTogXCJyZXF1ZXN0XCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHRcdHN1YnNjcmliZTogKG9icykgPT4ge1xuXHRcdFx0XHRjb25zdCBvID0gdHlwZW9mIG9icyA9PT0gXCJmdW5jdGlvblwiID8geyBuZXh0OiBvYnMgfSA6IG9icztcblx0XHRcdFx0c3Vicy5hZGQobyk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y2xvc2VkOiBmYWxzZSxcblx0XHRcdFx0XHR1bnN1YnNjcmliZTogKCkgPT4gc3Vicy5kZWxldGUobylcblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRjbG9zZTogKCkgPT4ge1xuXHRcdFx0XHRzdWJzLmNsZWFyKCk7XG5cdFx0XHRcdHdzLmNsb3NlKCk7XG5cdFx0XHR9LFxuXHRcdFx0dHlwZTogXCJ3ZWJzb2NrZXRcIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogd3Muc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5icm9hZGNhc3QpIHtcblx0XHRjb25zdCBiYyA9IGNyZWF0ZUJyb2FkY2FzdFRyYW5zcG9ydChvcHRpb25zLmJyb2FkY2FzdC5uYW1lID8/IGNoYW5uZWxOYW1lKTtcblx0XHRyZXR1cm4gbmV3IE5hdGl2ZVRyYW5zcG9ydChiYy5jaGFubmVsLCBiYXNlQ29uZmlnKTtcblx0fVxuXHRpZiAob3B0aW9ucy5wb3J0Py5wb3J0KSB7XG5cdFx0Y29uc3QgdHJhbnNwb3J0ID0gbmV3IFBvcnRUcmFuc3BvcnQob3B0aW9ucy5wb3J0LnBvcnQsIGNoYW5uZWxOYW1lLCBvcHRpb25zLnBvcnQuY29uZmlnKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogKG1zZywgdHJhbnNmZXIpID0+IHRyYW5zcG9ydC5zZW5kKG1zZywgdHJhbnNmZXIpLFxuXHRcdFx0cmVxdWVzdDogKG1zZykgPT4gdHJhbnNwb3J0LnJlcXVlc3QobXNnKSxcblx0XHRcdHN1YnNjcmliZTogKG9icykgPT4gdHJhbnNwb3J0LnN1YnNjcmliZShvYnMpLFxuXHRcdFx0Y2xvc2U6ICgpID0+IHRyYW5zcG9ydC5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJtZXNzYWdlLXBvcnRcIixcblx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0aXNSZWFkeTogdHJhbnNwb3J0LmlzTGlzdGVuaW5nXG5cdFx0fTtcblx0fVxuXHRpZiAob3B0aW9ucy5jaHJvbWUpIHtcblx0XHRpZiAob3B0aW9ucy5jaHJvbWUubW9kZSA9PT0gXCJydW50aW1lXCIpIHtcblx0XHRcdGNvbnN0IG9icyA9IG5ldyBDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSh2b2lkIDAsIG9wdGlvbnMuY2hyb21lLm9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdFx0cmVxdWVzdDogKG1zZykgPT4gb2JzLnJlcXVlc3QobXNnKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gb2JzLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcImNocm9tZS1ydW50aW1lXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5jaHJvbWUubW9kZSA9PT0gXCJ0YWJzXCIpIHtcblx0XHRcdGNvbnN0IG9icyA9IG5ldyBDaHJvbWVUYWJzT2JzZXJ2YWJsZShvcHRpb25zLmNocm9tZS50YWJJZCwgb3B0aW9ucy5jaHJvbWUub3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBvYnMuc2VuZChtc2cpLFxuXHRcdFx0XHRyZXF1ZXN0OiAoKSA9PiBQcm9taXNlLnJlamVjdChcIk5vdCBzdXBwb3J0ZWRcIiksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBvYnMuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJjaHJvbWUtdGFic1wiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKG9wdGlvbnMuY2hyb21lLm1vZGUgPT09IFwicG9ydFwiKSB7XG5cdFx0XHRjb25zdCBvYnMgPSBuZXcgQ2hyb21lUG9ydE9ic2VydmFibGUob3B0aW9ucy5jaHJvbWUucG9ydE5hbWUgPz8gY2hhbm5lbE5hbWUsIG9wdGlvbnMuY2hyb21lLnRhYklkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG9icy5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiTm90IHN1cHBvcnRlZFwiKSxcblx0XHRcdFx0c3Vic2NyaWJlOiAobykgPT4gb2JzLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IG9icy5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcImNocm9tZS1wb3J0XCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiBvYnMuaXNDb25uZWN0ZWRcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLmNocm9tZS5tb2RlID09PSBcImV4dGVybmFsXCIpIHtcblx0XHRcdGNvbnN0IG9icyA9IG5ldyBDaHJvbWVFeHRlcm5hbE9ic2VydmFibGUob3B0aW9ucy5jaHJvbWUub3B0aW9ucz8uZXh0ZW5zaW9uSWQpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gb2JzLnNlbmQobXNnKSxcblx0XHRcdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoXCJOb3Qgc3VwcG9ydGVkXCIpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBvYnMuc3Vic2NyaWJlKG8pLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gb2JzLmNsb3NlKCksXG5cdFx0XHRcdHR5cGU6IFwiY2hyb21lLWV4dGVybmFsXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAob3B0aW9ucy5zb2NrZXRpbykge1xuXHRcdGNvbnN0IG9icyA9IG5ldyBTb2NrZXRJT09ic2VydmFibGUob3B0aW9ucy5zb2NrZXRpby5zb2NrZXQsIGNoYW5uZWxOYW1lLCBvcHRpb25zLnNvY2tldGlvLm9wdGlvbnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiAobXNnKSA9PiBvYnMuc2VuZChtc2cpLFxuXHRcdFx0cmVxdWVzdDogKG1zZykgPT4gb2JzLnJlcXVlc3QobXNnKSxcblx0XHRcdHN1YnNjcmliZTogKG8pID0+IG9icy5zdWJzY3JpYmUobyksXG5cdFx0XHRjbG9zZTogKCkgPT4gb2JzLmNsb3NlKCksXG5cdFx0XHR0eXBlOiBcInNvY2tldC1pb1wiLFxuXHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRpc1JlYWR5OiBvYnMuaXNDb25uZWN0ZWRcblx0XHR9O1xuXHR9XG5cdGlmIChvcHRpb25zLnNlcnZpY2VXb3JrZXIpIHtcblx0XHRpZiAob3B0aW9ucy5zZXJ2aWNlV29ya2VyLm1vZGUgPT09IFwiaG9zdFwiKSB7XG5cdFx0XHRjb25zdCBob3N0ID0gbmV3IFNlcnZpY2VXb3JrZXJIb3N0KHtcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdC4uLm9wdGlvbnMuc2VydmljZVdvcmtlci5jb25maWcgPz8ge31cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYnJpZGdlID0gYmluZFNlcnZpY2VXb3JrZXJIb3N0QnJpZGdlKGhvc3QpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4ge1xuXHRcdFx0XHRcdGhvc3QuYnJvYWRjYXN0VG9BbGwobXNnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIlNlcnZpY2VXb3JrZXJIb3N0IHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3QoKTsgdXNlIGhvc3QgQVBJcyBkaXJlY3RseS5cIikpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBob3N0Lm9uTWVzc2FnZSh0eXBlb2YgbyA9PT0gXCJmdW5jdGlvblwiID8gbyA6IChtKSA9PiBvLm5leHQ/LihtKSksXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiBicmlkZ2Uuc3RvcCgpLFxuXHRcdFx0XHR0eXBlOiBcInNlcnZpY2Utd29ya2VyXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAob3B0aW9ucy5zZXJ2aWNlV29ya2VyLm1vZGUgPT09IFwiY2xpZW50XCIpIHtcblx0XHRcdGNvbnN0IGNsaWVudCA9IG5ldyBTZXJ2aWNlV29ya2VyQ2xpZW50KGNoYW5uZWxOYW1lKTtcblx0XHRcdGNsaWVudC5jb25uZWN0KCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZW5kOiAobXNnKSA9PiBjbGllbnQuZW1pdChtc2cudHlwZSwgbXNnLnBheWxvYWQsIG1zZy5jaGFubmVsKSxcblx0XHRcdFx0cmVxdWVzdDogKG1zZykgPT4gY2xpZW50LnJlcXVlc3QobXNnLnBheWxvYWQ/LmFjdGlvbiA/PyBcInVua25vd25cIiwgbXNnLnBheWxvYWQpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBjbGllbnQuc3Vic2NyaWJlKHR5cGVvZiBvID09PSBcImZ1bmN0aW9uXCIgPyBvIDogKG0pID0+IG8ubmV4dD8uKG0pKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IGNsaWVudC5kaXNjb25uZWN0KCksXG5cdFx0XHRcdHR5cGU6IFwic2VydmljZS13b3JrZXJcIixcblx0XHRcdFx0Y2hhbm5lbE5hbWUsXG5cdFx0XHRcdGlzUmVhZHk6IGNsaWVudC5pc0Nvbm5lY3RlZFxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdGlvbnMuYXRvbWljcykge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBBdG9taWNzVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBvcHRpb25zLmF0b21pY3Muc2VuZEJ1ZmZlciwgb3B0aW9ucy5hdG9taWNzLnJlY3ZCdWZmZXIsIG9wdGlvbnMuYXRvbWljcy5jb25maWcpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiAobXNnLCB0cmFuc2ZlcikgPT4gdHJhbnNwb3J0LnNlbmQobXNnKSxcblx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IHRyYW5zcG9ydC5yZXF1ZXN0KG1zZyksXG5cdFx0XHRzdWJzY3JpYmU6IChvKSA9PiB0cmFuc3BvcnQuc3Vic2NyaWJlKG8pLFxuXHRcdFx0Y2xvc2U6ICgpID0+IHRyYW5zcG9ydC5jbG9zZSgpLFxuXHRcdFx0dHlwZTogXCJhdG9taWNzXCIsXG5cdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdGlzUmVhZHk6IHRydWVcblx0XHR9O1xuXHR9XG5cdGlmIChvcHRpb25zLnJ0Yykge1xuXHRcdGlmIChvcHRpb25zLnJ0Yy5tb2RlID09PSBcInBlZXJcIikge1xuXHRcdFx0Y29uc3QgcGVlciA9IG5ldyBSVENQZWVyVHJhbnNwb3J0KGNoYW5uZWxOYW1lLCBvcHRpb25zLnJ0Yy5jb25maWcpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VuZDogKG1zZykgPT4gcGVlci5zZW5kKG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6IChtc2cpID0+IHBlZXIucmVxdWVzdChtc2cpLFxuXHRcdFx0XHRzdWJzY3JpYmU6IChvKSA9PiBwZWVyLnN1YnNjcmliZShvKSxcblx0XHRcdFx0Y2xvc2U6ICgpID0+IHBlZXIuY2xvc2UoKSxcblx0XHRcdFx0dHlwZTogXCJydGMtZGF0YVwiLFxuXHRcdFx0XHRjaGFubmVsTmFtZSxcblx0XHRcdFx0aXNSZWFkeTogcGVlci5jb25uZWN0aW9uU3RhdGUgPT09IFwiY29ubmVjdGVkXCJcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChvcHRpb25zLnJ0Yy5tb2RlID09PSBcIm1hbmFnZXJcIikge1xuXHRcdFx0Y29uc3QgbWFuYWdlciA9IG5ldyBSVENQZWVyTWFuYWdlcihjaGFubmVsTmFtZSwgb3B0aW9ucy5ydGMuY29uZmlnKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbmQ6IChtc2cpID0+IG1hbmFnZXIuYnJvYWRjYXN0KG1zZyksXG5cdFx0XHRcdHJlcXVlc3Q6ICgpID0+IFByb21pc2UucmVqZWN0KFwiVXNlIG1hbmFnZXIucmVxdWVzdChwZWVySWQsIG1zZykgZGlyZWN0bHlcIiksXG5cdFx0XHRcdHN1YnNjcmliZTogKG8pID0+IG1hbmFnZXIuc3Vic2NyaWJlKG8pLFxuXHRcdFx0XHRjbG9zZTogKCkgPT4gbWFuYWdlci5jbG9zZSgpLFxuXHRcdFx0XHR0eXBlOiBcInJ0Yy1kYXRhXCIsXG5cdFx0XHRcdGNoYW5uZWxOYW1lLFxuXHRcdFx0XHRpc1JlYWR5OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRjb25zdCBzdWJqZWN0ID0gbmV3IENoYW5uZWxTdWJqZWN0KCk7XG5cdHJldHVybiB7XG5cdFx0c2VuZDogKG1zZykgPT4gc3ViamVjdC5uZXh0KG1zZyksXG5cdFx0cmVxdWVzdDogKCkgPT4gUHJvbWlzZS5yZWplY3QoXCJJbnRlcm5hbCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0XCIpLFxuXHRcdHN1YnNjcmliZTogKG8pID0+IHN1YmplY3Quc3Vic2NyaWJlKG8pLFxuXHRcdGNsb3NlOiAoKSA9PiBzdWJqZWN0LmNvbXBsZXRlKCksXG5cdFx0dHlwZTogXCJpbnRlcm5hbFwiLFxuXHRcdGNoYW5uZWxOYW1lLFxuXHRcdGlzUmVhZHk6IHRydWVcblx0fTtcbn1cbnZhciBUcmFuc3BvcnRSZWdpc3RyeSA9IGNsYXNzIHtcblx0X3RyYW5zcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRyZWdpc3RlcihuYW1lLCB0cmFuc3BvcnQpIHtcblx0XHR0aGlzLl90cmFuc3BvcnRzLnNldChuYW1lLCB0cmFuc3BvcnQpO1xuXHR9XG5cdGdldChuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyYW5zcG9ydHMuZ2V0KG5hbWUpO1xuXHR9XG5cdGdldE9yQ3JlYXRlKG5hbWUsIG9wdGlvbnMgPSB7fSwgY29uZmlnID0ge30pIHtcblx0XHRsZXQgdHJhbnNwb3J0ID0gdGhpcy5fdHJhbnNwb3J0cy5nZXQobmFtZSk7XG5cdFx0aWYgKCF0cmFuc3BvcnQpIHtcblx0XHRcdHRyYW5zcG9ydCA9IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCBvcHRpb25zLCBjb25maWcpO1xuXHRcdFx0dGhpcy5fdHJhbnNwb3J0cy5zZXQobmFtZSwgdHJhbnNwb3J0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zcG9ydDtcblx0fVxuXHRyZW1vdmUobmFtZSkge1xuXHRcdGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydHMuZ2V0KG5hbWUpO1xuXHRcdGlmICh0cmFuc3BvcnQpIHtcblx0XHRcdHRyYW5zcG9ydC5jbG9zZSgpO1xuXHRcdFx0dGhpcy5fdHJhbnNwb3J0cy5kZWxldGUobmFtZSk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlQWxsKCkge1xuXHRcdGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRoaXMuX3RyYW5zcG9ydHMudmFsdWVzKCkpIHRyYW5zcG9ydC5jbG9zZSgpO1xuXHRcdHRoaXMuX3RyYW5zcG9ydHMuY2xlYXIoKTtcblx0fVxuXHRsaXN0KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3RyYW5zcG9ydHMua2V5cygpKTtcblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdHJhbnNwb3J0cy5zaXplO1xuXHR9XG59O1xudmFyIF9yZWdpc3RyeSA9IG51bGw7XG5mdW5jdGlvbiBnZXRUcmFuc3BvcnRSZWdpc3RyeSgpIHtcblx0aWYgKCFfcmVnaXN0cnkpIF9yZWdpc3RyeSA9IG5ldyBUcmFuc3BvcnRSZWdpc3RyeSgpO1xuXHRyZXR1cm4gX3JlZ2lzdHJ5O1xufVxudmFyIFVuaWZpZWRUcmFuc3BvcnRGYWN0b3J5ID0ge1xuXHRjcmVhdGU6IGNyZWF0ZVRyYW5zcG9ydCxcblx0cmVnaXN0cnk6IGdldFRyYW5zcG9ydFJlZ2lzdHJ5LFxuXHRmcm9tV29ya2VyOiAod29ya2VyLCBuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHdvcmtlcjogeyBleGlzdGluZzogd29ya2VyIH0gfSwgY29uZmlnKSxcblx0ZnJvbVBvcnQ6IChwb3J0LCBuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IHBvcnQ6IHsgcG9ydCB9IH0sIGNvbmZpZyksXG5cdGZyb21XZWJTb2NrZXQ6ICh1cmwsIG5hbWUsIGNvbmZpZykgPT4gY3JlYXRlVHJhbnNwb3J0KG5hbWUsIHsgd2Vic29ja2V0OiB7IHVybCB9IH0sIGNvbmZpZyksXG5cdGZyb21Ccm9hZGNhc3Q6IChuYW1lLCBjb25maWcpID0+IGNyZWF0ZVRyYW5zcG9ydChuYW1lLCB7IGJyb2FkY2FzdDoge30gfSwgY29uZmlnKSxcblx0c2hhcmVkV29ya2VyOiB7XG5cdFx0Y2xpZW50OiAodXJsLCBuYW1lLCBvcHRzKSA9PiBuZXcgU2hhcmVkV29ya2VyQ2xpZW50KHVybCwgbmFtZSwgb3B0cyksXG5cdFx0aG9zdDogKG5hbWUpID0+IG5ldyBTaGFyZWRXb3JrZXJIb3N0KG5hbWUpXG5cdH0sXG5cdGF0b21pY3M6IHtcblx0XHRjcmVhdGU6IChuYW1lLCBzZW5kLCByZWN2LCBjb25maWcpID0+IG5ldyBBdG9taWNzVHJhbnNwb3J0KG5hbWUsIHNlbmQsIHJlY3YsIGNvbmZpZyksXG5cdFx0Y3JlYXRlUGFpcjogY3JlYXRlQXRvbWljc0NoYW5uZWxQYWlyLFxuXHRcdGJ1ZmZlcjogKHNpemUpID0+IG5ldyBBdG9taWNzQnVmZmVyKHNpemUpLFxuXHRcdHJpbmdCdWZmZXI6ICgpID0+IG5ldyBBdG9taWNzUmluZ0J1ZmZlcigpXG5cdH0sXG5cdHJ0Yzoge1xuXHRcdHBlZXI6IChuYW1lLCBjb25maWcpID0+IG5ldyBSVENQZWVyVHJhbnNwb3J0KG5hbWUsIGNvbmZpZyksXG5cdFx0bWFuYWdlcjogKG5hbWUsIGNvbmZpZykgPT4gbmV3IFJUQ1BlZXJNYW5hZ2VyKG5hbWUsIGNvbmZpZyksXG5cdFx0c2lnbmFsaW5nOiBjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmdcblx0fSxcblx0cG9ydDoge1xuXHRcdGNyZWF0ZTogKHBvcnQsIG5hbWUsIGNvbmZpZykgPT4gbmV3IFBvcnRUcmFuc3BvcnQocG9ydCwgbmFtZSwgY29uZmlnKSxcblx0XHRjcmVhdGVQYWlyOiBjcmVhdGVDaGFubmVsUGFpcixcblx0XHRwb29sOiAoY29uZmlnKSA9PiBuZXcgUG9ydFBvb2woY29uZmlnKSxcblx0XHR3aW5kb3dDb25uZWN0b3I6ICh0YXJnZXQsIG5hbWUpID0+IG5ldyBXaW5kb3dQb3J0Q29ubmVjdG9yKHRhcmdldCwgbmFtZSlcblx0fSxcblx0c3RvcmFnZToge1xuXHRcdGNyZWF0ZTogKGNvbmZpZykgPT4gbmV3IFRyYW5zZmVyYWJsZVN0b3JhZ2UoY29uZmlnKSxcblx0XHRtZXNzYWdlUXVldWU6IChkYk5hbWUpID0+IG5ldyBNZXNzYWdlUXVldWVTdG9yYWdlKGRiTmFtZSlcblx0fSxcblx0c2VydmljZVdvcmtlcjoge1xuXHRcdGhvc3Q6IChjb25maWcpID0+IG5ldyBTZXJ2aWNlV29ya2VySG9zdChjb25maWcpLFxuXHRcdGNsaWVudDogKG5hbWUpID0+IG5ldyBTZXJ2aWNlV29ya2VyQ2xpZW50KG5hbWUpXG5cdH0sXG5cdHNvY2tldGlvOiAoc29ja2V0LCBuYW1lLCBvcHRzKSA9PiBuZXcgU29ja2V0SU9PYnNlcnZhYmxlKHNvY2tldCwgbmFtZSwgb3B0cyksXG5cdGNocm9tZToge1xuXHRcdHJ1bnRpbWU6IChvcHRzKSA9PiBuZXcgQ2hyb21lUnVudGltZU9ic2VydmFibGUodm9pZCAwLCBvcHRzKSxcblx0XHR0YWJzOiAodGFiSWQsIG9wdHMpID0+IG5ldyBDaHJvbWVUYWJzT2JzZXJ2YWJsZSh0YWJJZCwgb3B0cyksXG5cdFx0cG9ydDogKG5hbWUsIHRhYklkKSA9PiBuZXcgQ2hyb21lUG9ydE9ic2VydmFibGUobmFtZSwgdGFiSWQpXG5cdH0sXG5cdGRldGVjdDogZGV0ZWN0VHJhbnNwb3J0VHlwZSQxLFxuXHRtZXRhOiBnZXRUcmFuc3BvcnRNZXRhXG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC9zdG9yYWdlL1F1ZXVlZC50c1xudmFyIFF1ZXVlZFdvcmtlckNoYW5uZWwgPSBjbGFzcyB7XG5cdGNvbmZpZztcblx0b25DaGFubmVsUmVhZHk7XG5cdHVuZGVybHlpbmdDaGFubmVsID0gbnVsbDtcblx0aXNDb25uZWN0ZWQgPSBmYWxzZTtcblx0cmVxdWVzdFF1ZXVlID0gW107XG5cdGNvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcblx0Y29ubmVjdGlvblJlc29sdmVyID0gbnVsbDtcblx0Y29udGV4dDtcblx0Y29uc3RydWN0b3IoY29uZmlnLCBvbkNoYW5uZWxSZWFkeSkge1xuXHRcdHRoaXMuY29uZmlnID0gY29uZmlnO1xuXHRcdHRoaXMub25DaGFubmVsUmVhZHkgPSBvbkNoYW5uZWxSZWFkeTtcblx0XHR0aGlzLmNvbnRleHQgPSBjb25maWcuY29udGV4dCA/PyBcInVua25vd25cIjtcblx0fVxuXHRhc3luYyBjb25uZWN0KHVuZGVybHlpbmdDaGFubmVsID0gbnVsbCkge1xuXHRcdHRoaXMudW5kZXJseWluZ0NoYW5uZWwgPSB1bmRlcmx5aW5nQ2hhbm5lbDtcblx0fVxuXHRhc3luYyByZXF1ZXN0KG1ldGhvZCwgYXJncyA9IFtdKSB7XG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQgJiYgdGhpcy51bmRlcmx5aW5nQ2hhbm5lbCkgcmV0dXJuIHRoaXMudW5kZXJseWluZ0NoYW5uZWwucmVxdWVzdChtZXRob2QsIGFyZ3MpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZWRSZXF1ZXN0ID0ge1xuXHRcdFx0XHRpZDogVVVJRHY0KCksXG5cdFx0XHRcdG1ldGhvZCxcblx0XHRcdFx0YXJncyxcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH07XG5cdFx0XHR0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKHF1ZXVlZFJlcXVlc3QpO1xuXHRcdFx0aWYgKCF0aGlzLmNvbm5lY3Rpb25Qcm9taXNlKSB0aGlzLmNvbm5lY3QoKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0dGhpcy5yZWplY3RBbGxRdWV1ZWQoZXJyb3IpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZmx1c2hRdWV1ZSgpIHtcblx0XHRpZiAoIXRoaXMudW5kZXJseWluZ0NoYW5uZWwpIHJldHVybjtcblx0XHRjb25zdCBxdWV1ZUNvcHkgPSBbLi4udGhpcy5yZXF1ZXN0UXVldWVdO1xuXHRcdHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRSZXF1ZXN0IG9mIHF1ZXVlQ29weSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudW5kZXJseWluZ0NoYW5uZWwucmVxdWVzdChxdWV1ZWRSZXF1ZXN0Lm1ldGhvZCwgcXVldWVkUmVxdWVzdC5hcmdzKTtcblx0XHRcdHF1ZXVlZFJlcXVlc3QucmVzb2x2ZShyZXN1bHQpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRxdWV1ZWRSZXF1ZXN0LnJlamVjdChlcnJvcik7XG5cdFx0fVxuXHR9XG5cdHJlamVjdEFsbFF1ZXVlZChlcnJvcikge1xuXHRcdGNvbnN0IHF1ZXVlQ29weSA9IFsuLi50aGlzLnJlcXVlc3RRdWV1ZV07XG5cdFx0dGhpcy5yZXF1ZXN0UXVldWUgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHF1ZXVlZFJlcXVlc3Qgb2YgcXVldWVDb3B5KSBxdWV1ZWRSZXF1ZXN0LnJlamVjdChlcnJvcik7XG5cdH1cblx0Z2V0UXVldWVTdGF0dXMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlzQ29ubmVjdGVkOiB0aGlzLmlzQ29ubmVjdGVkLFxuXHRcdFx0cXVldWVkUmVxdWVzdHM6IHRoaXMucmVxdWVzdFF1ZXVlLmxlbmd0aCxcblx0XHRcdGlzQ29ubmVjdGluZzogISF0aGlzLmNvbm5lY3Rpb25Qcm9taXNlICYmICF0aGlzLmlzQ29ubmVjdGVkXG5cdFx0fTtcblx0fVxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLnJlamVjdEFsbFF1ZXVlZCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiQ2hhbm5lbCBjbG9zZWRcIikpO1xuXHRcdHRoaXMudW5kZXJseWluZ0NoYW5uZWw/LmNsb3NlKCk7XG5cdFx0dGhpcy51bmRlcmx5aW5nQ2hhbm5lbCA9IG51bGw7XG5cdFx0dGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY29ubmVjdGlvblByb21pc2UgPSBudWxsO1xuXHR9XG59O1xudmFyIGdldEN1cnJlbnRUYWJJZCA9IGFzeW5jICgpID0+IHtcblx0Y29uc3QgdGFicyA9IGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHtcblx0XHRhY3RpdmU6IHRydWUsXG5cdFx0Y3VycmVudFdpbmRvdzogdHJ1ZVxuXHR9KTtcblx0aWYgKHRhYnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBhY3RpdmUgdGFiIGZvdW5kXCIpO1xuXHRpZiAoIXRhYnNbMF0uaWQpIHRocm93IG5ldyBFcnJvcihcIkFjdGl2ZSB0YWIgaGFzIG5vIElEXCIpO1xuXHRyZXR1cm4gdGFic1swXS5pZDtcbn07XG52YXIgZ2V0VmlzaWJsZVRhYklkID0gYXN5bmMgKCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBhd2FpdCBnZXRDdXJyZW50VGFiSWQoKTtcblx0fSBjYXRjaCB7XG5cdFx0Y29uc3QgdmlzaWJsZVRhYiA9IChhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7IGN1cnJlbnRXaW5kb3c6IHRydWUgfSkpLmZpbmQoKHRhYikgPT4gdGFiLmFjdGl2ZSk7XG5cdFx0aWYgKCF2aXNpYmxlVGFiPy5pZCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlzaWJsZSB0YWIgZm91bmRcIik7XG5cdFx0cmV0dXJuIHZpc2libGVUYWIuaWQ7XG5cdH1cbn07XG52YXIgcmVnaXN0ZXJXb3JrZXJBUEkgPSAoYXBpLCBjaGFubmVsTmFtZSA9IFwid29ya2VyXCIpID0+IHtcblx0Y29uc3QgY2hhbm5lbEhhbmRsZXIgPSBpbml0Q2hhbm5lbEhhbmRsZXIoY2hhbm5lbE5hbWUgPz8gXCJ3b3JrZXJcIik7XG5cdE9iamVjdC5rZXlzKGFwaSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuXHRcdGlmICh0eXBlb2YgYXBpW21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHt9XG5cdH0pO1xuXHRyZXR1cm4gY2hhbm5lbEhhbmRsZXI7XG59O1xudmFyIE9wdGltaXplZFdvcmtlckNoYW5uZWwgPSBjbGFzcyB7XG5cdGNoYW5uZWwgPSBudWxsO1xuXHRpc0NoYW5uZWxSZWFkeSA9IGZhbHNlO1xuXHRwZW5kaW5nUmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRtZXNzYWdlUXVldWUgPSBbXTtcblx0cXVldWVkUmVxdWVzdHMgPSBbXTtcblx0YmF0Y2hUaW1lcjtcblx0b3B0aW9ucztcblx0b25DaGFubmVsUmVhZHk7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWwgPSBudWxsLCBvcHRpb25zID0ge30sIG9uQ2hhbm5lbFJlYWR5KSB7XG5cdFx0dGhpcy5jaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmlzQ2hhbm5lbFJlYWR5ID0gISFjaGFubmVsO1xuXHRcdHRoaXMub25DaGFubmVsUmVhZHkgPSBvbkNoYW5uZWxSZWFkeTtcblx0XHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0XHR0aW1lb3V0OiAzZTQsXG5cdFx0XHRyZXRyaWVzOiAzLFxuXHRcdFx0Y29tcHJlc3Npb246IGZhbHNlLFxuXHRcdFx0YmF0Y2hpbmc6IHRydWUsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblx0fVxuXHRzZXRDaGFubmVsKGNoYW5uZWwpIHtcblx0XHR0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuXHRcdHRoaXMuaXNDaGFubmVsUmVhZHkgPSB0cnVlO1xuXHRcdHRoaXMub25DaGFubmVsUmVhZHk/LihjaGFubmVsKTtcblx0XHR0aGlzLmZsdXNoUXVldWVkUmVxdWVzdHMoKTtcblx0fVxuXHRhc3luYyByZXF1ZXN0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcblx0XHRpZiAoIXRoaXMuaXNDaGFubmVsUmVhZHkgfHwgIXRoaXMuY2hhbm5lbCkgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHF1ZXVlZFJlcXVlc3QgPSB7XG5cdFx0XHRcdGlkOiBVVUlEdjQoKSxcblx0XHRcdFx0bWV0aG9kOiB0eXBlLFxuXHRcdFx0XHRhcmdzOiBbcGF5bG9hZF0sXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5xdWV1ZWRSZXF1ZXN0cy5wdXNoKHF1ZXVlZFJlcXVlc3QpO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9wdHMgPSB7XG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblx0XHRjb25zdCBtZXNzYWdlSWQgPSBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnBlbmRpbmdSZXF1ZXN0cy5kZWxldGUobWVzc2FnZUlkKTtcblx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHt0eXBlfWApKTtcblx0XHRcdH0sIG9wdHMudGltZW91dCk7XG5cdFx0XHR0aGlzLnBlbmRpbmdSZXF1ZXN0cy5zZXQobWVzc2FnZUlkLCB7XG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdCxcblx0XHRcdFx0dGltZW91dFxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBlbnZlbG9wZSA9IHtcblx0XHRcdFx0aWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0aWYgKG9wdHMuYmF0Y2hpbmcpIHRoaXMucXVldWVNZXNzYWdlKGVudmVsb3BlKTtcblx0XHRcdGVsc2UgdGhpcy5zZW5kTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZmx1c2hRdWV1ZWRSZXF1ZXN0cygpIHtcblx0XHRpZiAoIXRoaXMuY2hhbm5lbCB8fCB0aGlzLnF1ZXVlZFJlcXVlc3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXHRcdGNvbnN0IHF1ZXVlQ29weSA9IFsuLi50aGlzLnF1ZXVlZFJlcXVlc3RzXTtcblx0XHR0aGlzLnF1ZXVlZFJlcXVlc3RzID0gW107XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRSZXF1ZXN0IG9mIHF1ZXVlQ29weSkgdHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdChxdWV1ZWRSZXF1ZXN0Lm1ldGhvZCwgLi4ucXVldWVkUmVxdWVzdD8uYXJncyA/PyBbXSk7XG5cdFx0XHRxdWV1ZWRSZXF1ZXN0LnJlc29sdmUocmVzdWx0KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cXVldWVkUmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRub3RpZnkodHlwZSwgcGF5bG9hZCkge1xuXHRcdGNvbnN0IGVudmVsb3BlID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZSxcblx0XHRcdHBheWxvYWQsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdGlmICh0aGlzLm9wdGlvbnMuYmF0Y2hpbmcpIHRoaXMucXVldWVNZXNzYWdlKGVudmVsb3BlKTtcblx0XHRlbHNlIHRoaXMuc2VuZE1lc3NhZ2UoZW52ZWxvcGUpO1xuXHR9XG5cdGFzeW5jICpzdHJlYW0odHlwZSwgZGF0YSkge1xuXHRcdGZvciAoY29uc3QgY2h1bmsgb2YgZGF0YSkgeWllbGQgYXdhaXQgdGhpcy5yZXF1ZXN0KGAke3R5cGV9OmNodW5rYCwgY2h1bmspO1xuXHR9XG5cdHF1ZXVlTWVzc2FnZShlbnZlbG9wZSkge1xuXHRcdHRoaXMubWVzc2FnZVF1ZXVlLnB1c2goZW52ZWxvcGUpO1xuXHRcdGlmICghdGhpcy5iYXRjaFRpbWVyKSB0aGlzLmJhdGNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuZmx1c2hCYXRjaCgpO1xuXHRcdH0sIDE2KTtcblx0fVxuXHRmbHVzaEJhdGNoKCkge1xuXHRcdGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcblx0XHRjb25zdCBiYXRjaEVudmVsb3BlID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0dHlwZTogXCJiYXRjaFwiLFxuXHRcdFx0cGF5bG9hZDogdGhpcy5tZXNzYWdlUXVldWUsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdHRoaXMuc2VuZE1lc3NhZ2UoYmF0Y2hFbnZlbG9wZSk7XG5cdFx0dGhpcy5tZXNzYWdlUXVldWUgPSBbXTtcblx0XHR0aGlzLmJhdGNoVGltZXIgPSB2b2lkIDA7XG5cdH1cblx0YXN5bmMgc2VuZE1lc3NhZ2UoZW52ZWxvcGUpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGFubmVsPy5yZXF1ZXN0Py4oXCJwcm9jZXNzTWVzc2FnZVwiLCBbZW52ZWxvcGVdKTtcblx0XHRcdGlmIChlbnZlbG9wZS5yZXBseVRvICYmIHRoaXMucGVuZGluZ1JlcXVlc3RzLmhhcyhlbnZlbG9wZS5yZXBseVRvKSkge1xuXHRcdFx0XHRjb25zdCB7IHJlc29sdmUsIHRpbWVvdXQgfSA9IHRoaXMucGVuZGluZ1JlcXVlc3RzLmdldChlbnZlbG9wZS5yZXBseVRvKTtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHR0aGlzLnBlbmRpbmdSZXF1ZXN0cy5kZWxldGUoZW52ZWxvcGUucmVwbHlUbyk7XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0aWYgKHRoaXMucGVuZGluZ1JlcXVlc3RzLmhhcyhlbnZlbG9wZS5pZCkpIHtcblx0XHRcdFx0Y29uc3QgeyByZWplY3QsIHRpbWVvdXQgfSA9IHRoaXMucGVuZGluZ1JlcXVlc3RzLmdldChlbnZlbG9wZS5pZCk7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGVudmVsb3BlLmlkKTtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKHRoaXMuYmF0Y2hUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lcik7XG5cdFx0Zm9yIChjb25zdCBbaWQsIHsgcmVqZWN0LCB0aW1lb3V0IH1dIG9mIHRoaXMucGVuZGluZ1JlcXVlc3RzKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRyZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkNoYW5uZWwgY2xvc2VkXCIpKTtcblx0XHR9XG5cdFx0dGhpcy5wZW5kaW5nUmVxdWVzdHMuY2xlYXIoKTtcblx0XHR0aGlzLmNoYW5uZWw/LmNsb3NlPy4oKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL21lc3NhZ2luZy9NZXNzYWdlUXVldWUudHNcbnZhciBNZXNzYWdlUXVldWUgPSBjbGFzcyBNZXNzYWdlUXVldWUge1xuXHRkYiA9IG51bGw7XG5cdGRiUHJvbWlzZSA9IG51bGw7XG5cdG9wdGlvbnM7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuXHRcdHRoaXMub3B0aW9ucyA9IHtcblx0XHRcdGRiTmFtZTogb3B0aW9ucy5kYk5hbWUgPz8gXCJVbmlmb3JtTWVzc2FnZVF1ZXVlXCIsXG5cdFx0XHRzdG9yZU5hbWU6IG9wdGlvbnMuc3RvcmVOYW1lID8/IFwibWVzc2FnZXNcIixcblx0XHRcdG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyAzLFxuXHRcdFx0ZGVmYXVsdEV4cGlyYXRpb25Nczogb3B0aW9ucy5kZWZhdWx0RXhwaXJhdGlvbk1zID8/IDg2NGU1LFxuXHRcdFx0ZmFsbGJhY2tTdG9yYWdlS2V5OiBvcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSA/PyBcInVuaWZvcm1fbWVzc2FnZV9xdWV1ZVwiXG5cdFx0fTtcblx0fVxuXHRhc3luYyBpbml0REIoKSB7XG5cdFx0aWYgKHRoaXMuZGIpIHJldHVybiB0aGlzLmRiO1xuXHRcdGlmICh0aGlzLmRiUHJvbWlzZSkgcmV0dXJuIHRoaXMuZGJQcm9taXNlO1xuXHRcdGlmICghTWVzc2FnZVF1ZXVlLmlzSW5kZXhlZERCQXZhaWxhYmxlKCkpIHtcblx0XHRcdGNvbnNvbGUud2FybihcIltNZXNzYWdlUXVldWVdIEluZGV4ZWREQiBub3QgYXZhaWxhYmxlLCB1c2luZyBzZXNzaW9uU3RvcmFnZSBmYWxsYmFja1wiKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHR0aGlzLmRiUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3Blbih0aGlzLm9wdGlvbnMuZGJOYW1lLCAxKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcblx0XHRcdFx0Y29uc29sZS53YXJuKFwiW01lc3NhZ2VRdWV1ZV0gSW5kZXhlZERCIG9wZW4gZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gc2Vzc2lvblN0b3JhZ2VcIik7XG5cdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKFwiSW5kZXhlZERCIG5vdCBhdmFpbGFibGVcIikpO1xuXHRcdFx0fTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmRiID0gcmVxdWVzdC5yZXN1bHQ7XG5cdFx0XHRcdHJlc29sdmUodGhpcy5kYik7XG5cdFx0XHR9O1xuXHRcdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXHRcdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy5vcHRpb25zLnN0b3JlTmFtZSkpIHtcblx0XHRcdFx0XHRjb25zdCBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIHsga2V5UGF0aDogXCJpZFwiIH0pO1xuXHRcdFx0XHRcdHN0b3JlLmNyZWF0ZUluZGV4KFwidGltZXN0YW1wXCIsIFwidGltZXN0YW1wXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInR5cGVcIiwgXCJ0eXBlXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRzdG9yZS5jcmVhdGVJbmRleChcInByaW9yaXR5XCIsIFwicHJpb3JpdHlcIiwgeyB1bmlxdWU6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdHN0b3JlLmNyZWF0ZUluZGV4KFwiZGVzdGluYXRpb25cIiwgXCJkZXN0aW5hdGlvblwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuZGIgPSBhd2FpdCB0aGlzLmRiUHJvbWlzZTtcblx0XHRcdHJldHVybiB0aGlzLmRiO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cdGdlbmVyYXRlSWQoKSB7XG5cdFx0cmV0dXJuIGBtc2dfJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSl9YDtcblx0fVxuXHRhc3luYyBxdWV1ZU1lc3NhZ2UodHlwZSwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdGlkOiB0aGlzLmdlbmVyYXRlSWQoKSxcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRhLFxuXHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0cHJpb3JpdHk6IG9wdGlvbnMucHJpb3JpdHkgPz8gXCJub3JtYWxcIixcblx0XHRcdHJldHJ5Q291bnQ6IDAsXG5cdFx0XHRtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gdGhpcy5vcHRpb25zLm1heFJldHJpZXMsXG5cdFx0XHRleHBpcmVzQXQ6IG9wdGlvbnMuZXhwaXJlc0F0ID8/IERhdGUubm93KCkgKyB0aGlzLm9wdGlvbnMuZGVmYXVsdEV4cGlyYXRpb25Ncyxcblx0XHRcdGRlc3RpbmF0aW9uOiBvcHRpb25zLmRlc3RpbmF0aW9uLFxuXHRcdFx0bWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGFcblx0XHR9O1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMuYWRkVG9JbmRleGVkREIoZGIsIG1lc3NhZ2UpO1xuXHRcdFx0ZWxzZSB0aGlzLmFkZFRvU2Vzc2lvblN0b3JhZ2UobWVzc2FnZSk7XG5cdFx0XHRjb25zb2xlLmxvZyhgW01lc3NhZ2VRdWV1ZV0gUXVldWVkIG1lc3NhZ2U6ICR7dHlwZX1gLCBtZXNzYWdlLmlkKTtcblx0XHRcdHJldHVybiBtZXNzYWdlLmlkO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW01lc3NhZ2VRdWV1ZV0gRmFpbGVkIHRvIHF1ZXVlIG1lc3NhZ2U6XCIsIGVycm9yKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxuXHRhc3luYyBnZXRRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbikge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRsZXQgbWVzc2FnZXM7XG5cdFx0XHRpZiAoZGIpIG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRBbGxGcm9tSW5kZXhlZERCKGRiKTtcblx0XHRcdGVsc2UgbWVzc2FnZXMgPSB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuXHRcdFx0aWYgKGRlc3RpbmF0aW9uKSBtZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnKSA9PiBtc2cuZGVzdGluYXRpb24gPT09IGRlc3RpbmF0aW9uKTtcblx0XHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtc2cpID0+ICFtc2cuZXhwaXJlc0F0IHx8IG1zZy5leHBpcmVzQXQgPiBub3cpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW01lc3NhZ2VRdWV1ZV0gRmFpbGVkIHRvIGdldCBxdWV1ZWQgbWVzc2FnZXM6XCIsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuXHRcdH1cblx0fVxuXHRhc3luYyByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYiA9IGF3YWl0IHRoaXMuaW5pdERCKCk7XG5cdFx0XHRpZiAoZGIpIGF3YWl0IHRoaXMuZGVsZXRlRnJvbUluZGV4ZWREQihkYiwgbWVzc2FnZUlkKTtcblx0XHRcdGVsc2UgdGhpcy5kZWxldGVGcm9tU2Vzc2lvblN0b3JhZ2UobWVzc2FnZUlkKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byByZW1vdmUgbWVzc2FnZTpcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRhc3luYyB1cGRhdGVNZXNzYWdlUmV0cnkobWVzc2FnZUlkLCByZXRyeUNvdW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5pbml0REIoKTtcblx0XHRcdGlmIChkYikgYXdhaXQgdGhpcy51cGRhdGVJbkluZGV4ZWREQihkYiwgbWVzc2FnZUlkLCB7IHJldHJ5Q291bnQgfSk7XG5cdFx0XHRlbHNlIHRoaXMudXBkYXRlSW5TZXNzaW9uU3RvcmFnZShtZXNzYWdlSWQsIHsgcmV0cnlDb3VudCB9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byB1cGRhdGUgbWVzc2FnZSByZXRyeTpcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRhc3luYyBjbGVhckV4cGlyZWRNZXNzYWdlcygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmdldFF1ZXVlZE1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0Y29uc3QgZXhwaXJlZElkcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnKSA9PiBtc2cuZXhwaXJlc0F0ICYmIG1zZy5leHBpcmVzQXQgPD0gbm93KS5tYXAoKG1zZykgPT4gbXNnLmlkKTtcblx0XHRcdGZvciAoY29uc3QgaWQgb2YgZXhwaXJlZElkcykgYXdhaXQgdGhpcy5yZW1vdmVNZXNzYWdlKGlkKTtcblx0XHRcdGlmIChleHBpcmVkSWRzLmxlbmd0aCA+IDApIGNvbnNvbGUubG9nKGBbTWVzc2FnZVF1ZXVlXSBDbGVhcmVkICR7ZXhwaXJlZElkcy5sZW5ndGh9IGV4cGlyZWQgbWVzc2FnZXNgKTtcblx0XHRcdHJldHVybiBleHBpcmVkSWRzLmxlbmd0aDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIltNZXNzYWdlUXVldWVdIEZhaWxlZCB0byBjbGVhciBleHBpcmVkIG1lc3NhZ2VzOlwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdH1cblx0YXN5bmMgY2xlYXJBbGwoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRiID0gYXdhaXQgdGhpcy5pbml0REIoKTtcblx0XHRcdGlmIChkYikgYXdhaXQgdGhpcy5jbGVhckluZGV4ZWREQihkYik7XG5cdFx0XHRlbHNlIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSk7XG5cdFx0XHRjb25zb2xlLmxvZyhcIltNZXNzYWdlUXVldWVdIENsZWFyZWQgYWxsIG1lc3NhZ2VzXCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiW01lc3NhZ2VRdWV1ZV0gRmFpbGVkIHRvIGNsZWFyIGFsbCBtZXNzYWdlczpcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRhc3luYyBnZXRTdGF0cygpIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuZ2V0UXVldWVkTWVzc2FnZXMoKTtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGJ5UHJpb3JpdHkgPSB7XG5cdFx0XHRsb3c6IDAsXG5cdFx0XHRub3JtYWw6IDAsXG5cdFx0XHRoaWdoOiAwXG5cdFx0fTtcblx0XHRjb25zdCBieURlc3RpbmF0aW9uID0ge307XG5cdFx0bGV0IGV4cGlyZWQgPSAwO1xuXHRcdGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRieVByaW9yaXR5W21zZy5wcmlvcml0eV0rKztcblx0XHRcdGlmIChtc2cuZGVzdGluYXRpb24pIGJ5RGVzdGluYXRpb25bbXNnLmRlc3RpbmF0aW9uXSA9IChieURlc3RpbmF0aW9uW21zZy5kZXN0aW5hdGlvbl0gfHwgMCkgKyAxO1xuXHRcdFx0aWYgKG1zZy5leHBpcmVzQXQgJiYgbXNnLmV4cGlyZXNBdCA8PSBub3cpIGV4cGlyZWQrKztcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvdGFsOiBtZXNzYWdlcy5sZW5ndGgsXG5cdFx0XHRieVByaW9yaXR5LFxuXHRcdFx0YnlEZXN0aW5hdGlvbixcblx0XHRcdGV4cGlyZWRcblx0XHR9O1xuXHR9XG5cdGFzeW5jIGFkZFRvSW5kZXhlZERCKGRiLCBtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpLmFkZChtZXNzYWdlKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIGdldEFsbEZyb21JbmRleGVkREIoZGIpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFt0aGlzLm9wdGlvbnMuc3RvcmVOYW1lXSwgXCJyZWFkb25seVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKS5nZXRBbGwoKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG5cdFx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fSk7XG5cdH1cblx0YXN5bmMgZGVsZXRlRnJvbUluZGV4ZWREQihkYiwgaWQpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IGRiLnRyYW5zYWN0aW9uKFt0aGlzLm9wdGlvbnMuc3RvcmVOYW1lXSwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSkuZGVsZXRlKGlkKTtcblx0XHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHVwZGF0ZUluSW5kZXhlZERCKGRiLCBpZCwgdXBkYXRlcykge1xuXHRcdGNvbnN0IHN0b3JlID0gZGIudHJhbnNhY3Rpb24oW3RoaXMub3B0aW9ucy5zdG9yZU5hbWVdLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTtcblx0XHRjb25zdCBtZXNzYWdlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdCA9IHN0b3JlLmdldChpZCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdH0pO1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRPYmplY3QuYXNzaWduKG1lc3NhZ2UsIHVwZGF0ZXMpO1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0ID0gc3RvcmUucHV0KG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdFx0cmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNsZWFySW5kZXhlZERCKGRiKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBkYi50cmFuc2FjdGlvbihbdGhpcy5vcHRpb25zLnN0b3JlTmFtZV0sIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpLmNsZWFyKCk7XG5cdFx0XHRyZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoKTtcblx0XHRcdHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9KTtcblx0fVxuXHRnZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHN0b3JlZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSk7XG5cdFx0XHRyZXR1cm4gc3RvcmVkID8gSlNPTi5wYXJzZShzdG9yZWQpIDogW107XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHR9XG5cdGFkZFRvU2Vzc2lvblN0b3JhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXRBbGxGcm9tU2Vzc2lvblN0b3JhZ2UoKTtcblx0XHRleGlzdGluZy5wdXNoKG1lc3NhZ2UpO1xuXHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKTtcblx0fVxuXHRkZWxldGVGcm9tU2Vzc2lvblN0b3JhZ2UoaWQpIHtcblx0XHRjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZ2V0QWxsRnJvbVNlc3Npb25TdG9yYWdlKCkuZmlsdGVyKChtc2cpID0+IG1zZy5pZCAhPT0gaWQpO1xuXHRcdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5vcHRpb25zLmZhbGxiYWNrU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWQpKTtcblx0fVxuXHR1cGRhdGVJblNlc3Npb25TdG9yYWdlKGlkLCB1cGRhdGVzKSB7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldEFsbEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSBleGlzdGluZy5maW5kKChtc2cpID0+IG1zZy5pZCA9PT0gaWQpO1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRPYmplY3QuYXNzaWduKG1lc3NhZ2UsIHVwZGF0ZXMpO1xuXHRcdFx0c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm9wdGlvbnMuZmFsbGJhY2tTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShleGlzdGluZykpO1xuXHRcdH1cblx0fVxuXHRzdGF0aWMgaXNJbmRleGVkREJBdmFpbGFibGUoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB0eXBlb2YgaW5kZXhlZERCICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBJREJUcmFuc2FjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgSURCS2V5UmFuZ2UgIT09IFwidW5kZWZpbmVkXCI7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG59O1xudmFyIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRNZXNzYWdlUXVldWUob3B0aW9ucykge1xuXHRjb25zdCBrZXkgPSBvcHRpb25zPy5kYk5hbWUgPz8gXCJkZWZhdWx0XCI7XG5cdGlmICghaW5zdGFuY2VzLmhhcyhrZXkpKSBpbnN0YW5jZXMuc2V0KGtleSwgbmV3IE1lc3NhZ2VRdWV1ZShvcHRpb25zKSk7XG5cdHJldHVybiBpbnN0YW5jZXMuZ2V0KGtleSk7XG59XG5mdW5jdGlvbiBjcmVhdGVNZXNzYWdlUXVldWUob3B0aW9ucykge1xuXHRyZXR1cm4gbmV3IE1lc3NhZ2VRdWV1ZShvcHRpb25zKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvdXRpbHMvV3JhcHBlcnMudHNcbnZhciBydW50aW1lTGlzdGVuZXJSZWdpc3RyeSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcnVudGltZUxpc3RlbmVySW5zdGFsbGVkID0gZmFsc2U7XG52YXIgZW5zdXJlUnVudGltZUxpc3RlbmVyID0gKCkgPT4ge1xuXHRpZiAocnVudGltZUxpc3RlbmVySW5zdGFsbGVkKSByZXR1cm47XG5cdHJ1bnRpbWVMaXN0ZW5lckluc3RhbGxlZCA9IHRydWU7XG5cdGNocm9tZT8ucnVudGltZT8ub25NZXNzYWdlPy5hZGRMaXN0ZW5lcj8uKChtZXNzYWdlLCBzZW5kZXIsIHNlbmRSZXNwb25zZSkgPT4ge1xuXHRcdGNvbnN0IGNoYW5uZWxOYW1lID0gbWVzc2FnZT8uY2hhbm5lbE5hbWUgPz8gbWVzc2FnZT8udGFyZ2V0O1xuXHRcdGlmICghY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSBydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQoY2hhbm5lbE5hbWUpO1xuXHRcdGlmICghbGlzdGVuZXJzIHx8IGxpc3RlbmVycy5zaXplID09PSAwKSByZXR1cm47XG5cdFx0Y29uc3QgZXZlbnQgPSB7XG5cdFx0XHRkYXRhOiBtZXNzYWdlLFxuXHRcdFx0b3JpZ2luOiBzZW5kZXI/LnVybCB8fCBcImNocm9tZS1leHRlbnNpb25cIixcblx0XHRcdHNvdXJjZTogc2VuZGVyXG5cdFx0fTtcblx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykgdHJ5IHtcblx0XHRcdGNvbnN0IG91dCA9IGxpc3RlbmVyKGV2ZW50LCBzZW5kZXIsIHNlbmRSZXNwb25zZSk7XG5cdFx0XHRpZiAob3V0ICYmIHR5cGVvZiBvdXQ/LmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIG91dC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoXCJbQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbF0gTGlzdGVuZXIgZXJyb3I6XCIsIGVycm9yKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbF0gTGlzdGVuZXIgZXJyb3I6XCIsIGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufTtcbnZhciBDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsID0gY2xhc3Mge1xuXHRjaGFubmVsTmFtZTtcblx0bGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Y29uc3RydWN0b3IoY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG5cdFx0ZW5zdXJlUnVudGltZUxpc3RlbmVyKCk7XG5cdH1cblx0YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0eXBlICE9PSBcIm1lc3NhZ2VcIikgcmV0dXJuO1xuXHRcdHRoaXMubGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG5cdFx0bGV0IHNldCA9IHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKTtcblx0XHRpZiAoIXNldCkge1xuXHRcdFx0c2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRcdHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LnNldCh0aGlzLmNoYW5uZWxOYW1lLCBzZXQpO1xuXHRcdH1cblx0XHRzZXQuYWRkKGxpc3RlbmVyKTtcblx0fVxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKHR5cGUgIT09IFwibWVzc2FnZVwiKSByZXR1cm47XG5cdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRydW50aW1lTGlzdGVuZXJSZWdpc3RyeS5nZXQodGhpcy5jaGFubmVsTmFtZSk/LmRlbGV0ZShsaXN0ZW5lcik7XG5cdH1cblx0cG9zdE1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IG1lc3NhZ2VXaXRoQ2hhbm5lbCA9IHtcblx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRjaGFubmVsTmFtZTogdGhpcy5jaGFubmVsTmFtZSxcblx0XHRcdHNvdXJjZTogXCJicm9hZGNhc3QtY2hhbm5lbFwiXG5cdFx0fTtcblx0XHRjaHJvbWU/LnJ1bnRpbWU/LnNlbmRNZXNzYWdlPy4obWVzc2FnZVdpdGhDaGFubmVsLCAoKSA9PiB2b2lkIDApO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKT8uZGVsZXRlKGxpc3RlbmVyKTtcblx0XHR0aGlzLmxpc3RlbmVycy5jbGVhcigpO1xuXHR9XG59O1xudmFyIENocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsID0gY2xhc3Mge1xuXHR3cmFwcGVkQnlPcmlnaW5hbCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHdyYXBwZWRMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjaGFubmVsTmFtZTtcblx0bW9kZSA9IFwiYnJvYWRjYXN0XCI7XG5cdHRhYkZpbHRlcjtcblx0dGFiSWRHZXR0ZXI7XG5cdGNvbnN0cnVjdG9yKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7XG5cdFx0dGhpcy5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuXHRcdHRoaXMubW9kZSA9IG9wdGlvbnM/Lm1vZGUgfHwgXCJicm9hZGNhc3RcIjtcblx0XHR0aGlzLnRhYkZpbHRlciA9IG9wdGlvbnM/LnRhYkZpbHRlcjtcblx0XHR0aGlzLnRhYklkR2V0dGVyID0gb3B0aW9ucz8udGFiSWRHZXR0ZXIgfHwgdGhpcy5nZXRDdXJyZW50VGFiSWQ7XG5cdFx0dGhpcy5zdGFydExpc3RlbmluZygpO1xuXHR9XG5cdHN0YXJ0TGlzdGVuaW5nKCkge1xuXHRcdGVuc3VyZVJ1bnRpbWVMaXN0ZW5lcigpO1xuXHR9XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHRpZiAodGhpcy53cmFwcGVkQnlPcmlnaW5hbC5nZXQobGlzdGVuZXIpKSByZXR1cm47XG5cdFx0Y29uc3Qgd3JhcHBlZCA9IGFzeW5jIChldmVudCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcblx0XHRcdGV2ZW50Py5kYXRhO1xuXHRcdFx0aWYgKCFzZW5kZXI/LnRhYikgcmV0dXJuO1xuXHRcdFx0aWYgKHRoaXMubW9kZSA9PT0gXCJjdXJyZW50LXRhYlwiKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFRhYklkID0gYXdhaXQgdGhpcy50YWJJZEdldHRlcj8uKCk7XG5cdFx0XHRcdGlmICh0eXBlb2YgdGFyZ2V0VGFiSWQgPT09IFwibnVtYmVyXCIgJiYgc2VuZGVyLnRhYi5pZCAhPT0gdGFyZ2V0VGFiSWQpIHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLm1vZGUgPT09IFwiYnJvYWRjYXN0XCIgJiYgdGhpcy50YWJGaWx0ZXIgJiYgIXRoaXMudGFiRmlsdGVyKHNlbmRlci50YWIpKSByZXR1cm47XG5cdFx0XHRyZXR1cm4gbGlzdGVuZXIoe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0b3JpZ2luOiBzZW5kZXIudXJsIHx8IFwiY2hyb21lLWV4dGVuc2lvbi10YWJcIixcblx0XHRcdFx0dGFiOiBzZW5kZXIudGFiXG5cdFx0XHR9LCBzZW5kZXIsIHNlbmRSZXNwb25zZSk7XG5cdFx0fTtcblx0XHR0aGlzLndyYXBwZWRCeU9yaWdpbmFsLnNldChsaXN0ZW5lciwgd3JhcHBlZCk7XG5cdFx0dGhpcy53cmFwcGVkTGlzdGVuZXJzLmFkZCh3cmFwcGVkKTtcblx0XHRsZXQgc2V0ID0gcnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KHRoaXMuY2hhbm5lbE5hbWUpO1xuXHRcdGlmICghc2V0KSB7XG5cdFx0XHRzZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdFx0cnVudGltZUxpc3RlbmVyUmVnaXN0cnkuc2V0KHRoaXMuY2hhbm5lbE5hbWUsIHNldCk7XG5cdFx0fVxuXHRcdHNldC5hZGQod3JhcHBlZCk7XG5cdH1cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGlmICh0eXBlICE9PSBcIm1lc3NhZ2VcIikgcmV0dXJuO1xuXHRcdGNvbnN0IHdyYXBwZWQgPSB0aGlzLndyYXBwZWRCeU9yaWdpbmFsLmdldChsaXN0ZW5lcik7XG5cdFx0aWYgKCF3cmFwcGVkKSByZXR1cm47XG5cdFx0dGhpcy53cmFwcGVkQnlPcmlnaW5hbC5kZWxldGUobGlzdGVuZXIpO1xuXHRcdHRoaXMud3JhcHBlZExpc3RlbmVycy5kZWxldGUod3JhcHBlZCk7XG5cdFx0cnVudGltZUxpc3RlbmVyUmVnaXN0cnkuZ2V0KHRoaXMuY2hhbm5lbE5hbWUpPy5kZWxldGUod3JhcHBlZCk7XG5cdH1cblx0c2VuZFRvVGFiKHRhYklkLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZVdpdGhDaGFubmVsID0ge1xuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwidGFicy1jaGFubmVsXCIsXG5cdFx0XHQuLi5tZXNzYWdlXG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y2hyb21lPy50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYklkLCBtZXNzYWdlV2l0aENoYW5uZWwsIChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRpZiAoY2hyb21lPy5ydW50aW1lPy5sYXN0RXJyb3IpIHJlamVjdChuZXcgRXJyb3IoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcblx0XHRcdFx0ZWxzZSByZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGFzeW5jIHNlbmRUb0FjdGl2ZVRhYihtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXMubW9kZSA9PT0gXCJjdXJyZW50LXRhYlwiICYmIHRoaXMudGFiSWRHZXR0ZXIpIHtcblx0XHRcdGNvbnN0IHRhYklkID0gYXdhaXQgdGhpcy50YWJJZEdldHRlcigpO1xuXHRcdFx0cmV0dXJuIHRoaXMuc2VuZFRvVGFiKHRhYklkLCBtZXNzYWdlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdGFicyA9IGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHtcblx0XHRcdFx0YWN0aXZlOiB0cnVlLFxuXHRcdFx0XHRjdXJyZW50V2luZG93OiB0cnVlXG5cdFx0XHR9KTtcblx0XHRcdGlmICh0YWJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aXZlIHRhYiBmb3VuZFwiKTtcblx0XHRcdHJldHVybiB0aGlzLnNlbmRUb1RhYih0YWJzWzBdLmlkLCBtZXNzYWdlKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgYnJvYWRjYXN0VG9UYWJzKG1lc3NhZ2UsIG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5tb2RlID09PSBcImN1cnJlbnQtdGFiXCIpIHRyeSB7XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFRvQWN0aXZlVGFiKG1lc3NhZ2UpO1xuXHRcdFx0cmV0dXJuIFt7XG5cdFx0XHRcdHRhYklkOiBhd2FpdCB0aGlzLnRhYklkR2V0dGVyKCksXG5cdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHR9XTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0cmV0dXJuIFt7IGVycm9yIH1dO1xuXHRcdH1cblx0XHRjb25zdCBxdWVyeSA9IHsgc3RhdHVzOiBcImNvbXBsZXRlXCIgfTtcblx0XHRpZiAoIW9wdGlvbnM/LmFsbFdpbmRvd3MpIHF1ZXJ5LmN1cnJlbnRXaW5kb3cgPSB0cnVlO1xuXHRcdGNvbnN0IHRhcmdldFRhYnMgPSAoYXdhaXQgY2hyb21lLnRhYnMucXVlcnkocXVlcnkpKS5maWx0ZXIoKHRhYikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbnM/LnRhYkZpbHRlciAmJiAhb3B0aW9ucy50YWJGaWx0ZXIodGFiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMudGFiRmlsdGVyICYmICF0aGlzLnRhYkZpbHRlcih0YWIpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0XHRjb25zdCBtZXNzYWdlV2l0aENoYW5uZWwgPSB7XG5cdFx0XHRjaGFubmVsTmFtZTogdGhpcy5jaGFubmVsTmFtZSxcblx0XHRcdHNvdXJjZTogXCJ0YWJzLWNoYW5uZWxcIixcblx0XHRcdC4uLm1lc3NhZ2Vcblx0XHR9O1xuXHRcdGNvbnN0IHByb21pc2VzID0gdGFyZ2V0VGFicy5tYXAoKHRhYikgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y2hyb21lPy50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYi5pZCwgbWVzc2FnZVdpdGhDaGFubmVsLCAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKGNocm9tZT8ucnVudGltZT8ubGFzdEVycm9yKSByZWplY3QobmV3IEVycm9yKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG5cdFx0XHRcdGVsc2UgcmVzb2x2ZSh7XG5cdFx0XHRcdFx0dGFiSWQ6IHRhYi5pZCxcblx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcblx0fVxuXHRhc3luYyBwb3N0TWVzc2FnZShtZXNzYWdlKSB7XG5cdFx0Y29uc3QgdGFiSWQgPSBhd2FpdCB0aGlzLnRhYklkR2V0dGVyKCk7XG5cdFx0Y29uc3QgbWVzc2FnZVdpdGhDaGFubmVsID0ge1xuXHRcdFx0Y2hhbm5lbE5hbWU6IHRoaXMuY2hhbm5lbE5hbWUsXG5cdFx0XHRzb3VyY2U6IFwidGFicy1jaGFubmVsXCIsXG5cdFx0XHQuLi5tZXNzYWdlXG5cdFx0fTtcblx0XHRyZXR1cm4gY2hyb21lPy50YWJzPy5zZW5kTWVzc2FnZT8uKHRhYklkLCBtZXNzYWdlV2l0aENoYW5uZWwsICgpID0+IHZvaWQgMCk7XG5cdH1cblx0YXN5bmMgZ2V0Q3VycmVudFRhYklkKCkge1xuXHRcdGlmICh0aGlzLnRhYklkR2V0dGVyKSByZXR1cm4gYXdhaXQgdGhpcy50YWJJZEdldHRlcigpO1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGNsb3NlKCkge1xuXHRcdGZvciAoY29uc3Qgd3JhcHBlZCBvZiB0aGlzLndyYXBwZWRMaXN0ZW5lcnMpIHJ1bnRpbWVMaXN0ZW5lclJlZ2lzdHJ5LmdldCh0aGlzLmNoYW5uZWxOYW1lKT8uZGVsZXRlKHdyYXBwZWQpO1xuXHRcdHRoaXMud3JhcHBlZExpc3RlbmVycy5jbGVhcigpO1xuXHRcdHRoaXMud3JhcHBlZEJ5T3JpZ2luYWwuY2xlYXIoKTtcblx0fVxufTtcbnZhciBDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbCA9IGNsYXNzIHtcblx0cG9ydDtcblx0Y2hhbm5lbE5hbWU7XG5cdGxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0cnVjdG9yKHBvcnQsIGNoYW5uZWxOYW1lKSB7XG5cdFx0dGhpcy5wb3J0ID0gcG9ydDtcblx0XHR0aGlzLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG5cdFx0dGhpcy5wb3J0Py5vbk1lc3NhZ2U/LmFkZExpc3RlbmVyPy4oKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmICgobWVzc2FnZT8uY2hhbm5lbE5hbWUgPz8gbWVzc2FnZT8udGFyZ2V0KSAhPT0gdGhpcy5jaGFubmVsTmFtZSkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgZXZlbnQgPSB7XG5cdFx0XHRcdGRhdGE6IG1lc3NhZ2UsXG5cdFx0XHRcdG9yaWdpbjogXCJjaHJvbWUtZXh0ZW5zaW9uLXBvcnRcIixcblx0XHRcdFx0c291cmNlOiB0aGlzLnBvcnRcblx0XHRcdH07XG5cdFx0XHRmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB0cnkge1xuXHRcdFx0XHRsaXN0ZW5lcihldmVudCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKFwiW0Nocm9tZUV4dGVuc2lvblBvcnRDaGFubmVsXSBMaXN0ZW5lciBlcnJvcjpcIiwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHR0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuXHR9XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcblx0XHRpZiAodHlwZSAhPT0gXCJtZXNzYWdlXCIpIHJldHVybjtcblx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHR9XG5cdHBvc3RNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHR0aGlzLnBvcnQ/LnBvc3RNZXNzYWdlPy4oe1xuXHRcdFx0Li4ubWVzc2FnZSxcblx0XHRcdGNoYW5uZWxOYW1lOiB0aGlzLmNoYW5uZWxOYW1lLFxuXHRcdFx0c291cmNlOiBcInBvcnQtY2hhbm5lbFwiXG5cdFx0fSk7XG5cdH1cblx0Y2xvc2UoKSB7XG5cdFx0dGhpcy5saXN0ZW5lcnMuY2xlYXIoKTtcblx0XHR0aGlzLnBvcnQ/LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbmV3ZXIvbmV4dC91dGlscy9VdGlscy50c1xudmFyIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkNoYW5uZWwgPSBhc3luYyAoY29uZmlnKSA9PiB7XG5cdGxldCB3b3JrZXI7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiBjb25maWcuc2NyaXB0ICE9PSBcInN0cmluZ1wiKSB0aHJvdyBuZXcgRXJyb3IoXCJDaHJvbWUgZXh0ZW5zaW9uIHdvcmtlciBjaGFubmVsIHJlcXVpcmVzIGNvbmZpZy5zY3JpcHQgdG8gYmUgYSBzdHJpbmcgcGF0aFwiKTtcblx0XHR3b3JrZXIgPSBuZXcgV29ya2VyKGNocm9tZS5ydW50aW1lLmdldFVSTChjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCA9PT0gXCJzdHJpbmdcIikgd29ya2VyID0gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBjb25maWcuc2NyaXB0ID09PSBcImZ1bmN0aW9uXCIpIHdvcmtlciA9IGNvbmZpZy5zY3JpcHQoKTtcblx0XHRlbHNlIHdvcmtlciA9IGNvbmZpZy5zY3JpcHQ7XG5cdH1cblx0Y29uc3QgY2hhbm5lbCA9IGF3YWl0IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNvbmZpZy5uYW1lLCB7fSwgd29ya2VyKTtcblx0cmV0dXJuIGNoYW5uZWw/LnJlbW90ZSA/PyBjaGFubmVsO1xufTtcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3QgPSAoY2hhbm5lbE5hbWUpID0+IHtcblx0cmV0dXJuIG5ldyBDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKTtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCA9IChjaGFubmVsTmFtZSkgPT4ge1xuXHRjb25zdCB3b3JrZXIgPSBuZXcgQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG5cdGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwge30sIHdvcmtlcik7XG5cdHJldHVybiBjaGFubmVsPy5yZW1vdGUgPz8gY2hhbm5lbDtcbn07XG52YXIgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic0NoYW5uZWwgPSAoY2hhbm5lbE5hbWUsIG9wdGlvbnMpID0+IHtcblx0Y29uc3Qgd29ya2VyID0gbmV3IENocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsKGNoYW5uZWxOYW1lLCBvcHRpb25zKTtcblx0Y29uc3QgY2hhbm5lbCA9IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNoYW5uZWxOYW1lLCB7fSwgd29ya2VyKTtcblx0cmV0dXJuIGNoYW5uZWw/LnJlbW90ZSA/PyBjaGFubmVsO1xufTtcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzTWVzc2FnaW5nQ2hhbm5lbCA9IChjaGFubmVsTmFtZSwgb3B0aW9ucykgPT4ge1xuXHRyZXR1cm4gY3JlYXRlQ2hyb21lRXh0ZW5zaW9uVGFic0NoYW5uZWwoY2hhbm5lbE5hbWUsIG9wdGlvbnMpO1xufTtcbnZhciBpbml0TWFpbkNoYW5uZWwgPSAobmFtZSA9IFwiJGhvc3QkXCIpID0+IHtcblx0cmV0dXJuIGluaXRDaGFubmVsSGFuZGxlcihuYW1lID8/IFwiJGhvc3QkXCIpO1xufTtcbnZhciBjcmVhdGVRdWV1ZWRXb3JrZXJDaGFubmVsID0gKGNvbmZpZywgb25DaGFubmVsUmVhZHkpID0+IHtcblx0cmV0dXJuIG5ldyBRdWV1ZWRXb3JrZXJDaGFubmVsKGNvbmZpZywgb25DaGFubmVsUmVhZHkpO1xufTtcbnZhciBjcmVhdGVTZXJ2aWNlV29ya2VyQ2hhbm5lbCA9IGFzeW5jIChjb25maWcpID0+IHtcblx0cmV0dXJuIHtcblx0XHRhc3luYyByZXF1ZXN0KG1ldGhvZCwgYXJncyA9IFtdKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoYCR7Y29uZmlnLm5hbWV9LXN3LWNoYW5uZWxgKTtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZUlkID0gVVVJRHY0KCk7XG5cdFx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRjaGFubmVsLmNsb3NlKCk7XG5cdFx0XHRcdFx0cmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRXJyb3IoYFNlcnZpY2Ugd29ya2VyIHJlcXVlc3QgdGltZW91dDogJHttZXRob2R9YCkpO1xuXHRcdFx0XHR9LCAxZTQpO1xuXHRcdFx0XHRjaGFubmVsLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgaWQsIHJlc3VsdCwgZXJyb3IgfSA9IGV2ZW50LmRhdGE7XG5cdFx0XHRcdFx0aWYgKGlkID09PSBtZXNzYWdlSWQpIHtcblx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRcdGNoYW5uZWwuY2xvc2UoKTtcblx0XHRcdFx0XHRcdGlmIChlcnJvcikgcmVqZWN0KG5ldyBFcnJvcihlcnJvcikpO1xuXHRcdFx0XHRcdFx0ZWxzZSByZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjaGFubmVsLnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0XHRpZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRcdHR5cGU6IFwicmVxdWVzdFwiLFxuXHRcdFx0XHRcdG1ldGhvZCxcblx0XHRcdFx0XHRhcmdzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRjbG9zZSgpIHt9XG5cdH07XG59O1xudmFyIGNyZWF0ZVdvcmtlckNoYW5uZWwgPSBhc3luYyAoY29uZmlnKSA9PiB7XG5cdGNvbnN0IGNvbnRleHQgPSBjb25maWcuY29udGV4dDtcblx0aWYgKGNvbnRleHQgPT09IFwic2VydmljZS13b3JrZXJcIikgcmV0dXJuIGNyZWF0ZVNlcnZpY2VXb3JrZXJDaGFubmVsKGNvbmZpZyk7XG5cdGxldCB3b3JrZXI7XG5cdGlmICh0eXBlb2YgY29uZmlnLnNjcmlwdCA9PT0gXCJmdW5jdGlvblwiKSB3b3JrZXIgPSBjb25maWcuc2NyaXB0KCk7XG5cdGVsc2UgaWYgKGNvbmZpZy5zY3JpcHQgaW5zdGFuY2VvZiBXb3JrZXIpIHdvcmtlciA9IGNvbmZpZy5zY3JpcHQ7XG5cdGVsc2UgaWYgKGNvbnRleHQgPT09IFwiY2hyb21lLWV4dGVuc2lvblwiKSB0cnkge1xuXHRcdHdvcmtlciA9IG5ldyBXb3JrZXIoY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKGNvbmZpZy5zY3JpcHQpLCBjb25maWcub3B0aW9ucyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0d29ya2VyID0gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHR9XG5cdGVsc2Ugd29ya2VyID0gbmV3IFdvcmtlcihyZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZihjb25maWcuc2NyaXB0KSwgY29uZmlnLm9wdGlvbnMpO1xuXHRyZXR1cm4gYXdhaXQgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwoY29uZmlnLm5hbWUsIHt9LCB3b3JrZXIpO1xufTtcbnZhciBjcmVhdGVPcHRpbWl6ZWRXb3JrZXJDaGFubmVsID0gYXN5bmMgKGNvbmZpZywgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBiYXNlQ2hhbm5lbCA9IGF3YWl0IGNyZWF0ZVdvcmtlckNoYW5uZWwoY29uZmlnKTtcblx0cmV0dXJuIG5ldyBPcHRpbWl6ZWRXb3JrZXJDaGFubmVsKGJhc2VDaGFubmVsLCBvcHRpb25zKTtcbn07XG52YXIgY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCA9IChjb25maWcsIG9wdGlvbnMsIG9uQ2hhbm5lbFJlYWR5KSA9PiB7XG5cdGNvbnN0IG9wdGltaXplZENoYW5uZWwgPSBuZXcgT3B0aW1pemVkV29ya2VyQ2hhbm5lbChudWxsLCBvcHRpb25zLCBvbkNoYW5uZWxSZWFkeSk7XG5cdGNyZWF0ZVdvcmtlckNoYW5uZWwoY29uZmlnKS50aGVuKChiYXNlQ2hhbm5lbCkgPT4ge1xuXHRcdG9wdGltaXplZENoYW5uZWwuc2V0Q2hhbm5lbChiYXNlQ2hhbm5lbCk7XG5cdH0pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJbY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbF0gRmFpbGVkIHRvIGNyZWF0ZSBiYXNlIGNoYW5uZWw6XCIsIGVycm9yKTtcblx0XHRvcHRpbWl6ZWRDaGFubmVsLmNsb3NlKCk7XG5cdH0pO1xuXHRyZXR1cm4gb3B0aW1pemVkQ2hhbm5lbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9uZXdlci9tZXNzYWdpbmcvUHJvdG9jb2wudHNcbnZhciBQVVJQT1NFUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtcblx0XCJpbnZva2VcIixcblx0XCJtYWlsXCIsXG5cdFwiYXR0YWNoXCIsXG5cdFwiZGVsaXZlclwiLFxuXHRcImRlZmVyXCJcbl0pO1xudmFyIERFRkFVTFRfUFVSUE9TRSA9IFwibWFpbFwiO1xudmFyIGFzU3RyaW5nID0gKHZhbHVlKSA9PiBTdHJpbmcodmFsdWUgPz8gXCJcIikudHJpbSgpO1xudmFyIG5vcm1hbGl6ZVBhdGggPSAocGF0aCkgPT4ge1xuXHRpZiAoIXBhdGgpIHJldHVybiB2b2lkIDA7XG5cdGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF0pLm1hcChhc1N0cmluZykuZmlsdGVyKEJvb2xlYW4pO1xuXHRyZXR1cm4gbm9ybWFsaXplZC5sZW5ndGggPiAwID8gbm9ybWFsaXplZCA6IHZvaWQgMDtcbn07XG52YXIgbm9ybWFsaXplQXJncyA9IChhcmdzKSA9PiB7XG5cdGlmIChhcmdzID09IG51bGwpIHJldHVybiB2b2lkIDA7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXTtcbn07XG52YXIgbm9ybWFsaXplVHJhbnNmZXIgPSAodHJhbnNmZXIpID0+IHtcblx0aWYgKHRyYW5zZmVyID09IG51bGwpIHJldHVybiB2b2lkIDA7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHRyYW5zZmVyKSA/IHRyYW5zZmVyIDogW3RyYW5zZmVyXTtcbn07XG52YXIgbm9ybWFsaXplUHVycG9zZSA9IChwdXJwb3NlKSA9PiB7XG5cdGNvbnN0IGlucHV0ID0gQXJyYXkuaXNBcnJheShwdXJwb3NlKSA/IHB1cnBvc2UgOiBwdXJwb3NlID8gW3B1cnBvc2VdIDogW0RFRkFVTFRfUFVSUE9TRV07XG5cdGNvbnN0IGRlZHVwZWQgPSBbXTtcblx0Zm9yIChjb25zdCBlbnRyeSBvZiBpbnB1dCkgaWYgKFBVUlBPU0VTLmhhcyhlbnRyeSkgJiYgIWRlZHVwZWQuaW5jbHVkZXMoZW50cnkpKSBkZWR1cGVkLnB1c2goZW50cnkpO1xuXHRyZXR1cm4gZGVkdXBlZC5sZW5ndGggPiAwID8gZGVkdXBlZCA6IFtERUZBVUxUX1BVUlBPU0VdO1xufTtcbnZhciBpbmZlclR5cGUgPSAoaW5wdXQpID0+IHtcblx0Y29uc3QgZXhwbGljaXQgPSBhc1N0cmluZyhpbnB1dC50eXBlKTtcblx0aWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG5cdGNvbnN0IG9wID0gYXNTdHJpbmcoaW5wdXQub3ApO1xuXHRpZiAob3AgPT09IFwiZ2V0XCIgfHwgb3AgPT09IFwic2V0XCIgfHwgb3AgPT09IFwiYXBwbHlcIiB8fCBvcCA9PT0gXCJpbXBvcnRcIikgcmV0dXJuIFwiaW52b2tlXCI7XG5cdGlmIChpbnB1dC5lcnJvcikgcmV0dXJuIFwicmVzcG9uc2VcIjtcblx0cmV0dXJuIFwicmVxdWVzdFwiO1xufTtcbnZhciBpbmZlck9wZXJhdGlvbiA9IChpbnB1dCwgcmVzb2x2ZWRUeXBlKSA9PiB7XG5cdGlmIChpbnB1dC5vcCkgcmV0dXJuIGlucHV0Lm9wO1xuXHRpZiAocmVzb2x2ZWRUeXBlID09PSBcImludm9rZVwiKSByZXR1cm4gXCJpbnZva2VcIjtcblx0aWYgKHJlc29sdmVkVHlwZSA9PT0gXCJhY3RcIikgcmV0dXJuIFwiZGVsaXZlclwiO1xuXHRyZXR1cm4gXCJtYWlsXCI7XG59O1xudmFyIGluZmVyUHJvdG9jb2wgPSAocHJvdG9jb2wpID0+IHtcblx0Y29uc3QgdmFsdWUgPSBhc1N0cmluZyhwcm90b2NvbCkudG9Mb3dlckNhc2UoKTtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIFwidW5rbm93blwiO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xudmFyIHJhbmRvbUlkID0gKCkgPT4ge1xuXHRpZiAodHlwZW9mIGNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG5cdHJldHVybiBgdW5pZm9ybV8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWA7XG59O1xudmFyIGNyZWF0ZVByb3RvY29sRW52ZWxvcGUgPSAoaW5wdXQpID0+IHtcblx0Y29uc3QgdGltZXN0YW1wID0gTnVtYmVyLmlzRmluaXRlKGlucHV0LnRpbWVzdGFtcCkgPyBOdW1iZXIoaW5wdXQudGltZXN0YW1wKSA6IERhdGUubm93KCk7XG5cdGNvbnN0IHNvdXJjZSA9IGFzU3RyaW5nKGlucHV0LnNyY0NoYW5uZWwgPz8gaW5wdXQuc291cmNlKSB8fCBcInVuaWZvcm1cIjtcblx0Y29uc3QgZGVzdGluYXRpb24gPSBhc1N0cmluZyhpbnB1dC5kZXN0aW5hdGlvbik7XG5cdGNvbnN0IGRzdENoYW5uZWwgPSBpbnB1dC5kc3RDaGFubmVsID8/IChkZXN0aW5hdGlvbiA/IGRlc3RpbmF0aW9uIDogdm9pZCAwKTtcblx0Y29uc3QgdXVpZCA9IGFzU3RyaW5nKGlucHV0LnV1aWQgPz8gaW5wdXQuaWQpIHx8IHJhbmRvbUlkKCk7XG5cdGNvbnN0IHR5cGUgPSBpbmZlclR5cGUoaW5wdXQpO1xuXHRjb25zdCBwYXlsb2FkID0gaW5wdXQucGF5bG9hZCA/PyBpbnB1dC5kYXRhO1xuXHRjb25zdCBtZXRhZGF0YSA9IHsgLi4uaW5wdXQubWV0YWRhdGEgPz8ge30gfTtcblx0cmV0dXJuIHtcblx0XHRwdXJwb3NlOiBub3JtYWxpemVQdXJwb3NlKGlucHV0LnB1cnBvc2UpLFxuXHRcdHByb3RvY29sOiBpbmZlclByb3RvY29sKGlucHV0LnByb3RvY29sKSxcblx0XHRyZWRpcmVjdDogQm9vbGVhbihpbnB1dC5yZWRpcmVjdCksXG5cdFx0ZmxhZ3M6IHsgLi4uaW5wdXQuZmxhZ3MgPz8ge30gfSxcblx0XHR0eXBlLFxuXHRcdHBhdGg6IG5vcm1hbGl6ZVBhdGgoaW5wdXQucGF0aCksXG5cdFx0cmVzdWx0OiBpbnB1dC5yZXN1bHQsXG5cdFx0YXJnczogbm9ybWFsaXplQXJncyhpbnB1dC5hcmdzKSxcblx0XHRvcDogaW5mZXJPcGVyYXRpb24oaW5wdXQsIHR5cGUpLFxuXHRcdGVycm9yOiBpbnB1dC5lcnJvciA/IFN0cmluZyhpbnB1dC5lcnJvcikgOiB2b2lkIDAsXG5cdFx0dGltZXN0YW1wLFxuXHRcdHdoZXJlOiBhc1N0cmluZyhpbnB1dC53aGVyZSkgfHwgdm9pZCAwLFxuXHRcdHV1aWQsXG5cdFx0YnJpZGdlczogQXJyYXkuaXNBcnJheShpbnB1dC5icmlkZ2VzKSA/IGlucHV0LmJyaWRnZXMubWFwKGFzU3RyaW5nKS5maWx0ZXIoQm9vbGVhbikgOiBbXSxcblx0XHRwYXlsb2FkLFxuXHRcdHRyYW5zZmVyOiBub3JtYWxpemVUcmFuc2ZlcihpbnB1dC50cmFuc2ZlciksXG5cdFx0ZXh0ZW5zaW9uOiBpbnB1dC5leHRlbnNpb24sXG5cdFx0ZGVmZXI6IGlucHV0LmRlZmVyLFxuXHRcdHNyY0NoYW5uZWw6IHNvdXJjZSxcblx0XHRkc3RDaGFubmVsLFxuXHRcdGlkOiB1dWlkLFxuXHRcdHNvdXJjZSxcblx0XHRkZXN0aW5hdGlvbjogZGVzdGluYXRpb24gfHwgdm9pZCAwLFxuXHRcdGRhdGE6IHBheWxvYWQsXG5cdFx0Y29udGVudFR5cGU6IGFzU3RyaW5nKGlucHV0LmNvbnRlbnRUeXBlKSB8fCB2b2lkIDAsXG5cdFx0bWV0YWRhdGFcblx0fTtcbn07XG52YXIgaXNQcm90b2NvbEVudmVsb3BlID0gKHZhbHVlKSA9PiB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuXHRyZXR1cm4gdHlwZW9mIGNhbmRpZGF0ZS51dWlkID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBjYW5kaWRhdGUuc3JjQ2hhbm5lbCA9PT0gXCJzdHJpbmdcIiAmJiBBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5wdXJwb3NlKSAmJiB0eXBlb2YgY2FuZGlkYXRlLnR5cGUgPT09IFwic3RyaW5nXCI7XG59O1xudmFyIG5vcm1hbGl6ZVByb3RvY29sRW52ZWxvcGUgPSAodmFsdWUpID0+IGlzUHJvdG9jb2xFbnZlbG9wZSh2YWx1ZSkgPyBjcmVhdGVQcm90b2NvbEVudmVsb3BlKHZhbHVlKSA6IGNyZWF0ZVByb3RvY29sRW52ZWxvcGUodmFsdWUpO1xudmFyIFByb3RvY29sUmVwbGF5R3VhcmQgPSBjbGFzcyB7XG5cdHNlZW4gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHR3aW5kb3dNcztcblx0Y29uc3RydWN0b3Iod2luZG93TXMgPSAzMDApIHtcblx0XHR0aGlzLndpbmRvd01zID0gTWF0aC5tYXgoMTAsIHdpbmRvd01zKTtcblx0fVxuXHRhY2NlcHQoZW52ZWxvcGUpIHtcblx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdGNvbnN0IGtleSA9IGVudmVsb3BlLnV1aWQ7XG5cdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLnNlZW4uZ2V0KGtleSk7XG5cdFx0dGhpcy5wcnVuZShub3cpO1xuXHRcdGlmIChwcmV2aW91cyAmJiBub3cgLSBwcmV2aW91cyA8PSB0aGlzLndpbmRvd01zKSByZXR1cm4gZmFsc2U7XG5cdFx0dGhpcy5zZWVuLnNldChrZXksIG5vdyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cHJ1bmUobm93KSB7XG5cdFx0Zm9yIChjb25zdCBbaWQsIHRzXSBvZiB0aGlzLnNlZW4uZW50cmllcygpKSBpZiAobm93IC0gdHMgPiB0aGlzLndpbmRvd01zKSB0aGlzLnNlZW4uZGVsZXRlKGlkKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL21lc3NhZ2luZy9VbmlmaWVkTWVzc2FnaW5nLnRzXG52YXIgUGVuZGluZ01lc3NhZ2VTdG9yZSA9IGNsYXNzIHtcblx0c3RvcmFnZUtleTtcblx0bWF4TWVzc2FnZXM7XG5cdGRlZmF1bHRUVExNcztcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHRoaXMuc3RvcmFnZUtleSA9IG9wdGlvbnM/LnN0b3JhZ2VLZXkgPz8gXCJ1bmlmb3JtLW1lc3NhZ2luZy1wZW5kaW5nXCI7XG5cdFx0dGhpcy5tYXhNZXNzYWdlcyA9IG9wdGlvbnM/Lm1heE1lc3NhZ2VzID8/IDIwMDtcblx0XHR0aGlzLmRlZmF1bHRUVExNcyA9IG9wdGlvbnM/LmRlZmF1bHRUVExNcyA/PyA4NjRlNTtcblx0fVxuXHRyZWFkKCkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBsb2NhbFN0b3JhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBbXTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcblx0XHRcdGlmICghcmF3KSByZXR1cm4gW107XG5cdFx0XHRjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIDogW107XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHR9XG5cdHdyaXRlKGVudHJpZXMpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgbG9jYWxTdG9yYWdlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG5cdFx0dHJ5IHtcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoZW50cmllcykpO1xuXHRcdH0gY2F0Y2gge31cblx0fVxuXHRlbnF1ZXVlKGRlc3RpbmF0aW9uLCBtZXNzYWdlKSB7XG5cdFx0aWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0aWYgKChOdW1iZXIobWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgPyBNYXRoLm1heCgwLCBOdW1iZXIobWVzc2FnZS5tZXRhZGF0YS5leHBpcmVzQXQpIC0gbm93KSA6IHRoaXMuZGVmYXVsdFRUTE1zKSA8PSAwKSByZXR1cm47XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMucmVhZCgpLmZpbHRlcigoZSkgPT4gZSAmJiB0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikuZmlsdGVyKChlKSA9PiB7XG5cdFx0XHRyZXR1cm4gKE51bWJlcihlPy5tZXNzYWdlPy5tZXRhZGF0YT8uZXhwaXJlc0F0KSB8fCBOdW1iZXIoZT8uc3RvcmVkQXQpICsgdGhpcy5kZWZhdWx0VFRMTXMpID4gbm93O1xuXHRcdH0pO1xuXHRcdGVudHJpZXMucHVzaCh7XG5cdFx0XHRkZXN0aW5hdGlvbixcblx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRzdG9yZWRBdDogbm93XG5cdFx0fSk7XG5cdFx0aWYgKGVudHJpZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcykgZW50cmllcy5zcGxpY2UoMCwgZW50cmllcy5sZW5ndGggLSB0aGlzLm1heE1lc3NhZ2VzKTtcblx0XHR0aGlzLndyaXRlKGVudHJpZXMpO1xuXHR9XG5cdGRyYWluKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIFtdO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMucmVhZCgpO1xuXHRcdGNvbnN0IGtlZXAgPSBbXTtcblx0XHRjb25zdCBvdXQgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuXHRcdFx0aWYgKChOdW1iZXIoZT8ubWVzc2FnZT8ubWV0YWRhdGE/LmV4cGlyZXNBdCkgfHwgTnVtYmVyKGU/LnN0b3JlZEF0KSArIHRoaXMuZGVmYXVsdFRUTE1zKSA8PSBub3cpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGU/LmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbiAmJiBlPy5tZXNzYWdlKSBvdXQucHVzaChlLm1lc3NhZ2UpO1xuXHRcdFx0ZWxzZSBrZWVwLnB1c2goZSk7XG5cdFx0fVxuXHRcdHRoaXMud3JpdGUoa2VlcCk7XG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXHRoYXMoZGVzdGluYXRpb24pIHtcblx0XHRpZiAoIWRlc3RpbmF0aW9uKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRyZXR1cm4gdGhpcy5yZWFkKCkuc29tZSgoZSkgPT4ge1xuXHRcdFx0aWYgKCFlIHx8IHR5cGVvZiBlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRyZXR1cm4gKE51bWJlcihlPy5tZXNzYWdlPy5tZXRhZGF0YT8uZXhwaXJlc0F0KSB8fCBOdW1iZXIoZT8uc3RvcmVkQXQpICsgdGhpcy5kZWZhdWx0VFRMTXMpID4gbm93ICYmIGU/LmRlc3RpbmF0aW9uID09PSBkZXN0aW5hdGlvbjtcblx0XHR9KTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLndyaXRlKFtdKTtcblx0fVxufTtcbnZhciBVbmlmaWVkTWVzc2FnaW5nTWFuYWdlciA9IGNsYXNzIHtcblx0aGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjaGFubmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHdvcmtlckNoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0dmlld0NoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cGlwZWxpbmVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bWVzc2FnZVF1ZXVlO1xuXHRwZW5kaW5nU3RvcmU7XG5cdGluaXRpYWxpemVkVmlld3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHR2aWV3UmVhZHlQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGV4ZWN1dGlvbkNvbnRleHQ7XG5cdGNoYW5uZWxNYXBwaW5ncztcblx0Y29tcG9uZW50UmVnaXN0cnkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRyZXBsYXlHdWFyZCA9IG5ldyBQcm90b2NvbFJlcGxheUd1YXJkKDMwMCk7XG5cdGxvY2FsQ2hhbm5lbElkID0gXCJcIjtcblx0Y29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcblx0XHR0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPSBkZXRlY3RFeGVjdXRpb25Db250ZXh0KCk7XG5cdFx0dGhpcy5sb2NhbENoYW5uZWxJZCA9IGAke3RoaXMuZXhlY3V0aW9uQ29udGV4dH06JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCl9YDtcblx0XHR0aGlzLmNoYW5uZWxNYXBwaW5ncyA9IGNvbmZpZy5jaGFubmVsTWFwcGluZ3MgPz8ge307XG5cdFx0dGhpcy5tZXNzYWdlUXVldWUgPSBnZXRNZXNzYWdlUXVldWUoY29uZmlnLnF1ZXVlT3B0aW9ucyk7XG5cdFx0dGhpcy5wZW5kaW5nU3RvcmUgPSBuZXcgUGVuZGluZ01lc3NhZ2VTdG9yZShjb25maWcucGVuZGluZ1N0b3JlT3B0aW9ucyk7XG5cdFx0dGhpcy5zZXR1cEdsb2JhbExpc3RlbmVycygpO1xuXHR9XG5cdHJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcikge1xuXHRcdGlmICghdGhpcy5oYW5kbGVycy5oYXMoZGVzdGluYXRpb24pKSB0aGlzLmhhbmRsZXJzLnNldChkZXN0aW5hdGlvbiwgW10pO1xuXHRcdHRoaXMuaGFuZGxlcnMuZ2V0KGRlc3RpbmF0aW9uKS5wdXNoKGhhbmRsZXIpO1xuXHR9XG5cdHVucmVnaXN0ZXJIYW5kbGVyKGRlc3RpbmF0aW9uLCBoYW5kbGVyKSB7XG5cdFx0Y29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmdldChkZXN0aW5hdGlvbik7XG5cdFx0aWYgKGhhbmRsZXJzKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoaGFuZGxlcik7XG5cdFx0XHRpZiAoaW5kZXggPiAtMSkgaGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgc2VuZE1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IGZ1bGxNZXNzYWdlID0gdGhpcy50b1Byb3RvY29sTWVzc2FnZShtZXNzYWdlKTtcblx0XHRpZiAoYXdhaXQgdGhpcy50cnlEZWxpdmVyTWVzc2FnZShmdWxsTWVzc2FnZSkpIHJldHVybiB0cnVlO1xuXHRcdGlmIChmdWxsTWVzc2FnZS5kZXN0aW5hdGlvbikge1xuXHRcdFx0dGhpcy5wZW5kaW5nU3RvcmUuZW5xdWV1ZShmdWxsTWVzc2FnZS5kZXN0aW5hdGlvbiwgZnVsbE1lc3NhZ2UpO1xuXHRcdFx0YXdhaXQgdGhpcy5tZXNzYWdlUXVldWUucXVldWVNZXNzYWdlKGZ1bGxNZXNzYWdlLnR5cGUsIGZ1bGxNZXNzYWdlLCB7XG5cdFx0XHRcdHByaW9yaXR5OiBmdWxsTWVzc2FnZS5tZXRhZGF0YT8ucHJpb3JpdHkgPz8gXCJub3JtYWxcIixcblx0XHRcdFx0bWF4UmV0cmllczogTnVtYmVyKGZ1bGxNZXNzYWdlLm1ldGFkYXRhPy5tYXhSZXRyaWVzID8/IDMpLFxuXHRcdFx0XHRkZXN0aW5hdGlvbjogZnVsbE1lc3NhZ2UuZGVzdGluYXRpb25cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0YXN5bmMgcHJvY2Vzc01lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlKG1lc3NhZ2UpO1xuXHRcdGlmICghdGhpcy5yZXBsYXlHdWFyZC5hY2NlcHQobm9ybWFsaXplZCkpIHJldHVybjtcblx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IG5vcm1hbGl6ZWQuZGVzdGluYXRpb24gPz8gXCJnZW5lcmFsXCI7XG5cdFx0Y29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmdldChkZXN0aW5hdGlvbikgPz8gW107XG5cdFx0Zm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSBpZiAoaGFuZGxlci5jYW5IYW5kbGUobm9ybWFsaXplZCkpIHRyeSB7XG5cdFx0XHRhd2FpdCBoYW5kbGVyLmhhbmRsZShub3JtYWxpemVkKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgW1VuaWZpZWRNZXNzYWdpbmddIEhhbmRsZXIgZXJyb3IgZm9yICR7ZGVzdGluYXRpb259OmAsIGVycm9yKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgdHJ5RGVsaXZlck1lc3NhZ2UobWVzc2FnZSkge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQcm90b2NvbEVudmVsb3BlKG1lc3NhZ2UpO1xuXHRcdGlmIChub3JtYWxpemVkLmRlc3RpbmF0aW9uICYmIHRoaXMuaGFuZGxlcnMuaGFzKG5vcm1hbGl6ZWQuZGVzdGluYXRpb24pKSB7XG5cdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NNZXNzYWdlKG5vcm1hbGl6ZWQpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGNoYW5uZWxOYW1lID0gdGhpcy5nZXRDaGFubmVsRm9yRGVzdGluYXRpb24obm9ybWFsaXplZC5kZXN0aW5hdGlvbik7XG5cdFx0aWYgKGNoYW5uZWxOYW1lICYmIHRoaXMuY2hhbm5lbHMuaGFzKGNoYW5uZWxOYW1lKSkge1xuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IHRoaXMuY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0XHRcdGlmIChjaGFubmVsIGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgdHJ5IHtcblx0XHRcdFx0Y2hhbm5lbC5wb3N0TWVzc2FnZShub3JtYWxpemVkKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBGYWlsZWQgdG8gcG9zdCB0byBicm9hZGNhc3QgY2hhbm5lbCAke2NoYW5uZWxOYW1lfTpgLCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaGFubmVsICYmIFwicmVxdWVzdFwiIGluIGNoYW5uZWwpIHRyeSB7XG5cdFx0XHRcdGF3YWl0IGNoYW5uZWwucmVxdWVzdChub3JtYWxpemVkLnR5cGUsIFtub3JtYWxpemVkXSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHBvc3QgdG8gd29ya2VyIGNoYW5uZWwgJHtjaGFubmVsTmFtZX06YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmVnaXN0ZXJWaWV3Q2hhbm5lbHModmlld0hhc2gsIGNvbmZpZ3MpIHtcblx0XHRjb25zdCBjaGFubmVsTmFtZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcblx0XHRcdGlmICghdGhpcy5pc1dvcmtlclN1cHBvcnRlZChjb25maWcpKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gU2tpcHBpbmcgd29ya2VyICcke2NvbmZpZy5uYW1lfScgaW4gJHt0aGlzLmV4ZWN1dGlvbkNvbnRleHR9IGNvbnRleHRgKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjaGFubmVsID0gY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCh7XG5cdFx0XHRcdG5hbWU6IGNvbmZpZy5uYW1lLFxuXHRcdFx0XHRzY3JpcHQ6IGNvbmZpZy5zY3JpcHQsXG5cdFx0XHRcdG9wdGlvbnM6IGNvbmZpZy5vcHRpb25zLFxuXHRcdFx0XHRjb250ZXh0OiB0aGlzLnJlc29sdmVXb3JrZXJDb250ZXh0KClcblx0XHRcdH0sIGNvbmZpZy5wcm90b2NvbE9wdGlvbnMsICgpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coYFtVbmlmaWVkTWVzc2FnaW5nXSBDaGFubmVsICcke2NvbmZpZy5uYW1lfScgcmVhZHkgZm9yIHZpZXcgJyR7dmlld0hhc2h9J2ApO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBjaGFubmVsS2V5ID0gYCR7dmlld0hhc2h9OiR7Y29uZmlnLm5hbWV9YDtcblx0XHRcdHRoaXMud29ya2VyQ2hhbm5lbHMuc2V0KGNoYW5uZWxLZXksIGNoYW5uZWwpO1xuXHRcdFx0dGhpcy5jaGFubmVscy5zZXQoY2hhbm5lbEtleSwgY2hhbm5lbCk7XG5cdFx0XHRjaGFubmVsTmFtZXMuYWRkKGNvbmZpZy5uYW1lKTtcblx0XHR9XG5cdFx0dGhpcy52aWV3Q2hhbm5lbHMuc2V0KHZpZXdIYXNoLCBjaGFubmVsTmFtZXMpO1xuXHR9XG5cdGFzeW5jIGluaXRpYWxpemVWaWV3Q2hhbm5lbHModmlld0hhc2gpIHtcblx0XHRpZiAodGhpcy5pbml0aWFsaXplZFZpZXdzLmhhcyh2aWV3SGFzaCkpIHJldHVybjtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuY3JlYXRlRGVmZXJyZWQoKTtcblx0XHR0aGlzLnZpZXdSZWFkeVByb21pc2VzLnNldCh2aWV3SGFzaCwgZGVmZXJyZWQpO1xuXHRcdGNvbnNvbGUubG9nKGBbVW5pZmllZE1lc3NhZ2luZ10gSW5pdGlhbGl6aW5nIGNoYW5uZWxzIGZvciB2aWV3OiAke3ZpZXdIYXNofWApO1xuXHRcdGNvbnN0IGNoYW5uZWxOYW1lcyA9IHRoaXMudmlld0NoYW5uZWxzLmdldCh2aWV3SGFzaCk7XG5cdFx0aWYgKCFjaGFubmVsTmFtZXMpIHtcblx0XHRcdGRlZmVycmVkLnJlc29sdmUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgaW5pdFByb21pc2VzID0gW107XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsTmFtZSBvZiBjaGFubmVsTmFtZXMpIHtcblx0XHRcdGNvbnN0IGNoYW5uZWxLZXkgPSBgJHt2aWV3SGFzaH06JHtjaGFubmVsTmFtZX1gO1xuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IHRoaXMud29ya2VyQ2hhbm5lbHMuZ2V0KGNoYW5uZWxLZXkpO1xuXHRcdFx0aWYgKGNoYW5uZWwpIGluaXRQcm9taXNlcy5wdXNoKGNoYW5uZWwucmVxdWVzdChcInBpbmdcIiwge30pLmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coYFtVbmlmaWVkTWVzc2FnaW5nXSBDaGFubmVsICcke2NoYW5uZWxOYW1lfScgcXVldWVkIGZvciB2aWV3ICcke3ZpZXdIYXNofSdgKTtcblx0XHRcdH0pKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGluaXRQcm9taXNlcyk7XG5cdFx0dGhpcy5pbml0aWFsaXplZFZpZXdzLmFkZCh2aWV3SGFzaCk7XG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSgpO1xuXHR9XG5cdGdldFdvcmtlckNoYW5uZWwodmlld0hhc2gsIHdvcmtlck5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy53b3JrZXJDaGFubmVscy5nZXQoYCR7dmlld0hhc2h9OiR7d29ya2VyTmFtZX1gKSA/PyBudWxsO1xuXHR9XG5cdGdldEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpIHtcblx0XHRpZiAoIXRoaXMuY2hhbm5lbHMuaGFzKGNoYW5uZWxOYW1lKSkgdHJ5IHtcblx0XHRcdGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSk7XG5cdFx0XHRjaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUJyb2FkY2FzdE1lc3NhZ2UoZXZlbnQuZGF0YSwgY2hhbm5lbE5hbWUpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmNoYW5uZWxzLnNldChjaGFubmVsTmFtZSwgY2hhbm5lbCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUud2FybihgW1VuaWZpZWRNZXNzYWdpbmddIEJyb2FkY2FzdENoYW5uZWwgbm90IGF2YWlsYWJsZTogJHtjaGFubmVsTmFtZX1gLCBlcnJvcik7XG5cdFx0XHR0aGlzLmNoYW5uZWxzLnNldChjaGFubmVsTmFtZSwge1xuXHRcdFx0XHRwb3N0TWVzc2FnZTogKCkgPT4ge30sXG5cdFx0XHRcdGNsb3NlOiAoKSA9PiB7fSxcblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcjogKCkgPT4ge30sXG5cdFx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXI6ICgpID0+IHt9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY2hhbm5lbHMuZ2V0KGNoYW5uZWxOYW1lKTtcblx0fVxuXHRhc3luYyBoYW5kbGVCcm9hZGNhc3RNZXNzYWdlKG1lc3NhZ2UsIGNoYW5uZWxOYW1lKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGVudmVsb3BlID0gdGhpcy50b1Byb3RvY29sTWVzc2FnZShtZXNzYWdlID8/IHt9LCBjaGFubmVsTmFtZSk7XG5cdFx0XHRpZiAoZW52ZWxvcGUuc3JjQ2hhbm5lbCA9PT0gdGhpcy5sb2NhbENoYW5uZWxJZCkgcmV0dXJuO1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzTWVzc2FnZShlbnZlbG9wZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFtVbmlmaWVkTWVzc2FnaW5nXSBFcnJvciBoYW5kbGluZyBicm9hZGNhc3QgbWVzc2FnZSBvbiAke2NoYW5uZWxOYW1lfTpgLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cdHJlZ2lzdGVyUGlwZWxpbmUoY29uZmlnKSB7XG5cdFx0dGhpcy5waXBlbGluZXMuc2V0KGNvbmZpZy5uYW1lLCBjb25maWcpO1xuXHR9XG5cdGFzeW5jIHByb2Nlc3NUaHJvdWdoUGlwZWxpbmUocGlwZWxpbmVOYW1lLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3QgcGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lcy5nZXQocGlwZWxpbmVOYW1lKTtcblx0XHRpZiAoIXBpcGVsaW5lKSB0aHJvdyBuZXcgRXJyb3IoYFBpcGVsaW5lICcke3BpcGVsaW5lTmFtZX0nIG5vdCBmb3VuZGApO1xuXHRcdGxldCBjdXJyZW50TWVzc2FnZSA9IHsgLi4ubWVzc2FnZSB9O1xuXHRcdGNvbnN0IHRpbWVvdXQgPSBwaXBlbGluZS50aW1lb3V0ID8/IDNlNDtcblx0XHRmb3IgKGNvbnN0IHN0YWdlIG9mIHBpcGVsaW5lLnN0YWdlcykge1xuXHRcdFx0Y29uc3Qgc3RhZ2VUaW1lb3V0ID0gc3RhZ2UudGltZW91dCA/PyB0aW1lb3V0O1xuXHRcdFx0Y29uc3QgcmV0cmllcyA9IHN0YWdlLnJldHJpZXMgPz8gMDtcblx0XHRcdGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IHJldHJpZXM7IGF0dGVtcHQrKykgdHJ5IHtcblx0XHRcdFx0Y3VycmVudE1lc3NhZ2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3N0YWdlLmhhbmRsZXIoY3VycmVudE1lc3NhZ2UpLCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCgvKiBAX19QVVJFX18gKi8gbmV3IEVycm9yKGBTdGFnZSAnJHtzdGFnZS5uYW1lfScgdGltZW91dGApKSwgc3RhZ2VUaW1lb3V0KSldKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRpZiAoYXR0ZW1wdCA9PT0gcmV0cmllcykge1xuXHRcdFx0XHRcdGlmIChwaXBlbGluZS5lcnJvckhhbmRsZXIpIHBpcGVsaW5lLmVycm9ySGFuZGxlcihlcnJvciwgc3RhZ2UsIGN1cnJlbnRNZXNzYWdlKTtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBQaXBlbGluZSAnJHtwaXBlbGluZU5hbWV9JyBzdGFnZSAnJHtzdGFnZS5uYW1lfScgYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBmYWlsZWQ6YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudE1lc3NhZ2U7XG5cdH1cblx0YXN5bmMgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2VzKGRlc3RpbmF0aW9uKSB7XG5cdFx0Y29uc3QgcXVldWVkTWVzc2FnZXMgPSBhd2FpdCB0aGlzLm1lc3NhZ2VRdWV1ZS5nZXRRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbik7XG5cdFx0Zm9yIChjb25zdCBxdWV1ZWRNZXNzYWdlIG9mIHF1ZXVlZE1lc3NhZ2VzKSB7XG5cdFx0XHRjb25zdCBkYXRhQXNNZXNzYWdlID0gcXVldWVkTWVzc2FnZS5kYXRhO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGRhdGFBc01lc3NhZ2UgJiYgdHlwZW9mIGRhdGFBc01lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGRhdGFBc01lc3NhZ2UudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZGF0YUFzTWVzc2FnZS5pZCA9PT0gXCJzdHJpbmdcIiA/IHRoaXMudG9Qcm90b2NvbE1lc3NhZ2UoZGF0YUFzTWVzc2FnZSkgOiB7XG5cdFx0XHRcdC4uLnRoaXMudG9Qcm90b2NvbE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdGlkOiBxdWV1ZWRNZXNzYWdlLmlkLFxuXHRcdFx0XHRcdHR5cGU6IHF1ZXVlZE1lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHRzb3VyY2U6IFwicXVldWVcIixcblx0XHRcdFx0XHRkZXN0aW5hdGlvbjogcXVldWVkTWVzc2FnZS5kZXN0aW5hdGlvbixcblx0XHRcdFx0XHRkYXRhOiBxdWV1ZWRNZXNzYWdlLmRhdGEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogcXVldWVkTWVzc2FnZS50aW1lc3RhbXAsXG5cdFx0XHRcdFx0XHRyZXRyeUNvdW50OiBxdWV1ZWRNZXNzYWdlLnJldHJ5Q291bnQsXG5cdFx0XHRcdFx0XHRtYXhSZXRyaWVzOiBxdWV1ZWRNZXNzYWdlLm1heFJldHJpZXMsXG5cdFx0XHRcdFx0XHQuLi5xdWV1ZWRNZXNzYWdlLm1ldGFkYXRhXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0dHlwZTogcXVldWVkTWVzc2FnZS50eXBlXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGF3YWl0IHRoaXMudHJ5RGVsaXZlck1lc3NhZ2UobWVzc2FnZSkpIGF3YWl0IHRoaXMubWVzc2FnZVF1ZXVlLnJlbW92ZU1lc3NhZ2UocXVldWVkTWVzc2FnZS5pZCk7XG5cdFx0fVxuXHR9XG5cdHJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudElkLCBkZXN0aW5hdGlvbikge1xuXHRcdHRoaXMuY29tcG9uZW50UmVnaXN0cnkuc2V0KGNvbXBvbmVudElkLCBkZXN0aW5hdGlvbik7XG5cdFx0dGhpcy5wcm9jZXNzUXVldWVkTWVzc2FnZXMoZGVzdGluYXRpb24pLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc29sZS53YXJuKGBbVW5pZmllZE1lc3NhZ2luZ10gRmFpbGVkIHRvIHByb2Nlc3MgcXVldWVkIG1lc3NhZ2VzIGZvciAke2Rlc3RpbmF0aW9ufTpgLCBlcnJvcik7XG5cdFx0fSk7XG5cdH1cblx0aW5pdGlhbGl6ZUNvbXBvbmVudChjb21wb25lbnRJZCkge1xuXHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21wb25lbnRSZWdpc3RyeS5nZXQoY29tcG9uZW50SWQpO1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybiBbXTtcblx0XHR0aGlzLnByb2Nlc3NRdWV1ZWRNZXNzYWdlcyhkZXN0aW5hdGlvbikuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRjb25zb2xlLndhcm4oYFtVbmlmaWVkTWVzc2FnaW5nXSBGYWlsZWQgdG8gcmVwbGF5IHF1ZXVlZCBtZXNzYWdlcyBmb3IgJHtkZXN0aW5hdGlvbn06YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLnBlbmRpbmdTdG9yZS5kcmFpbihkZXN0aW5hdGlvbik7XG5cdH1cblx0aGFzUGVuZGluZ01lc3NhZ2VzKGRlc3RpbmF0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMucGVuZGluZ1N0b3JlLmhhcyhkZXN0aW5hdGlvbik7XG5cdH1cblx0ZW5xdWV1ZVBlbmRpbmdNZXNzYWdlKGRlc3RpbmF0aW9uLCBtZXNzYWdlKSB7XG5cdFx0Y29uc3QgZGVzdCA9IFN0cmluZyhkZXN0aW5hdGlvbiA/PyBcIlwiKS50cmltKCk7XG5cdFx0aWYgKCFkZXN0IHx8ICFtZXNzYWdlKSByZXR1cm47XG5cdFx0dGhpcy5wZW5kaW5nU3RvcmUuZW5xdWV1ZShkZXN0LCBtZXNzYWdlKTtcblx0fVxuXHRzZXRDaGFubmVsTWFwcGluZ3MobWFwcGluZ3MpIHtcblx0XHR0aGlzLmNoYW5uZWxNYXBwaW5ncyA9IHtcblx0XHRcdC4uLnRoaXMuY2hhbm5lbE1hcHBpbmdzLFxuXHRcdFx0Li4ubWFwcGluZ3Ncblx0XHR9O1xuXHR9XG5cdGdldENoYW5uZWxGb3JEZXN0aW5hdGlvbihkZXN0aW5hdGlvbikge1xuXHRcdGlmICghZGVzdGluYXRpb24pIHJldHVybiBudWxsO1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxNYXBwaW5nc1tkZXN0aW5hdGlvbl0gPz8gbnVsbDtcblx0fVxuXHRkZXRlY3RQcm90b2NvbE5hbWUoKSB7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiBcImNocm9tZVwiO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwic2VydmljZS13b3JrZXJcIikgcmV0dXJuIFwic2VydmljZVwiO1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwibWFpblwiKSByZXR1cm4gXCJ3aW5kb3dcIjtcblx0XHRyZXR1cm4gXCJ1bmtub3duXCI7XG5cdH1cblx0cmVzb2x2ZVdvcmtlckNvbnRleHQoKSB7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJtYWluXCIpIHJldHVybiBcIm1haW5cIjtcblx0XHRpZiAodGhpcy5leGVjdXRpb25Db250ZXh0ID09PSBcInNlcnZpY2Utd29ya2VyXCIpIHJldHVybiBcInNlcnZpY2Utd29ya2VyXCI7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiBcImNocm9tZS1leHRlbnNpb25cIjtcblx0fVxuXHR0b1Byb3RvY29sTWVzc2FnZShtZXNzYWdlLCBmYWxsYmFja1NvdXJjZSkge1xuXHRcdHJldHVybiBjcmVhdGVQcm90b2NvbEVudmVsb3BlKHtcblx0XHRcdC4uLm1lc3NhZ2UsXG5cdFx0XHRpZDogbWVzc2FnZS5pZCxcblx0XHRcdHR5cGU6IG1lc3NhZ2UudHlwZSA/PyBcInVua25vd25cIixcblx0XHRcdHNvdXJjZTogbWVzc2FnZS5zb3VyY2UgPz8gZmFsbGJhY2tTb3VyY2UgPz8gdGhpcy5sb2NhbENoYW5uZWxJZCxcblx0XHRcdGRlc3RpbmF0aW9uOiBtZXNzYWdlLmRlc3RpbmF0aW9uLFxuXHRcdFx0ZGF0YTogbWVzc2FnZS5kYXRhLFxuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0XHQuLi5tZXNzYWdlLm1ldGFkYXRhID8/IHt9XG5cdFx0XHR9LFxuXHRcdFx0cHJvdG9jb2w6IHRoaXMuZGV0ZWN0UHJvdG9jb2xOYW1lKCksXG5cdFx0XHRwdXJwb3NlOiBcIm1haWxcIixcblx0XHRcdHNyY0NoYW5uZWw6IG1lc3NhZ2Uuc291cmNlID8/IHRoaXMubG9jYWxDaGFubmVsSWQsXG5cdFx0XHRkc3RDaGFubmVsOiBtZXNzYWdlLmRlc3RpbmF0aW9uXG5cdFx0fSk7XG5cdH1cblx0aXNXb3JrZXJTdXBwb3J0ZWQoX2NvbmZpZykge1xuXHRcdGlmICh0aGlzLmV4ZWN1dGlvbkNvbnRleHQgPT09IFwic2VydmljZS13b3JrZXJcIikgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9PT0gXCJjaHJvbWUtZXh0ZW5zaW9uXCIpIHJldHVybiBzdXBwb3J0c0RlZGljYXRlZFdvcmtlcnMoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRzZXR1cEdsb2JhbExpc3RlbmVycygpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudC5kYXRhICYmIHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGEudHlwZSkgdGhpcy5oYW5kbGVCcm9hZGNhc3RNZXNzYWdlKGV2ZW50LmRhdGEsIFwid2luZG93LW1lc3NhZ2VcIik7XG5cdFx0fSk7XG5cdH1cblx0Y3JlYXRlRGVmZXJyZWQoKSB7XG5cdFx0bGV0IHJlc29sdmU7XG5cdFx0bGV0IHJlamVjdDtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdFx0XHRyZXNvbHZlID0gcmVzO1xuXHRcdFx0cmVqZWN0ID0gcmVqO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXNvbHZlLFxuXHRcdFx0cmVqZWN0LFxuXHRcdFx0cHJvbWlzZVxuXHRcdH07XG5cdH1cblx0Z2V0RXhlY3V0aW9uQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb25Db250ZXh0O1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0Zm9yIChjb25zdCBjaGFubmVsIG9mIHRoaXMuY2hhbm5lbHMudmFsdWVzKCkpIGlmIChjaGFubmVsIGluc3RhbmNlb2YgQnJvYWRjYXN0Q2hhbm5lbCkgY2hhbm5lbC5jbG9zZSgpO1xuXHRcdGVsc2UgaWYgKGNoYW5uZWwgJiYgXCJjbG9zZVwiIGluIGNoYW5uZWwpIGNoYW5uZWwuY2xvc2UoKTtcblx0XHR0aGlzLmNoYW5uZWxzLmNsZWFyKCk7XG5cdFx0dGhpcy53b3JrZXJDaGFubmVscy5jbGVhcigpO1xuXHRcdHRoaXMuaGFuZGxlcnMuY2xlYXIoKTtcblx0XHR0aGlzLnBpcGVsaW5lcy5jbGVhcigpO1xuXHR9XG59O1xudmFyIGRlZmF1bHRJbnN0YW5jZSA9IG51bGw7XG5mdW5jdGlvbiBnZXRVbmlmaWVkTWVzc2FnaW5nKGNvbmZpZykge1xuXHRpZiAoIWRlZmF1bHRJbnN0YW5jZSkgZGVmYXVsdEluc3RhbmNlID0gbmV3IFVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyKGNvbmZpZyk7XG5cdHJldHVybiBkZWZhdWx0SW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjcmVhdGVVbmlmaWVkTWVzc2FnaW5nKGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyKGNvbmZpZyk7XG59XG5mdW5jdGlvbiByZXNldFVuaWZpZWRNZXNzYWdpbmcoKSB7XG5cdGlmIChkZWZhdWx0SW5zdGFuY2UpIHtcblx0XHRkZWZhdWx0SW5zdGFuY2UuZGVzdHJveSgpO1xuXHRcdGRlZmF1bHRJbnN0YW5jZSA9IG51bGw7XG5cdH1cbn1cbmZ1bmN0aW9uIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcblx0cmV0dXJuIGdldFVuaWZpZWRNZXNzYWdpbmcoKS5zZW5kTWVzc2FnZShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySGFuZGxlcihkZXN0aW5hdGlvbiwgaGFuZGxlcikge1xuXHRnZXRVbmlmaWVkTWVzc2FnaW5nKCkucmVnaXN0ZXJIYW5kbGVyKGRlc3RpbmF0aW9uLCBoYW5kbGVyKTtcbn1cbmZ1bmN0aW9uIGdldEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpIHtcblx0cmV0dXJuIGdldFVuaWZpZWRNZXNzYWdpbmcoKS5nZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL21lc3NhZ2luZy9TZXJ2aWNlQ2hhbm5lbE1hbmFnZXIudHNcbnZhciBTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIgPSBjbGFzcyB7XG5cdGNoYW5uZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmVhZHlQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdG1lc3NhZ2VIYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNoYW5uZWxDb25maWdzO1xuXHRleGVjdXRpb25Db250ZXh0O1xuXHRsb2dQcmVmaXg7XG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5jaGFubmVsQ29uZmlncyA9IGNvbmZpZy5jaGFubmVscyA/PyB7fTtcblx0XHR0aGlzLmxvZ1ByZWZpeCA9IGNvbmZpZy5sb2dQcmVmaXggPz8gXCJbU2VydmljZUNoYW5uZWxzXVwiO1xuXHRcdHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9IGRldGVjdEV4ZWN1dGlvbkNvbnRleHQoKTtcblx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gSW5pdGlhbGl6ZWQgaW4gJHt0aGlzLmV4ZWN1dGlvbkNvbnRleHR9IGNvbnRleHRgKTtcblx0fVxuXHRyZWdpc3RlckNvbmZpZ3MoY29uZmlncykge1xuXHRcdHRoaXMuY2hhbm5lbENvbmZpZ3MgPSB7XG5cdFx0XHQuLi50aGlzLmNoYW5uZWxDb25maWdzLFxuXHRcdFx0Li4uY29uZmlnc1xuXHRcdH07XG5cdH1cblx0Z2V0Q29uZmlnKGNoYW5uZWxJZCkge1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxDb25maWdzW2NoYW5uZWxJZF07XG5cdH1cblx0Z2V0QWxsQ29uZmlncygpIHtcblx0XHRyZXR1cm4geyAuLi50aGlzLmNoYW5uZWxDb25maWdzIH07XG5cdH1cblx0YXN5bmMgaW5pdENoYW5uZWwoY2hhbm5lbElkKSB7XG5cdFx0aWYgKHRoaXMuY2hhbm5lbHMuaGFzKGNoYW5uZWxJZCkpIHJldHVybiB0aGlzLmNoYW5uZWxzLmdldChjaGFubmVsSWQpO1xuXHRcdGNvbnN0IGNvbmZpZyA9IHRoaXMuY2hhbm5lbENvbmZpZ3NbY2hhbm5lbElkXTtcblx0XHRpZiAoIWNvbmZpZykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbElkfS4gUmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmaXJzdC5gKTtcblx0XHRsZXQgcmVzb2x2ZVJlYWR5O1xuXHRcdGNvbnN0IHJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRyZXNvbHZlUmVhZHkgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHRcdHRoaXMucmVhZHlQcm9taXNlcy5zZXQoY2hhbm5lbElkLCB7XG5cdFx0XHRwcm9taXNlOiByZWFkeVByb21pc2UsXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlUmVhZHlcblx0XHR9KTtcblx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gSW5pdGlhbGl6aW5nIGNoYW5uZWw6ICR7Y2hhbm5lbElkfSAtPiAke2NvbmZpZy5icm9hZGNhc3ROYW1lfWApO1xuXHRcdGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjb25maWcuYnJvYWRjYXN0TmFtZSk7XG5cdFx0Y2hhbm5lbC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlKGNoYW5uZWxJZCwgZXZlbnQuZGF0YSk7XG5cdFx0fTtcblx0XHRjaGFubmVsLm9ubWVzc2FnZWVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGAke3RoaXMubG9nUHJlZml4fSBNZXNzYWdlIGVycm9yIG9uICR7Y2hhbm5lbElkfTpgLCBldmVudCk7XG5cdFx0fTtcblx0XHR0aGlzLmNoYW5uZWxzLnNldChjaGFubmVsSWQsIGNoYW5uZWwpO1xuXHRcdHJlc29sdmVSZWFkeSgpO1xuXHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBDaGFubmVsIHJlYWR5OiAke2NoYW5uZWxJZH1gKTtcblx0XHRyZXR1cm4gY2hhbm5lbDtcblx0fVxuXHRjbG9zZUNoYW5uZWwoY2hhbm5lbElkKSB7XG5cdFx0Y29uc3QgY2hhbm5lbCA9IHRoaXMuY2hhbm5lbHMuZ2V0KGNoYW5uZWxJZCk7XG5cdFx0aWYgKGNoYW5uZWwpIHtcblx0XHRcdGNoYW5uZWwuY2xvc2UoKTtcblx0XHRcdHRoaXMuY2hhbm5lbHMuZGVsZXRlKGNoYW5uZWxJZCk7XG5cdFx0XHR0aGlzLnJlYWR5UHJvbWlzZXMuZGVsZXRlKGNoYW5uZWxJZCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVycy5kZWxldGUoY2hhbm5lbElkKTtcblx0XHRcdGNvbnNvbGUubG9nKGAke3RoaXMubG9nUHJlZml4fSBDaGFubmVsIGNsb3NlZDogJHtjaGFubmVsSWR9YCk7XG5cdFx0fVxuXHR9XG5cdGNsb3NlQWxsKCkge1xuXHRcdGZvciAoY29uc3QgY2hhbm5lbElkIG9mIHRoaXMuY2hhbm5lbHMua2V5cygpKSB0aGlzLmNsb3NlQ2hhbm5lbChjaGFubmVsSWQpO1xuXHR9XG5cdGFzeW5jIHdhaXRGb3JDaGFubmVsKGNoYW5uZWxJZCkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5yZWFkeVByb21pc2VzLmdldChjaGFubmVsSWQpO1xuXHRcdGlmIChkZWZlcnJlZCkgYXdhaXQgZGVmZXJyZWQucHJvbWlzZTtcblx0XHRlbHNlIGF3YWl0IHRoaXMuaW5pdENoYW5uZWwoY2hhbm5lbElkKTtcblx0fVxuXHRhc3luYyBzZW5kKHRhcmdldCwgdHlwZSwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0YXdhaXQgdGhpcy53YWl0Rm9yQ2hhbm5lbCh0YXJnZXQpO1xuXHRcdGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmdldCh0YXJnZXQpO1xuXHRcdGlmICghY2hhbm5lbCkgdGhyb3cgbmV3IEVycm9yKGBDaGFubmVsIG5vdCByZWFkeTogJHt0YXJnZXR9YCk7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRzb3VyY2U6IG9wdGlvbnMuc291cmNlID8/IHRoaXMuZXhlY3V0aW9uQ29udGV4dCxcblx0XHRcdHRhcmdldCxcblx0XHRcdGRhdGEsXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KCksXG5cdFx0XHRjb3JyZWxhdGlvbklkOiBvcHRpb25zLmNvcnJlbGF0aW9uSWRcblx0XHR9O1xuXHRcdGNoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IFNlbnQgbWVzc2FnZSB0byAke3RhcmdldH06YCwgdHlwZSk7XG5cdH1cblx0YnJvYWRjYXN0KHR5cGUsIGRhdGEsIHNvdXJjZSkge1xuXHRcdGZvciAoY29uc3QgW2NoYW5uZWxJZCwgY2hhbm5lbF0gb2YgdGhpcy5jaGFubmVscykge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHtcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0c291cmNlOiBzb3VyY2UgPz8gdGhpcy5leGVjdXRpb25Db250ZXh0LFxuXHRcdFx0XHR0YXJnZXQ6IGNoYW5uZWxJZCxcblx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHR9O1xuXHRcdFx0Y2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9XG5cdFx0Y29uc29sZS5sb2coYCR7dGhpcy5sb2dQcmVmaXh9IEJyb2FkY2FzdCBtZXNzYWdlOmAsIHR5cGUpO1xuXHR9XG5cdHN1YnNjcmliZShjaGFubmVsSWQsIGhhbmRsZXIpIHtcblx0XHRpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXJzLmhhcyhjaGFubmVsSWQpKSB0aGlzLm1lc3NhZ2VIYW5kbGVycy5zZXQoY2hhbm5lbElkLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVycy5nZXQoY2hhbm5lbElkKS5hZGQoaGFuZGxlcik7XG5cdFx0dGhpcy5pbml0Q2hhbm5lbChjaGFubmVsSWQpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVycy5nZXQoY2hhbm5lbElkKT8uZGVsZXRlKGhhbmRsZXIpO1xuXHRcdH07XG5cdH1cblx0aGFuZGxlSW5jb21pbmdNZXNzYWdlKGNoYW5uZWxJZCwgZGF0YSkge1xuXHRcdGNvbnN0IGhhbmRsZXJzID0gdGhpcy5tZXNzYWdlSGFuZGxlcnMuZ2V0KGNoYW5uZWxJZCk7XG5cdFx0aWYgKCFoYW5kbGVycyB8fCBoYW5kbGVycy5zaXplID09PSAwKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhgJHt0aGlzLmxvZ1ByZWZpeH0gTm8gaGFuZGxlcnMgZm9yICR7Y2hhbm5lbElkfSwgbWVzc2FnZSBxdWV1ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGRhdGE7XG5cdFx0Zm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB0cnkge1xuXHRcdFx0aGFuZGxlcihtZXNzYWdlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gSGFuZGxlciBlcnJvciBvbiAke2NoYW5uZWxJZH06YCwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXHRpc0luaXRpYWxpemVkKGNoYW5uZWxJZCkge1xuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxzLmhhcyhjaGFubmVsSWQpO1xuXHR9XG5cdGdldEluaXRpYWxpemVkQ2hhbm5lbHMoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGFubmVscy5rZXlzKCkpO1xuXHR9XG5cdGdldFN0YXR1cygpIHtcblx0XHRjb25zdCBzdGF0dXMgPSB7fTtcblx0XHRmb3IgKGNvbnN0IGNoYW5uZWxJZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYW5uZWxDb25maWdzKSkgc3RhdHVzW2NoYW5uZWxJZF0gPSB7XG5cdFx0XHRjb25uZWN0ZWQ6IHRoaXMuY2hhbm5lbHMuaGFzKGNoYW5uZWxJZCksXG5cdFx0XHRsYXN0QWN0aXZpdHk6IERhdGUubm93KCksXG5cdFx0XHRwZW5kaW5nTWVzc2FnZXM6IDBcblx0XHR9O1xuXHRcdHJldHVybiBzdGF0dXM7XG5cdH1cblx0Z2V0RXhlY3V0aW9uQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb25Db250ZXh0O1xuXHR9XG59O1xuZnVuY3Rpb24gY3JlYXRlU2VydmljZUNoYW5uZWxNYW5hZ2VyKGNvbmZpZykge1xuXHRyZXR1cm4gbmV3IFNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpO1xufVxudmFyIGRlZmF1bHRNYW5hZ2VyID0gbnVsbDtcbmZ1bmN0aW9uIGdldFNlcnZpY2VDaGFubmVsTWFuYWdlcihjb25maWcpIHtcblx0aWYgKCFkZWZhdWx0TWFuYWdlcikgZGVmYXVsdE1hbmFnZXIgPSBuZXcgU2VydmljZUNoYW5uZWxNYW5hZ2VyKGNvbmZpZyk7XG5cdGVsc2UgaWYgKGNvbmZpZz8uY2hhbm5lbHMpIGRlZmF1bHRNYW5hZ2VyLnJlZ2lzdGVyQ29uZmlncyhjb25maWcuY2hhbm5lbHMpO1xuXHRyZXR1cm4gZGVmYXVsdE1hbmFnZXI7XG59XG5mdW5jdGlvbiByZXNldFNlcnZpY2VDaGFubmVsTWFuYWdlcigpIHtcblx0aWYgKGRlZmF1bHRNYW5hZ2VyKSB7XG5cdFx0ZGVmYXVsdE1hbmFnZXIuY2xvc2VBbGwoKTtcblx0XHRkZWZhdWx0TWFuYWdlciA9IG51bGw7XG5cdH1cbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL25leHQvY2hhbm5lbC9DaGFubmVsTWVzc2FnZUhhbmRsZXIudHNcbmZ1bmN0aW9uIG1ha2VDaGFubmVsTWVzc2FnZUhhbmRsZXIodHJhbnNwb3J0LCBjaGFubmVsTmFtZSwgaGFuZGxlcikge1xuXHRjb25zdCBwZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3Qgc2VuZCA9IGNyZWF0ZVRyYW5zcG9ydFNlbmRlcih0cmFuc3BvcnQpO1xuXHRyZXR1cm4gKHN1YnNjcmliZXIpID0+IHtcblx0XHRjb25zdCByZXNwb25kID0gKGRhdGEpID0+IHtcblx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSByZXR1cm4gKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwID0gcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdGlmIChwKSB7XG5cdFx0XHRcdFx0cC5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0cGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAoZGF0YS50eXBlID09PSBcInJlcXVlc3RcIikgcmV0dXJuIChyZXN1bHQsIHRyYW5zZmVyKSA9PiBzZW5kKHtcblx0XHRcdFx0Li4ucmVzdWx0LFxuXHRcdFx0XHRjaGFubmVsOiBkYXRhLnNlbmRlcixcblx0XHRcdFx0c2VuZGVyOiBjaGFubmVsTmFtZSxcblx0XHRcdFx0dHlwZTogXCJyZXNwb25zZVwiLFxuXHRcdFx0XHRyZXFJZDogZGF0YS5yZXFJZFxuXHRcdFx0fSwgdHJhbnNmZXIpO1xuXHRcdFx0cmV0dXJuIHNlbmQ7XG5cdFx0fTtcblx0XHRjb25zdCBvbk1lc3NhZ2UgPSAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJzY3JpYmVyLmFjdGl2ZSkgcmV0dXJuO1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHBlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHBlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRoYW5kbGVyID8gaGFuZGxlcihkYXRhLCByZXNwb25kKGRhdGEpKSA6IHN1YnNjcmliZXIubmV4dChkYXRhKTtcblx0XHR9O1xuXHRcdGNvbnN0IGNsZWFudXAgPSBjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lcih0cmFuc3BvcnQsIG9uTWVzc2FnZSwgKGUpID0+IHN1YnNjcmliZXIuZXJyb3IoZSksICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSk7XG5cdFx0c3Vic2NyaWJlci5yZXF1ZXN0ID0gKG1zZykgPT4ge1xuXHRcdFx0Y29uc3QgcmVxSWQgPSBtc2cucmVxSWQgPz8gVVVJRHY0KCk7XG5cdFx0XHRtc2cucmVxSWQgPSByZXFJZDtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdHBlbmRpbmcuc2V0KHJlcUlkLCB7XG5cdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZW5kKG1zZyk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHJldHVybiBjbGVhbnVwO1xuXHR9O1xufVxudmFyIENoYW5uZWxNZXNzYWdlT2JzZXJ2YWJsZSA9IGNsYXNzIHtcblx0X3RyYW5zcG9ydDtcblx0X2NoYW5uZWxOYW1lO1xuXHRfcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdF9zdWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0X2NsZWFudXAgPSBudWxsO1xuXHRfc2VuZDtcblx0X2FjdGl2ZSA9IGZhbHNlO1xuXHRjb25zdHJ1Y3RvcihfdHJhbnNwb3J0LCBfY2hhbm5lbE5hbWUpIHtcblx0XHR0aGlzLl90cmFuc3BvcnQgPSBfdHJhbnNwb3J0O1xuXHRcdHRoaXMuX2NoYW5uZWxOYW1lID0gX2NoYW5uZWxOYW1lO1xuXHRcdHRoaXMuX3NlbmQgPSBjcmVhdGVUcmFuc3BvcnRTZW5kZXIoX3RyYW5zcG9ydCk7XG5cdH1cblx0c3Vic2NyaWJlKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5fc3Vicy5hZGQob2JzZXJ2ZXIpO1xuXHRcdGlmICghdGhpcy5fYWN0aXZlKSB0aGlzLl9hY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB7IHVuc3Vic2NyaWJlOiAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zdWJzLmRlbGV0ZShvYnNlcnZlcik7XG5cdFx0XHRpZiAodGhpcy5fc3Vicy5zaXplID09PSAwKSB0aGlzLl9kZWFjdGl2YXRlKCk7XG5cdFx0fSB9O1xuXHR9XG5cdG5leHQobXNnLCB0cmFuc2Zlcikge1xuXHRcdHRoaXMuX3NlbmQobXNnLCB0cmFuc2Zlcik7XG5cdH1cblx0cmVxdWVzdChtc2cpIHtcblx0XHRjb25zdCByZXFJZCA9IG1zZy5yZXFJZCA/PyBVVUlEdjQoKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fcGVuZGluZy5zZXQocmVxSWQsIHtcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5uZXh0KHtcblx0XHRcdFx0Li4ubXNnLFxuXHRcdFx0XHRyZXFJZFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0X2FjdGl2YXRlKCkge1xuXHRcdGlmICh0aGlzLl9hY3RpdmUpIHJldHVybjtcblx0XHR0aGlzLl9jbGVhbnVwID0gY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIodGhpcy5fdHJhbnNwb3J0LCAoZGF0YSkgPT4ge1xuXHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJyZXNwb25zZVwiICYmIGRhdGEucmVxSWQpIHtcblx0XHRcdFx0Y29uc3QgcCA9IHRoaXMuX3BlbmRpbmcuZ2V0KGRhdGEucmVxSWQpO1xuXHRcdFx0XHRpZiAocCkge1xuXHRcdFx0XHRcdHAucmVzb2x2ZShkYXRhLnBheWxvYWQpO1xuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmcuZGVsZXRlKGRhdGEucmVxSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3VicykgdHJ5IHtcblx0XHRcdFx0cy5uZXh0Py4oZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHMuZXJyb3I/LihlKTtcblx0XHRcdH1cblx0XHR9LCAoZSkgPT4gdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiBzLmVycm9yPy4oZSkpLCAoKSA9PiB0aGlzLl9zdWJzLmZvckVhY2goKHMpID0+IHMuY29tcGxldGU/LigpKSk7XG5cdFx0dGhpcy5fYWN0aXZlID0gdHJ1ZTtcblx0fVxuXHRfZGVhY3RpdmF0ZSgpIHtcblx0XHR0aGlzLl9jbGVhbnVwPy4oKTtcblx0XHR0aGlzLl9jbGVhbnVwID0gbnVsbDtcblx0XHR0aGlzLl9hY3RpdmUgPSBmYWxzZTtcblx0fVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNoYW5uZWxSZXF1ZXN0SGFuZGxlcihjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBhc3luYyAoZGF0YSwgcmVzcG9uZCkgPT4ge1xuXHRcdGlmIChkYXRhLnR5cGUgIT09IFwicmVxdWVzdFwiIHx8IGRhdGEuY2hhbm5lbCAhPT0gY2hhbm5lbE5hbWUpIHJldHVybjtcblx0XHRvcHRpb25zLm9uUmVxdWVzdD8uKGRhdGEucGF5bG9hZCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUmVxdWVzdChkYXRhLnBheWxvYWQsIGRhdGEucmVxSWQsIGNoYW5uZWxOYW1lKTtcblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRvcHRpb25zLm9uUmVzcG9uc2U/LihyZXN1bHQucmVzcG9uc2UpO1xuXHRcdFx0cmVzcG9uZCh7XG5cdFx0XHRcdC4uLnJlc3VsdC5yZXNwb25zZSxcblx0XHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHRcdH0sIHJlc3VsdC50cmFuc2Zlcik7XG5cdFx0fVxuXHR9O1xufVxudmFyIE9ic2VydmFibGVSZXF1ZXN0RGlzcGF0Y2hlciA9IGNsYXNzIHtcblx0X2NoYW5uZWxOYW1lO1xuXHRfdGFyZ2V0Q2hhbm5lbDtcblx0X3BlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRfc3Vic2NyaWJlciA9IG51bGw7XG5cdGNvbnN0cnVjdG9yKF9jaGFubmVsTmFtZSwgX3RhcmdldENoYW5uZWwpIHtcblx0XHR0aGlzLl9jaGFubmVsTmFtZSA9IF9jaGFubmVsTmFtZTtcblx0XHR0aGlzLl90YXJnZXRDaGFubmVsID0gX3RhcmdldENoYW5uZWw7XG5cdH1cblx0Y29ubmVjdChzdWJzY3JpYmVyKSB7XG5cdFx0dGhpcy5fc3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG5cdH1cblx0ZGlzY29ubmVjdCgpIHtcblx0XHRmb3IgKGNvbnN0IHAgb2YgdGhpcy5fcGVuZGluZy52YWx1ZXMoKSkgcC5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIkRpc2Nvbm5lY3RlZFwiKSk7XG5cdFx0dGhpcy5fcGVuZGluZy5jbGVhcigpO1xuXHRcdHRoaXMuX3N1YnNjcmliZXIgPSBudWxsO1xuXHR9XG5cdGhhbmRsZU1lc3NhZ2UoZGF0YSkge1xuXHRcdGlmIChkYXRhLnR5cGUgPT09IFwicmVzcG9uc2VcIiAmJiBkYXRhLnJlcUlkKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5fcGVuZGluZy5nZXQoZGF0YS5yZXFJZCk7XG5cdFx0XHRpZiAocCkge1xuXHRcdFx0XHRwLnJlc29sdmUoZGF0YS5wYXlsb2FkKTtcblx0XHRcdFx0dGhpcy5fcGVuZGluZy5kZWxldGUoZGF0YS5yZXFJZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRpc3BhdGNoKGFjdGlvbiwgcGF0aCwgYXJncykge1xuXHRcdGlmICghdGhpcy5fc3Vic2NyaWJlcj8uYWN0aXZlKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWRcIikpO1xuXHRcdGNvbnN0IHJlcUlkID0gVVVJRHY0KCk7XG5cdFx0Y29uc3QgbXNnID0ge1xuXHRcdFx0aWQ6IFVVSUR2NCgpLFxuXHRcdFx0Y2hhbm5lbDogdGhpcy5fdGFyZ2V0Q2hhbm5lbCxcblx0XHRcdHNlbmRlcjogdGhpcy5fY2hhbm5lbE5hbWUsXG5cdFx0XHR0eXBlOiBcInJlcXVlc3RcIixcblx0XHRcdHJlcUlkLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRjaGFubmVsOiB0aGlzLl90YXJnZXRDaGFubmVsLFxuXHRcdFx0XHRzZW5kZXI6IHRoaXMuX2NoYW5uZWxOYW1lLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdGFyZ3Ncblx0XHRcdH0sXG5cdFx0XHR0aW1lc3RhbXA6IERhdGUubm93KClcblx0XHR9O1xuXHRcdGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZW5kaW5nLnNldChyZXFJZCwge1xuXHRcdFx0cmVzb2x2ZSxcblx0XHRcdHJlamVjdCxcblx0XHRcdHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuXHRcdH0pKTtcblx0XHR0aGlzLl9zdWJzY3JpYmVyLm5leHQobXNnKTtcblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL25ld2VyL2luZGV4LnRzXG52YXIgc3luYyA9IGFzeW5jIChjaGFubmVsLCBvcHRpb25zID0ge30sIGJyb2FkY2FzdCA9IG51bGwpID0+IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNoYW5uZWwsIG9wdGlvbnMsIGJyb2FkY2FzdCA/PyAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCkpO1xudmFyIGltcG9ydE1vZHVsZUluQ2hhbm5lbCA9IGFzeW5jIChjaGFubmVsLCB1cmwsIG9wdGlvbnMgPSB7fSwgYnJvYWRjYXN0ID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogbnVsbCkgPT4ge1xuXHRyZXR1cm4gKGF3YWl0IGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsKGNoYW5uZWwsIG9wdGlvbnM/LmNoYW5uZWxPcHRpb25zLCBicm9hZGNhc3QpKT8uZG9JbXBvcnRNb2R1bGU/Lih1cmwsIG9wdGlvbnM/LmltcG9ydE9wdGlvbnMpO1xufTtcbnZhciBjcmVhdGVDb250ZXh0ID0gY3JlYXRlQ2hhbm5lbENvbnRleHQ7XG52YXIgZ2V0U2hhcmVkQ29udGV4dCA9IGdldE9yQ3JlYXRlQ29udGV4dDtcbnZhciBjcmVhdGVNdWx0aUNoYW5uZWwgPSBjcmVhdGVDaGFubmVsc0luQ29udGV4dDtcbnZhciBpbXBvcnRJc29sYXRlZE1vZHVsZSA9IGltcG9ydE1vZHVsZUluQ29udGV4dDtcbnZhciBjb25uZWN0VG9DaGFubmVsQXNNb2R1bGUgPSBhc3luYyAoY2hhbm5lbCwgb3B0aW9ucyA9IHt9LCBicm9hZGNhc3QgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsLCBob3N0Q2hhbm5lbCA9IFwiJGhvc3QkXCIpID0+IHtcblx0Y29uc3QgaG9zdCA9IGNyZWF0ZUhvc3RDaGFubmVsKGhvc3RDaGFubmVsID8/IFwiJGhvc3QkXCIpO1xuXHRhd2FpdCBob3N0Py5jcmVhdGVSZW1vdGVDaGFubmVsKGNoYW5uZWwsIG9wdGlvbnMsIGJyb2FkY2FzdCk7XG5cdHJldHVybiB3cmFwQ2hhbm5lbChjaGFubmVsLCBob3N0ID8/IFNFTEZfQ0hBTk5FTD8uaW5zdGFuY2UpO1xufTtcbnZhciBjcmVhdGVDaHJvbWVFeHRlbnNpb25SdW50aW1lQ2hhbm5lbCA9IChjaGFubmVsTmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGNvbnN0IGNvbnRleHQgPSBkZXRlY3RFeGVjdXRpb25Db250ZXh0KCk7XG5cdGlmIChjb250ZXh0ICE9PSBcImNocm9tZS1leHRlbnNpb25cIikgcmV0dXJuIHtcblx0XHRhc3luYyByZXF1ZXN0KG1ldGhvZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDaHJvbWUgZXh0ZW5zaW9uIG1lc3NhZ2luZyBub3QgYXZhaWxhYmxlIGluICR7Y29udGV4dH1gKTtcblx0XHR9LFxuXHRcdGNsb3NlKCkge31cblx0fTtcblx0cmV0dXJuIHtcblx0XHRhc3luYyByZXF1ZXN0KG1ldGhvZCwgYXJncyA9IFtdKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcblx0XHRcdFx0XHRcdGlkOiBgY3J4XyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX1gLFxuXHRcdFx0XHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0XHRcdFx0c291cmNlOiBjb250ZXh0LFxuXHRcdFx0XHRcdFx0dGFyZ2V0OiBjaGFubmVsTmFtZSxcblx0XHRcdFx0XHRcdGRhdGE6IGFyZ3M/Lmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBhcmdzLFxuXHRcdFx0XHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0XHRcdFx0dGltZXN0YW1wOiBEYXRlLm5vdygpLFxuXHRcdFx0XHRcdFx0XHQuLi5vcHRpb25zPy5tZXRhZGF0YSA/PyB7fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmVqZWN0KG5ldyBFcnJvcihjaHJvbWUucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSkpO1xuXHRcdFx0XHRcdFx0ZWxzZSByZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGNsb3NlKCkge31cblx0fTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgJGNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsLCAkZGVzY3JpcHRvciwgJHJlcXVlc3RIYW5kbGVyLCBBYnN0cmFjdFRyYW5zcG9ydCwgQXRvbWljc0J1ZmZlciwgQXRvbWljc1JpbmdCdWZmZXIsIEF0b21pY3NUcmFuc3BvcnQsIEF0b21pY3NUcmFuc3BvcnRGYWN0b3J5LCBCaWRpcmVjdGlvbmFsSW52b2tlciwgQnJvYWRjYXN0Q2hhbm5lbE9ic2VydmFibGUsIEJyb2FkY2FzdENoYW5uZWxUcmFuc3BvcnQsIENIQU5ORUxfTUFQLCBDaGFubmVsQ29ubmVjdGlvbiwgQ2hhbm5lbENvbnRleHQsIENoYW5uZWxIYW5kbGVyLCBDaGFubmVsSGFuZGxlciBhcyBPYnNlcnZhYmxlQ2hhbm5lbEhhbmRsZXIsIENoYW5uZWxNZXNzYWdlT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSBhcyBDaGFubmVsTmF0aXZlT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgQ2hhbm5lbE9ic2VydmFibGUsIENoYW5uZWxTdG9yYWdlLCBDaGFubmVsU3ViamVjdCwgQ2hhbm5lbFRyYW5zYWN0aW9uLCBDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3RDaGFubmVsLCBDaHJvbWVFeHRlbnNpb25Qb3J0Q2hhbm5lbCwgQ2hyb21lRXh0ZW5zaW9uVGFic0NoYW5uZWwsIENocm9tZUV4dGVybmFsT2JzZXJ2YWJsZSwgQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQsIENocm9tZU9ic2VydmFibGVGYWN0b3J5LCBDaHJvbWVQb3J0T2JzZXJ2YWJsZSwgQ2hyb21lUG9ydFRyYW5zcG9ydCwgQ2hyb21lUnVudGltZU9ic2VydmFibGUsIENocm9tZVJ1bnRpbWVUcmFuc3BvcnQsIENocm9tZVRhYnNPYnNlcnZhYmxlLCBDaHJvbWVUYWJzVHJhbnNwb3J0LCBDb25uZWN0aW9uUG9vbCwgRGVmYXVsdFJlZmxlY3QsIERpc3BhdGNoUHJveHlIYW5kbGVyIGFzIERpc3BhdGNoSGFuZGxlciwgRGlzcGF0Y2hQcm94eUhhbmRsZXIsIE1PVU5URURfRlNfRVZFTlQsIE1PVU5URURfRlNfSFRUUF9QQVRILCBNT1VOVEVEX0ZTX1dTX1BBVEgsIE1lc3NhZ2VPYnNlcnZhYmxlLCBNZXNzYWdlUG9ydE9ic2VydmFibGUsIE1lc3NhZ2VQb3J0VHJhbnNwb3J0LCBNZXNzYWdlUXVldWUsIE1lc3NhZ2VRdWV1ZVN0b3JhZ2UsIE9ic2VydmFibGVGYWN0b3J5LCBPYnNlcnZhYmxlUmVxdWVzdERpc3BhdGNoZXIsIE9wdGltaXplZFdvcmtlckNoYW5uZWwsIFBST1hZX0lOVEVSTkFMUywgUFJPWFlfTUFSS0VSLCBQZW5kaW5nTWVzc2FnZVN0b3JlLCBQb3J0UG9vbCwgUG9ydFRyYW5zcG9ydCwgUG9ydFRyYW5zcG9ydEZhY3RvcnksIFByb3RvY29sUmVwbGF5R3VhcmQsIFByb3h5QnVpbGRlciwgUXVldWVkV29ya2VyQ2hhbm5lbCwgUkVBRCwgUlRDUGVlck1hbmFnZXIsIFJUQ1BlZXJUcmFuc3BvcnQsIFJUQ1RyYW5zcG9ydEZhY3RvcnksIFJlbW90ZUNoYW5uZWxIZWxwZXIsIFJlbW90ZUNoYW5uZWxzLCBSZW1vdGVQcm94eUhhbmRsZXIsIFJlcGxheUNoYW5uZWxTdWJqZWN0LCBSZXF1ZXN0b3IsIFJlc3BvbmRlciwgU0VMRl9DSEFOTkVMLCBTZWxmT2JzZXJ2YWJsZSwgU2VsZlRyYW5zcG9ydCwgU2VydmljZUNoYW5uZWxNYW5hZ2VyLCBTZXJ2aWNlV29ya2VyQ2xpZW50LCBTZXJ2aWNlV29ya2VyQ2xpZW50T2JzZXJ2YWJsZSwgU2VydmljZVdvcmtlckhvc3QsIFNlcnZpY2VXb3JrZXJIb3N0T2JzZXJ2YWJsZSwgU2VydmljZVdvcmtlclRyYW5zcG9ydCwgU2hhcmVkV29ya2VyQ2xpZW50LCBTaGFyZWRXb3JrZXJIb3N0LCBTaGFyZWRXb3JrZXJPYnNlcnZhYmxlRmFjdG9yeSwgU29ja2V0SU9PYnNlcnZhYmxlLCBTb2NrZXRJT09ic2VydmFibGVGYWN0b3J5LCBTb2NrZXRJT1Jvb21PYnNlcnZhYmxlLCBUcmFuc2ZlcmFibGVTdG9yYWdlLCBUcmFuc2ZlcmFibGVTdG9yYWdlRmFjdG9yeSwgVHJhbnNwb3J0QWRhcHRlciwgQ2hyb21lUG9ydE9ic2VydmFibGUkMSBhcyBUcmFuc3BvcnRDaHJvbWVQb3J0T2JzZXJ2YWJsZSwgQ2hyb21lUnVudGltZU9ic2VydmFibGUkMSBhcyBUcmFuc3BvcnRDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSwgQ2hyb21lVGFic09ic2VydmFibGUkMSBhcyBUcmFuc3BvcnRDaHJvbWVUYWJzT2JzZXJ2YWJsZSwgVHJhbnNwb3J0Q29yZUZhY3RvcnksIFRyYW5zcG9ydEZhY3RvcnksIFRyYW5zcG9ydE9ic2VydmFibGUsIFRyYW5zcG9ydE9ic2VydmFibGVGYWN0b3J5LCBVbmlmaWVkQ2hhbm5lbCwgVW5pZmllZE1lc3NhZ2luZ01hbmFnZXIsIFVuaWZpZWRUcmFuc3BvcnRGYWN0b3J5LCBXUmVmbGVjdEFjdGlvbiwgV1N0YXR1cywgV1R5cGUsIFdlYlNvY2tldE9ic2VydmFibGUsIFdlYlNvY2tldFRyYW5zcG9ydCwgV2luZG93UG9ydENvbm5lY3RvciwgV29ya2VyQ29udGV4dCwgV29ya2VyT2JzZXJ2YWJsZSwgV29ya2VyVHJhbnNwb3J0LCBhZGRCcm9hZGNhc3RDaGFubmVsLCBhZGRQb3J0Q2hhbm5lbCwgYWRkU2VsZkNoYW5uZWxUb0RlZmF1bHQsIGFkZFdvcmtlckNoYW5uZWwsIGF1dG9JbnZva2VyLCBiaW5kU2VydmljZVdvcmtlckhvc3RCcmlkZ2UsIGJ1aWxkUmVzcG9uc2UsIGNsb3NlQWxsU3RvcmFnZSwgY2xvc2VVbmlmaWVkQ2hhbm5lbCwgY29ubmVjdFRvQ2hhbm5lbEFzTW9kdWxlLCBjcmVhdGVBdG9taWNzQ2hhbm5lbFBhaXIsIGNyZWF0ZUJpZGlyZWN0aW9uYWxDaGFubmVsLCBjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCQxIGFzIGNyZWF0ZUJpZGlyZWN0aW9uYWxUcmFuc3BvcnQsIGNyZWF0ZUJyb2FkY2FzdFNpZ25hbGluZywgY3JlYXRlQnJvYWRjYXN0VHJhbnNwb3J0LCBjcmVhdGVDaGFubmVsQ29udGV4dCwgY3JlYXRlQ2hhbm5lbFBhaXIsIGNyZWF0ZUNoYW5uZWxSZXF1ZXN0SGFuZGxlciwgY3JlYXRlQ2hhbm5lbHNJbkNvbnRleHQsIGNyZWF0ZUNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQ2hhbm5lbCwgY3JlYXRlQ2hyb21lRXh0ZW5zaW9uUnVudGltZUNoYW5uZWwsIGNyZWF0ZUNocm9tZUV4dGVuc2lvblRhYnNDaGFubmVsLCBjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzTWVzc2FnaW5nQ2hhbm5lbCwgY3JlYXRlQ2hyb21lTGlzdGVuZXIsIGNyZWF0ZUNocm9tZVJlcXVlc3RIYW5kbGVyLCBjcmVhdGVDaHJvbWVUYWJzTGlzdGVuZXIsIGNyZWF0ZUNvbm5lY3Rpb25PYnNlcnZlciwgY3JlYXRlQ29udGV4dCwgY3JlYXRlRGVmYXVsdENoYW5uZWxQYWlyLCBjcmVhdGVFeHBvc2VIYW5kbGVyLCBjcmVhdGVGcm9tUG9ydCwgY3JlYXRlSG9zdENoYW5uZWwsIGNyZWF0ZUhvc3RQcm94eSwgY3JlYXRlSW52b2tlciwgY3JlYXRlSW52b2tlck9ic2VydmFibGUsIGNyZWF0ZU1lc3NhZ2VJZCwgY3JlYXRlTWVzc2FnZVF1ZXVlLCBjcmVhdGVNb3VudGVkRnNJZCwgY3JlYXRlTXVsdGlDaGFubmVsLCBjcmVhdGVPYnNlcnZhYmxlQ2hhbm5lbCwgY3JlYXRlT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlT3JVc2VFeGlzdGluZ0NoYW5uZWwsIGNyZWF0ZVBvcnRQcm94eSwgY3JlYXRlUHJvdG9jb2xFbnZlbG9wZSwgY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCwgY3JlYXRlUmVmbGVjdEhhbmRsZXIsIGNyZWF0ZVJlbW90ZVByb3h5LCBjcmVhdGVSZXF1ZXN0b3IsIGNyZWF0ZVJlc3BvbmRlciwgY3JlYXRlU2VuZGVyUHJveHksIGNyZWF0ZVNlcnZpY2VDaGFubmVsTWFuYWdlciwgY3JlYXRlU2VydmljZVdvcmtlckNoYW5uZWwsIGNyZWF0ZVNlcnZpY2VXb3JrZXJDbGllbnQsIGNyZWF0ZVNlcnZpY2VXb3JrZXJIb3N0LCBjcmVhdGVTaGFyZWRXb3JrZXJIb3N0T2JzZXJ2YWJsZSwgY3JlYXRlU2hhcmVkV29ya2VyT2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0T2JzZXJ2YWJsZSwgY3JlYXRlU29ja2V0UmVxdWVzdEhhbmRsZXIsIGNyZWF0ZVRyYW5zcG9ydCwgY3JlYXRlVHJhbnNwb3J0TGlzdGVuZXIsIGNyZWF0ZVRyYW5zcG9ydFNlbmRlciwgY3JlYXRlVW5pZmllZENoYW5uZWwsIGNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpciwgY3JlYXRlVW5pZmllZE1lc3NhZ2luZywgY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0LCBjcmVhdGVXb3JrZXJDaGFubmVsLCBkZWJvdW5jZSwgZGVmZXJDaGFubmVsLCBkZWxheSwgZGVsZXRlQ29udGV4dCwgZGVzY01hcCwgZGV0ZWN0Q29udGV4dFR5cGUsIGRldGVjdEV4ZWN1dGlvbkNvbnRleHQsIGRldGVjdEluY29taW5nQ29udGV4dFR5cGUsIGRldGVjdFRyYW5zcG9ydFR5cGUgYXMgZGV0ZWN0VHJhbnNwb3J0LCBkZXRlY3RUcmFuc3BvcnRUeXBlJDEgYXMgZGV0ZWN0VHJhbnNwb3J0VHlwZSwgZXhlY3V0ZUFjdGlvbiwgZXhwb3NlRnJvbVVuaWZpZWQsIGV4cG9zZUZyb21Xb3JrZXIsIGV4cG9zZU92ZXJQb3J0LCBmaWx0ZXIsIGZyb21FdmVudCwgZnJvbVByb21pc2UsIGdldEJyb2FkY2FzdENoYW5uZWwsIGdldENoYW5uZWxGcm9tRGVmYXVsdCwgZ2V0Q2hhbm5lbFN0b3JhZ2UsIGdldENvbm5lY3Rpb24sIGdldENvbm5lY3Rpb25Qb29sLCBnZXRDb250ZXh0LCBnZXRDb250ZXh0TmFtZXMsIGdldEN1cnJlbnRUYWJJZCwgZ2V0RGVmYXVsdENvbnRleHQsIGdldEhvc3RDb25uZWN0aW9uLCBnZXRNZXNzYWdlUXVldWUsIGdldE9yQ3JlYXRlQ29udGV4dCwgZ2V0UHJveHlEZXNjcmlwdG9yLCBnZXRQcm94eUludGVybmFscywgZ2V0U2VydmljZUNoYW5uZWxNYW5hZ2VyLCBnZXRTaGFyZWRDb250ZXh0LCBnZXRUcmFuc3BvcnRNZXRhLCBnZXRUcmFuc3BvcnRSZWdpc3RyeSwgZ2V0VW5pZmllZENoYW5uZWwsIGdldFVuaWZpZWRDaGFubmVsTmFtZXMsIGdldFVuaWZpZWRNZXNzYWdpbmcsIGdldFZpc2libGVUYWJJZCwgZ2V0V29ya2VyQ2hhbm5lbCwgZ2V0V29ya2VyQ29udGV4dCwgZ2V0V29ya2VySW52b2tlciwgZ2V0V29ya2VyUmVzb2x2ZUJhc2VVcmwsIGdldFdvcmtlclJlc3BvbmRlciwgaGFuZE1hcCwgaGFuZGxlUmVxdWVzdCwgaGFzTm9QYXRoLCBpbXBvcnRJbkhvc3QsIGltcG9ydElzb2xhdGVkTW9kdWxlLCBpbXBvcnRNb2R1bGVJbkNoYW5uZWwsIGltcG9ydE1vZHVsZUluQ29udGV4dCwgaW5pdENoYW5uZWxIYW5kbGVyLCBpbml0RGVmZXJyZWRDaGFubmVsLCBpbml0TWFpbkNoYW5uZWwsIGluaXRXb3JrZXJDb250ZXh0LCBpbnRlcnZhbCwgaXNDaHJvbWVFeHRlbnNpb25Db250ZXh0LCBpc01vdW50ZWRGc1JlcXVlc3QsIGlzTW91bnRlZEZzUmVzcG9uc2UsIGlzUHJvdG9jb2xFbnZlbG9wZSwgaXNSZW1vdGVQcm94eSwgaXNTZXJ2aWNlV29ya2VyQ29udGV4dCwgbG9hZFdvcmtlciwgbWFrZUJyb2FkY2FzdEludm9rZXIsIG1ha2VDaGFubmVsTWVzc2FnZUhhbmRsZXIsIG1ha2VDaHJvbWVSdW50aW1lSW52b2tlciwgbWFrZU1lc3NhZ2VQb3J0SW52b2tlciwgbWFrZU9ic2VydmFibGVSZXF1ZXN0UHJveHksIG1ha2VSZXF1ZXN0UHJveHksIG1ha2VTZWxmSW52b2tlciwgbWFrZVNlcnZpY2VXb3JrZXJDbGllbnRJbnZva2VyLCBtYWtlU2VydmljZVdvcmtlckhvc3RJbnZva2VyLCBtYWtlV2ViU29ja2V0SW52b2tlciwgbWFrZVdvcmtlckludm9rZXIsIG1hcCwgbWVyZ2UsIG5vcm1hbGl6ZVByb3RvY29sRW52ZWxvcGUsIG5vcm1hbGl6ZVJlZiwgb2JqZWN0VG9SZWYsIG9uV29ya2VyQ2hhbm5lbENyZWF0ZWQsIG9uV29ya2VyQ29ubmVjdGlvbiwgb25Xb3JrZXJJbnZvY2F0aW9uLCBwYXJzZU1vdW50ZWRGc01lc3NhZ2UsIHByb3h5QnVpbGRlciwgcmVhZEJ5UGF0aCwgcmVnaXN0ZXJIYW5kbGVyLCByZWdpc3RlcldvcmtlckFQSSwgcmVnaXN0ZXJlZEluUGF0aCwgcmVtb3RlRnJvbVVuaWZpZWQsIHJlbW92ZUJ5RGF0YSwgcmVtb3ZlQnlQYXRoLCByZXNldFNlcnZpY2VDaGFubmVsTWFuYWdlciwgcmVzZXRVbmlmaWVkTWVzc2FnaW5nLCByZXNvbHZlV29ya2VyU3BlY2lmaWVySHJlZiwgc2VuZE1lc3NhZ2UsIHNldHVwSW52b2tlciwgc2V0dXBVbmlmaWVkQ2hhbm5lbCwgc3RvcmVkRGF0YSwgc3VwcG9ydHNEZWRpY2F0ZWRXb3JrZXJzLCBzeW5jLCB0YWtlLCB0YWtlVW50aWwsIHRocm90dGxlLCB0cmF2ZXJzZUJ5UGF0aCwgdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eSwgdW53cmFwRGVzY3JpcHRvckZyb21Qcm94eVJlY3Vyc2l2ZSwgd2hlbiwgY3R4IGFzIHdvcmtlckNvbnRleHQsIHdyYXBDaGFubmVsLCB3cmFwRGVzY3JpcHRvciwgd3JhcE1hcCwgd3JhcE9ic2VydmFibGVDaGFubmVsLCB3cml0ZUJ5UGF0aCB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsb0JBQUFBLElBQWtCLHdCQUFBQyxJQUFzQixzQkFBQUMsSUFBb0IsWUFBQUMsSUFBVSxVQUFBQyxHQUFRLHFCQUFBQyxJQUFtQix1QkFBQUMsSUFBcUIsbUJBQUFDLElBQWlCLGlCQUFBQyxJQUFlLHNCQUFBQyxJQUFvQix1QkFBQUMsSUFBcUIscUJBQUFDLElBQW1CLGVBQUFDLElBQWEseUJBQUFDLFVBQTZCO0FBR3JRLElBQUlDLEtBQTBCLDBCQUFTQSxHQUFTO0FBQy9DLFNBQUFBLEVBQVEs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SUFDM0VELEVBQVEwSixDQUFRO0FBQUEsVUFDdEIsQ0FBQztBQUFBLFFBQ0YsU0FBU2tSLEdBQU87QUFDZixVQUFBM2EsRUFBTzJhLENBQUs7QUFBQSxRQUNiO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQUM7QUFBQSxFQUNWO0FBQ0Q7IiwKICAibmFtZXMiOiBbIk1PVU5URURfRlNfRVZFTlQiLCAiTU9VTlRFRF9GU19IVFRQX1BBVEgiLCAiTU9VTlRFRF9GU19XU19QQVRIIiwgIlByb21pc2VkIiwgIlVVSUR2NCIsICJjcmVhdGVNb3VudGVkRnNJZCIsICJkZWVwT3BlcmF0ZUFuZENsb25lIiwgImlzQ2FuSnVzdFJldHVybiIsICJpc0NhblRyYW5zZmVyIiwgImlzTW91bnRlZEZzUmVxdWVzdCIsICJpc01vdW50ZWRGc1Jlc3BvbnNlIiwgImlzTm90Q29tcGxleEFycmF5IiwgImlzUHJpbWl0aXZlIiwgInBhcnNlTW91bnRlZEZzTWVzc2FnZSIsICJXU3RhdHVzIiwgIldUeXBlIiwgIldSZWZsZWN0QWN0aW9uIiwgIlRSQU5TUE9SVF9UWVBFX0FMSUFTRVMiLCAibm9ybWFsaXplVHJhbnNwb3J0VHlwZUFsaWFzIiwgInRyYW5zcG9ydCIsICJyYXciLCAiZGV0ZWN0VHJhbnNwb3J0VHlwZSQxIiwgImdldFRyYW5zcG9ydE1ldGEiLCAidHlwZSIsICJjcmVhdGVUcmFuc3BvcnRTZW5kZXIiLCAib3B0aW9ucyIsICJtc2ciLCAidHJhbnNmZXIiLCAidHJhbnNmZXJhYmxlIiwgIl8iLCAiZGF0YSIsICJ0YWJJZCIsICJwb3J0TmFtZSIsICJleHRlcm5hbElkIiwgInJlZyIsICJjbGllbnRJZCIsICJhbGwiLCAiYyIsICJjcmVhdGVUcmFuc3BvcnRMaXN0ZW5lciIsICJvbk1lc3NhZ2UiLCAib25FcnJvciIsICJvbkNsb3NlIiwgIm1zZ0hhbmRsZXIiLCAiZSIsICJlcnIiLCAiZXJySGFuZGxlciIsICJjbG9zZUhhbmRsZXIiLCAibGlzdGVuZXIiLCAiY3JlYXRlQ2hyb21lVGFic0xpc3RlbmVyIiwgInBvcnQiLCAiaGFuZGxlciIsICJjcmVhdGVDaHJvbWVMaXN0ZW5lciIsICJtZXNzYWdlIiwgInNlbmRlciIsICJzZW5kUmVzcG9uc2UiLCAiY3JlYXRlV2ViU29ja2V0VHJhbnNwb3J0IiwgInVybCIsICJzb2NrZXQiLCAicmVjb25uZWN0QXR0ZW1wdHMiLCAicmVjb25uZWN0VGltZXIiLCAic2VuZCIsICJyZWNvbm5lY3QiLCAiY2xvc2UiLCAiaCIsICJjcmVhdGVCcm9hZGNhc3RUcmFuc3BvcnQiLCAiY2hhbm5lbE5hbWUiLCAiY2hhbm5lbCIsICJUcmFuc3BvcnRDb3JlRmFjdG9yeSIsICJCYXNlU3Vic2NyaXB0aW9uIiwgIl91bnN1YnNjcmliZSIsICJPYnNlcnZhYmxlIiwgIl9wcm9kdWNlciIsICJvYnNlcnZlck9yTmV4dCIsICJvcHRzIiwgIm9ic2VydmVyIiwgImN0cmwiLCAiYWN0aXZlIiwgImNsZWFudXAiLCAiZG9DbGVhbnVwIiwgInN1YnNjcmliZXIiLCAidiIsICJvcHMiLCAicyIsICJvcCIsICJDaGFubmVsU3ViamVjdCIsICJ2YWx1ZSIsICJvYnMiLCAiUmVwbGF5Q2hhbm5lbFN1YmplY3QiLCAiYnVmZmVyU2l6ZSIsICJDaGFubmVsT2JzZXJ2YWJsZSIsICJfdHJhbnNwb3J0IiwgIl9jaGFubmVsTmFtZSIsICJyZXFJZCIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwIiwgImQiLCAiY3JlYXRlSW52b2tlck9ic2VydmFibGUiLCAicmVzdWx0IiwgImNyZWF0ZVJlZmxlY3RIYW5kbGVyIiwgInJlc3BvbmQiLCAiaGFuZGxlUmVxdWVzdCIsICJNZXNzYWdlT2JzZXJ2YWJsZSIsICJzb3VyY2UiLCAibWVzc2FnZVR5cGUiLCAiZmlsdGVyIiwgInByZWQiLCAic3JjIiwgInN1YiIsICJtYXAiLCAiZm4iLCAidGFrZSIsICJuIiwgInRha2VVbnRpbCIsICJzaWduYWwiLCAic3MiLCAic2lnIiwgImRlYm91bmNlIiwgIm1zIiwgInQiLCAidGhyb3R0bGUiLCAibGFzdCIsICJub3ciLCAiZnJvbUV2ZW50IiwgInRhcmdldCIsICJldmVudCIsICJmcm9tUHJvbWlzZSIsICJwcm9taXNlIiwgImRlbGF5IiwgImludGVydmFsIiwgIm1lcmdlIiwgInNvdXJjZXMiLCAic3VicyIsICJjcmVhdGVNZXNzYWdlSWQiLCAibWFrZUludm9rZXIiLCAibWFrZVdvcmtlckludm9rZXIiLCAid29ya2VyIiwgIm1ha2VNZXNzYWdlUG9ydEludm9rZXIiLCAibWFrZUJyb2FkY2FzdEludm9rZXIiLCAibmFtZSIsICJtYWtlV2ViU29ja2V0SW52b2tlciIsICJwcm90b2NvbHMiLCAibWFrZUNocm9tZVJ1bnRpbWVJbnZva2VyIiwgIm1ha2VTZXJ2aWNlV29ya2VyQ2xpZW50SW52b2tlciIsICJtYWtlU2VydmljZVdvcmtlckhvc3RJbnZva2VyIiwgIm1ha2VTZWxmSW52b2tlciIsICJjcmVhdGVCaWRpcmVjdGlvbmFsQ2hhbm5lbCIsICJpbmJvdW5kIiwgIndoZW4iLCAiZXZlbnROYW1lIiwgIk9ic2VydmFibGVGYWN0b3J5IiwgImRldGVjdENvbnRleHRUeXBlIiwgInNlcnZpY2VXb3JrZXJTY29wZSIsICJzaGFyZWRXb3JrZXJTY29wZSIsICJkZWRpY2F0ZWRXb3JrZXJTY29wZSIsICJkZXRlY3RUcmFuc3BvcnRUeXBlIiwgImRldGVjdGVkIiwgImRldGVjdEluY29taW5nQ29udGV4dFR5cGUiLCAiRGVmYXVsdFJlZmxlY3QiLCAicHJvcCIsICJ0aGlzQXJnIiwgImFyZ3MiLCAicHJvdG8iLCAiUmVxdWVzdG9yIiwgImNvbmZpZyIsICJjcmVhdGVVbmlmaWVkQ2hhbm5lbCIsICJ0YXJnZXRDaGFubmVsIiwgImFjdGlvbiIsICJwYXRoIiwgImJhc2VQYXRoIiwgIlJlc3BvbmRlciIsICJvYmoiLCAiQmlkaXJlY3Rpb25hbEludm9rZXIiLCAiY3JlYXRlUmVxdWVzdG9yIiwgImNyZWF0ZVJlc3BvbmRlciIsICJjcmVhdGVJbnZva2VyIiwgInNldHVwSW52b2tlciIsICJhdXRvSW52b2tlciIsICJpbnZva2VyIiwgIlBST1hZX01BUktFUiIsICJQUk9YWV9JTlRFUk5BTFMiLCAiUmVtb3RlUHJveHlIYW5kbGVyIiwgIl9pbnZva2VyIiwgInJlY2VpdmVyIiwgInByb3BTdHIiLCAiJHJlcXVlc3RIYW5kbGVyIiwgIiRkZXNjcmlwdG9yIiwgImNoaWxkUGF0aCIsICJjaGlsZFByb3h5IiwgImNyZWF0ZVJlbW90ZVByb3h5IiwgIm5ld1RhcmdldCIsICJEaXNwYXRjaFByb3h5SGFuZGxlciIsICJfZGlzcGF0Y2giLCAid3JhcERlc2NyaXB0b3IiLCAiZGVzY3JpcHRvciIsICJjYWNoZWQiLCAiZGVzY01hcCIsICJwcm94eSIsICJ3cmFwTWFwIiwgImlzUmVtb3RlUHJveHkiLCAiZ2V0UHJveHlEZXNjcmlwdG9yIiwgImdldFByb3h5SW50ZXJuYWxzIiwgImludGVybmFscyIsICJjcmVhdGVFeHBvc2VIYW5kbGVyIiwgInJlZmxlY3QiLCAiY3JlYXRlT2JqZWN0SGFuZGxlciIsICJjcmVhdGVTZW5kZXJQcm94eSIsICJQcm94eUJ1aWxkZXIiLCAiZW5hYmxlZCIsICJwcm94eUJ1aWxkZXIiLCAibWFrZVJlcXVlc3RQcm94eSIsICJjcmVhdGVDb25uZWN0aW9uS2V5IiwgInBhcmFtcyIsICJxdWVyeUNvbm5lY3Rpb25zIiwgImNvbm5lY3Rpb25zIiwgInF1ZXJ5IiwgImluY2x1ZGVDbG9zZWQiLCAiZGVzaXJlZFN0YXR1cyIsICJjb25uZWN0aW9uIiwgImEiLCAiYiIsICJDb25uZWN0aW9uUmVnaXN0cnkiLCAiX2NyZWF0ZUlkIiwgIl9lbWl0RXZlbnQiLCAia2V5IiwgImV4aXN0aW5nIiwgInBheWxvYWQiLCAiVW5pZmllZENoYW5uZWwiLCAiY2ZnIiwgInRyYW5zcG9ydFR5cGUiLCAiYmluZGluZyIsICJzb3VyY2VDaGFubmVsIiwgIndyaXRlQnlQYXRoIiwgImVudHJpZXMiLCAiaWQiLCAicmVzb2x2ZXJzIiwgInRpbWVvdXQiLCAibW9kdWxlTmFtZSIsICJldmVudFR5cGUiLCAic2VudCIsICJ0YXJnZXRzIiwgInRvVHJhbnNmZXIiLCAibmV3UGF0aCIsICJleGVjdXRlQWN0aW9uIiwgInJhd1Jlc3VsdCIsICJjb3JlUmVzcG9uc2UiLCAiYnVpbGRSZXNwb25zZSIsICJyZXNwb25zZSIsICJyZW1vdGVDaGFubmVsIiwgInNpZ25hbFR5cGUiLCAic2VuZGVyTWV0YSIsICJzZXR1cFVuaWZpZWRDaGFubmVsIiwgImNyZWF0ZVVuaWZpZWRDaGFubmVsUGFpciIsICJuYW1lMSIsICJuYW1lMiIsICJtYyIsICJDSEFOTkVMX1JFR0lTVFJZIiwgImdldFVuaWZpZWRDaGFubmVsIiwgImdldFVuaWZpZWRDaGFubmVsTmFtZXMiLCAiY2xvc2VVbmlmaWVkQ2hhbm5lbCIsICJXT1JLRVJfQ0hBTk5FTCIsICJnZXRXb3JrZXJDaGFubmVsIiwgImNvbnRleHRUeXBlIiwgImV4cG9zZUZyb21VbmlmaWVkIiwgInJlbW90ZUZyb21VbmlmaWVkIiwgIndyYXBDaGFubmVsIiwgImNvbm5lY3RDaGFubmVsIiwgImhvc3QiLCAid3JhcE9ic2VydmFibGVDaGFubmVsIiwgImNoYW5uZWxPYnMiLCAibWFrZU9ic2VydmFibGVSZXF1ZXN0UHJveHkiLCAiY3JlYXRlT2JzZXJ2YWJsZUNoYW5uZWwiLCAiVFMiLCAiVHJhbnNmZXJhYmxlIiwgIkUiLCAiaXNTZXJ2aWNlV29ya2VyQ29udGV4dCIsICJTV0dTIiwgImlzQ2hyb21lRXh0ZW5zaW9uQ29udGV4dCIsICJkZXRlY3RFeGVjdXRpb25Db250ZXh0IiwgInN1cHBvcnRzRGVkaWNhdGVkV29ya2VycyIsICJnZXRXb3JrZXJSZXNvbHZlQmFzZVVybCIsICJocmVmIiwgInJlc29sdmVXb3JrZXJTcGVjaWZpZXJIcmVmIiwgInNwZWMiLCAiYmFzZSIsICJub3JtYWxpemVkIiwgIlJlbW90ZUNoYW5uZWxzIiwgIlNFTEZfQ0hBTk5FTCIsICJDSEFOTkVMX01BUCIsICJpc1JlZmxlY3RBY3Rpb24kMSIsICJsb2FkV29ya2VyIiwgIldYIiwgIlJlbW90ZUNoYW5uZWxIZWxwZXIiLCAiQ2hhbm5lbEhhbmRsZXIiLCAiYnJvYWRjYXN0IiwgInRvQ2hhbm5lbCIsICJyZXF1ZXN0IiwgInJlc3BvbnNlRm4iLCAiaW5pdENoYW5uZWxIYW5kbGVyIiwgIiRjaGFubmVsIiwgImNyZWF0ZUhvc3RDaGFubmVsIiwgImNyZWF0ZU9yVXNlRXhpc3RpbmdDaGFubmVsIiwgIiRob3N0IiwgIiRjcmVhdGVPclVzZUV4aXN0aW5nQ2hhbm5lbCIsICJoYW5kTWFwIiwgIlJFQUQiLCAib2JqZWN0VG9SZWYiLCAicmVnaXN0ZXJlZEluUGF0aCIsICJub3JtYWxpemVSZWYiLCAidW53cmFwRGVzY3JpcHRvckZyb21Qcm94eSIsICJ1bndyYXBEZXNjcmlwdG9yRnJvbVByb3h5UmVjdXJzaXZlIiwgInN0b3JlZERhdGEiLCAidHJhdmVyc2VCeVBhdGgiLCAiJGRlc2MiLCAicmVhZEJ5UGF0aCIsICJyb290IiwgInJlbW92ZUJ5UGF0aCIsICJyZW1vdmVCeURhdGEiLCAiaGFzTm9QYXRoIiwgImlzT2JqZWN0IiwgImRlZmF1bHRSZWZsZWN0IiwgImN0eCIsICJnb3QiLCAibm9ybWFsaXplZFZhbHVlIiwgIm5vcm1hbGl6ZWRBcmdzIiwgImNhbkJlUmV0dXJuIiwgImZpbmFsUGF0aCIsICJjdHhLZXkiLCAiZWwiLCAicGFyZW50IiwgImN1cnJlbnQiLCAiaSIsICJjYWxsQXJncyIsICJjdG9yQXJncyIsICJDaGFubmVsQ29ubmVjdGlvbiIsICJfbmFtZSIsICJfdHJhbnNwb3J0VHlwZSIsICJmcm9tQ2hhbm5lbCIsICJtIiwgIm9yaWdpbmFsIiwgInIiLCAic3RhdGUiLCAiQ29ubmVjdGlvblBvb2wiLCAiZ2V0Q29ubmVjdGlvblBvb2wiLCAiZ2V0Q29ubmVjdGlvbiIsICJnZXRIb3N0Q29ubmVjdGlvbiIsICJUcmFuc3BvcnRBZGFwdGVyIiwgIl9vcHRpb25zIiwgImNhbGxiYWNrIiwgIldvcmtlclRyYW5zcG9ydCIsICJfd29ya2VyU291cmNlIiwgIk1lc3NhZ2VQb3J0VHJhbnNwb3J0IiwgIl9wb3J0IiwgIkJyb2FkY2FzdENoYW5uZWxUcmFuc3BvcnQiLCAiX2JjTmFtZSIsICJpc05ldyIsICJXZWJTb2NrZXRUcmFuc3BvcnQiLCAiX3VybCIsICJfcHJvdG9jb2xzIiwgIkNocm9tZVJ1bnRpbWVUcmFuc3BvcnQiLCAiQ2hyb21lVGFic1RyYW5zcG9ydCIsICJfdGFiSWQiLCAiQ2hyb21lUG9ydFRyYW5zcG9ydCIsICJfcG9ydE5hbWUiLCAiQ2hyb21lRXh0ZXJuYWxUcmFuc3BvcnQiLCAiX2V4dGVybmFsSWQiLCAiU2VydmljZVdvcmtlclRyYW5zcG9ydCIsICJfaXNIb3N0IiwgIlNlbGZUcmFuc3BvcnQiLCAiVHJhbnNwb3J0RmFjdG9yeSIsICJiY05hbWUiLCAiaXNIb3N0IiwgImNyZWF0ZUNvbm5lY3Rpb25PYnNlcnZlciIsICJ0cmFuc3BvcnRzIiwgInN1YmplY3QiLCAiY29ubiIsICJEQl9OQU1FIiwgIkRCX1ZFUlNJT04iLCAiU1RPUkVTIiwgIkNoYW5uZWxTdG9yYWdlIiwgImRiIiwgIm1lc3NhZ2VzU3RvcmUiLCAibWFpbGJveFN0b3JlIiwgInBlbmRpbmdTdG9yZSIsICJleGNoYW5nZVN0b3JlIiwgInN0b3JlZE1lc3NhZ2UiLCAidHgiLCAic3RvcmUiLCAiaW5kZXgiLCAicmVzdWx0cyIsICJjdXJzb3IiLCAibWVzc2FnZUlkIiwgInN0YXR1cyIsICJtZXNzYWdlcyIsICJzdGF0cyIsICJkZWxldGVkQ291bnQiLCAib3BlcmF0aW9uIiwgInBlbmRpbmciLCAib3BlcmF0aW9uSWQiLCAicG9sbEludGVydmFsIiwgInN0YXJ0VGltZSIsICJyZWNvcmQiLCAiZ2V0UmVxdWVzdCIsICJDaGFubmVsVHJhbnNhY3Rpb24iLCAib3BlcmF0aW9ucyIsICJzdG9yZU5hbWVzIiwgImdldFJlcSIsICJtc2dSZXF1ZXN0IiwgIm1haWxSZXF1ZXN0IiwgIl9zdG9yYWdlIiwgInVwZGF0ZXMiLCAiX3N0b3JhZ2VJbnN0YW5jZXMiLCAiZ2V0Q2hhbm5lbFN0b3JhZ2UiLCAiY2xvc2VBbGxTdG9yYWdlIiwgInN0b3JhZ2UiLCAid29ya2VyQmFzZSIsICJ3b3JrZXJDb2RlIiwgIlJlbW90ZUNoYW5uZWxIZWxwZXIkMSIsICJfY2hhbm5lbCIsICJfY29udGV4dCIsICJub3JtYWxpemVkUGF0aCIsICJub3JtYWxpemVkQWN0aW9uIiwgImlzUmVmbGVjdEFjdGlvbiIsICJDaGFubmVsSGFuZGxlciQxIiwgIm5vcm1hbGl6ZVRyYW5zcG9ydEJpbmRpbmciLCAiZ2V0RHluYW1pY1RyYW5zcG9ydFR5cGUiLCAiQ2hhbm5lbENvbnRleHQiLCAiaG9zdE5hbWUiLCAiZW5kcG9pbnQiLCAiY29ubmVjdGVkVGFyZ2V0cyIsICJuYW1lcyIsICJpbml0Rm4iLCAid29ya2VySW5zdGFuY2UiLCAibG9hZFdvcmtlciQxIiwgInJlYWR5IiwgImJyb2FkY2FzdE5hbWUiLCAiYmMiLCAic2VsZlRhcmdldCIsICJoYW5kbGVyMSIsICJoYW5kbGVyMiIsICJyZWFkeTEiLCAicmVhZHkyIiwgImNoYW5uZWwxIiwgImNoYW5uZWwyIiwgIm1zZ0NoYW5uZWwiLCAiaW5mbyIsICJkaXJlY3Rpb24iLCAibWFwcGVkVHJhbnNwb3J0VHlwZSIsICJ1bmlmaWVkIiwgInN1YnNjcmlwdGlvbiIsICJpc1RyYW5zcG9ydEJpbmRpbmciLCAibmF0aXZlVGFyZ2V0IiwgImVmZmVjdGl2ZVRhcmdldCIsICJDT05URVhUX1JFR0lTVFJZIiwgIkRFRkFVTFRfQ09OVEVYVCIsICJnZXREZWZhdWx0Q29udGV4dCIsICJjcmVhdGVDaGFubmVsQ29udGV4dCIsICJnZXRPckNyZWF0ZUNvbnRleHQiLCAiZ2V0Q29udGV4dCIsICJkZWxldGVDb250ZXh0IiwgImdldENvbnRleHROYW1lcyIsICJjcmVhdGVDaGFubmVsc0luQ29udGV4dCIsICJjaGFubmVsTmFtZXMiLCAiY29udGV4dE9wdGlvbnMiLCAiY29udGV4dCIsICJpbXBvcnRNb2R1bGVJbkNvbnRleHQiLCAiYWRkV29ya2VyQ2hhbm5lbCIsICJhZGRQb3J0Q2hhbm5lbCIsICJhZGRCcm9hZGNhc3RDaGFubmVsIiwgImFkZFNlbGZDaGFubmVsVG9EZWZhdWx0IiwgImRlZmVyQ2hhbm5lbCIsICJpbml0RGVmZXJyZWRDaGFubmVsIiwgImdldENoYW5uZWxGcm9tRGVmYXVsdCIsICJjcmVhdGVEZWZhdWx0Q2hhbm5lbFBhaXIiLCAiVHJhbnNwb3J0T2JzZXJ2YWJsZSIsICJmaXJzdCIsICJXb3JrZXJPYnNlcnZhYmxlIiwgIl93b3JrZXIiLCAiTWVzc2FnZVBvcnRPYnNlcnZhYmxlIiwgIkJyb2FkY2FzdENoYW5uZWxPYnNlcnZhYmxlIiwgIldlYlNvY2tldE9ic2VydmFibGUiLCAiY29kZSIsICJyZWFzb24iLCAiQ2hyb21lUnVudGltZU9ic2VydmFibGUkMSIsICJDaHJvbWVUYWJzT2JzZXJ2YWJsZSQxIiwgIkNocm9tZVBvcnRPYnNlcnZhYmxlJDEiLCAiU2VydmljZVdvcmtlckNsaWVudE9ic2VydmFibGUiLCAiU2VydmljZVdvcmtlckhvc3RPYnNlcnZhYmxlIiwgIlNlbGZPYnNlcnZhYmxlIiwgIlRyYW5zcG9ydE9ic2VydmFibGVGYWN0b3J5IiwgInciLCAiY2giLCAiY3JlYXRlQmlkaXJlY3Rpb25hbENoYW5uZWwkMSIsICJvdXRib3VuZCIsICJXb3JrZXJDb250ZXh0IiwgImNsb3NlZCIsICJXT1JLRVJfQ09OVEVYVCIsICJnZXRXb3JrZXJDb250ZXh0IiwgImluaXRXb3JrZXJDb250ZXh0IiwgIm9uV29ya2VyQ29ubmVjdGlvbiIsICJvbldvcmtlckNoYW5uZWxDcmVhdGVkIiwgIldPUktFUl9SRVNQT05ERVIiLCAiV09SS0VSX0lOVk9LRVIiLCAiZ2V0V29ya2VyUmVzcG9uZGVyIiwgImdldFdvcmtlckludm9rZXIiLCAiZXhwb3NlRnJvbVdvcmtlciIsICJvbldvcmtlckludm9jYXRpb24iLCAiY3JlYXRlSG9zdFByb3h5IiwgImhvc3RDaGFubmVsIiwgImltcG9ydEluSG9zdCIsICJCYXNlQ2hyb21lT2JzZXJ2YWJsZSIsICJDaHJvbWVSdW50aW1lT2JzZXJ2YWJsZSIsICJfaGFuZGxlciIsICJfc2VuZGVyIiwgIl9mcmFtZUlkIiwgIkNocm9tZVRhYnNPYnNlcnZhYmxlIiwgIkNocm9tZVBvcnRPYnNlcnZhYmxlIiwgIkNocm9tZUV4dGVybmFsT2JzZXJ2YWJsZSIsICJfZXh0ZW5zaW9uSWQiLCAiY3JlYXRlQ2hyb21lUmVxdWVzdEhhbmRsZXIiLCAiaGFuZGxlcnMiLCAiZXJyb3IiLCAiQ2hyb21lT2JzZXJ2YWJsZUZhY3RvcnkiLCAiZXh0ZW5zaW9uSWQiLCAiU29ja2V0SU9PYnNlcnZhYmxlIiwgIl9zb2NrZXQiLCAiYWNrIiwgIm9uQ29ubmVjdCIsICJvbkRpc2Nvbm5lY3QiLCAiU29ja2V0SU9Sb29tT2JzZXJ2YWJsZSIsICJfcGFyZW50IiwgIl9yb29tTmFtZSIsICJjcmVhdGVTb2NrZXRSZXF1ZXN0SGFuZGxlciIsICJTb2NrZXRJT09ic2VydmFibGVGYWN0b3J5IiwgInJvb21OYW1lIiwgImNyZWF0ZVNvY2tldE9ic2VydmFibGUiLCAiU2hhcmVkV29ya2VyQ2xpZW50IiwgIl9zY3JpcHRVcmwiLCAiU2hhcmVkV29ya2VySG9zdCIsICJwb3J0SWQiLCAicmVhbFBvcnRJZCIsICJlbnRyeSIsICJleGNsdWRlUG9ydElkIiwgImNyZWF0ZVNoYXJlZFdvcmtlck9ic2VydmFibGUiLCAic2NyaXB0VXJsIiwgImNyZWF0ZVNoYXJlZFdvcmtlckhvc3RPYnNlcnZhYmxlIiwgIlNoYXJlZFdvcmtlck9ic2VydmFibGVGYWN0b3J5IiwgImNib3JFbmNvZGVyIiwgImdldENCT1JFbmNvZGVyIiwgImNib3J4IiwgInJlcGxhY2VyIiwgInJldml2ZXIiLCAiX2tleSIsICJUeXBlZEFycmF5Q3RvciIsICJIRUFERVJfU0laRSIsICJMT0NLX09GRlNFVCIsICJTRVFfT0ZGU0VUIiwgIlNJWkVfT0ZGU0VUIiwgIkZMQUdTX09GRlNFVCIsICJSRUFEWV9PRkZTRVQiLCAiQUNLX09GRlNFVCIsICJEQVRBX09GRlNFVCIsICJGTEFHX0hBU19UUkFOU0ZFUiIsICJGTEFHX0NPTVBSRVNTRUQiLCAiRkxBR19SRVNQT05TRSIsICJBdG9taWNzQnVmZmVyIiwgImJ1ZmZlck9yU2l6ZSIsICJfY29uZmlnIiwgImZsYWdzIiwgInNpemUiLCAic2VxIiwgImV4cGVjdGVkU2VxIiwgInN0YXJ0IiwgIkF0b21pY3NUcmFuc3BvcnQiLCAic2VuZEJ1ZmZlciIsICJyZWN2QnVmZmVyIiwgImVuY29kZWQiLCAiY3JlYXRlQXRvbWljc0NoYW5uZWxQYWlyIiwgImJ1ZmZlckEiLCAiYnVmZmVyQiIsICJjcmVhdGVXb3JrZXJBdG9taWNzVHJhbnNwb3J0IiwgIkF0b21pY3NSaW5nQnVmZmVyIiwgImJ1ZmZlck9yQ29uZmlnIiwgInRvdGFsU2l6ZSIsICJ3cml0ZUlkeCIsICJyZWFkSWR4IiwgInNsb3QiLCAiQXRvbWljc1RyYW5zcG9ydEZhY3RvcnkiLCAicmVjdiIsICJzaXplT3JCdWZmZXIiLCAiREVGQVVMVF9JQ0VfU0VSVkVSUyIsICJSVENQZWVyVHJhbnNwb3J0IiwgInJlbW90ZUlkIiwgIm9mZmVyIiwgImFuc3dlciIsICJiaW5hcnkiLCAicGVlcklkIiwgImRhdGFDaGFubmVsTGFiZWwiLCAianNvbiIsICJidWZmZXIiLCAiUlRDUGVlck1hbmFnZXIiLCAicGVlciIsICJjcmVhdGVCcm9hZGNhc3RTaWduYWxpbmciLCAiUlRDVHJhbnNwb3J0RmFjdG9yeSIsICJQb3J0VHJhbnNwb3J0IiwgImNyZWF0ZUNoYW5uZWxQYWlyIiwgImNyZWF0ZUZyb21Qb3J0IiwgIlBvcnRQb29sIiwgIl9kZWZhdWx0Q29uZmlnIiwgIldpbmRvd1BvcnRDb25uZWN0b3IiLCAiX3RhcmdldCIsICJsb2NhbCIsICJyZW1vdGUiLCAiY3JlYXRlUG9ydFByb3h5IiwgInRhcmdldFBhdGgiLCAiZXhwb3NlT3ZlclBvcnQiLCAiUG9ydFRyYW5zcG9ydEZhY3RvcnkiLCAiVHJhbnNmZXJhYmxlU3RvcmFnZSIsICJpZHgiLCAiYnVmZmVycyIsICJidWYiLCAiYXJyYXkiLCAic2tpcHBlZCIsICJvZmZzZXQiLCAibGltaXQiLCAiZXhwaXJlZCIsICJNZXNzYWdlUXVldWVTdG9yYWdlIiwgImRiTmFtZSIsICJxdWV1ZWRNZXNzYWdlIiwgIlRyYW5zZmVyYWJsZVN0b3JhZ2VGYWN0b3J5IiwgIlNlcnZpY2VXb3JrZXJIb3N0IiwgImNsaWVudEluZm8iLCAiY2xpZW50IiwgInN1YnNjcmliZXJzIiwgImRlbGl2ZXJlZENvdW50IiwgInN0b3JlZCIsICJtZXNzYWdlU3ViIiwgImFsbENsaWVudHMiLCAiYWN0aXZlSWRzIiwgIlNlcnZpY2VXb3JrZXJDbGllbnQiLCAiY3JlYXRlU2VydmljZVdvcmtlckhvc3QiLCAiY3JlYXRlU2VydmljZVdvcmtlckNsaWVudCIsICJiaW5kU2VydmljZVdvcmtlckhvc3RCcmlkZ2UiLCAic2NvcGUiLCAiQWJzdHJhY3RUcmFuc3BvcnQiLCAiX3R5cGUiLCAiTmF0aXZlVHJhbnNwb3J0IiwgImNyZWF0ZVRyYW5zcG9ydCIsICJiYXNlQ29uZmlnIiwgIndzIiwgIm8iLCAiYnJpZGdlIiwgIm1hbmFnZXIiLCAiVHJhbnNwb3J0UmVnaXN0cnkiLCAiX3JlZ2lzdHJ5IiwgImdldFRyYW5zcG9ydFJlZ2lzdHJ5IiwgIlVuaWZpZWRUcmFuc3BvcnRGYWN0b3J5IiwgIlF1ZXVlZFdvcmtlckNoYW5uZWwiLCAib25DaGFubmVsUmVhZHkiLCAidW5kZXJseWluZ0NoYW5uZWwiLCAibWV0aG9kIiwgInF1ZXVlZFJlcXVlc3QiLCAicXVldWVDb3B5IiwgImdldEN1cnJlbnRUYWJJZCIsICJ0YWJzIiwgImdldFZpc2libGVUYWJJZCIsICJ2aXNpYmxlVGFiIiwgInRhYiIsICJyZWdpc3RlcldvcmtlckFQSSIsICJhcGkiLCAiY2hhbm5lbEhhbmRsZXIiLCAibWV0aG9kTmFtZSIsICJPcHRpbWl6ZWRXb3JrZXJDaGFubmVsIiwgImVudmVsb3BlIiwgImNodW5rIiwgImJhdGNoRW52ZWxvcGUiLCAiTWVzc2FnZVF1ZXVlIiwgImRlc3RpbmF0aW9uIiwgInJldHJ5Q291bnQiLCAiZXhwaXJlZElkcyIsICJieVByaW9yaXR5IiwgImJ5RGVzdGluYXRpb24iLCAiZmlsdGVyZWQiLCAiaW5zdGFuY2VzIiwgImdldE1lc3NhZ2VRdWV1ZSIsICJjcmVhdGVNZXNzYWdlUXVldWUiLCAicnVudGltZUxpc3RlbmVyUmVnaXN0cnkiLCAicnVudGltZUxpc3RlbmVySW5zdGFsbGVkIiwgImVuc3VyZVJ1bnRpbWVMaXN0ZW5lciIsICJsaXN0ZW5lcnMiLCAib3V0IiwgIkNocm9tZUV4dGVuc2lvbkJyb2FkY2FzdENoYW5uZWwiLCAic2V0IiwgIm1lc3NhZ2VXaXRoQ2hhbm5lbCIsICJDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCIsICJ3cmFwcGVkIiwgInRhcmdldFRhYklkIiwgInRhcmdldFRhYnMiLCAicHJvbWlzZXMiLCAiQ2hyb21lRXh0ZW5zaW9uUG9ydENoYW5uZWwiLCAiY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQ2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25Ccm9hZGNhc3QiLCAiY3JlYXRlQ2hyb21lRXh0ZW5zaW9uQnJvYWRjYXN0Q2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzQ2hhbm5lbCIsICJjcmVhdGVDaHJvbWVFeHRlbnNpb25UYWJzTWVzc2FnaW5nQ2hhbm5lbCIsICJpbml0TWFpbkNoYW5uZWwiLCAiY3JlYXRlUXVldWVkV29ya2VyQ2hhbm5lbCIsICJjcmVhdGVTZXJ2aWNlV29ya2VyQ2hhbm5lbCIsICJjcmVhdGVXb3JrZXJDaGFubmVsIiwgImNyZWF0ZU9wdGltaXplZFdvcmtlckNoYW5uZWwiLCAiYmFzZUNoYW5uZWwiLCAiY3JlYXRlUXVldWVkT3B0aW1pemVkV29ya2VyQ2hhbm5lbCIsICJvcHRpbWl6ZWRDaGFubmVsIiwgIlBVUlBPU0VTIiwgIkRFRkFVTFRfUFVSUE9TRSIsICJhc1N0cmluZyIsICJub3JtYWxpemVQYXRoIiwgIm5vcm1hbGl6ZUFyZ3MiLCAibm9ybWFsaXplVHJhbnNmZXIiLCAibm9ybWFsaXplUHVycG9zZSIsICJwdXJwb3NlIiwgImlucHV0IiwgImRlZHVwZWQiLCAiaW5mZXJUeXBlIiwgImV4cGxpY2l0IiwgImluZmVyT3BlcmF0aW9uIiwgInJlc29sdmVkVHlwZSIsICJpbmZlclByb3RvY29sIiwgInByb3RvY29sIiwgInJhbmRvbUlkIiwgImNyZWF0ZVByb3RvY29sRW52ZWxvcGUiLCAidGltZXN0YW1wIiwgImRzdENoYW5uZWwiLCAidXVpZCIsICJtZXRhZGF0YSIsICJpc1Byb3RvY29sRW52ZWxvcGUiLCAiY2FuZGlkYXRlIiwgIm5vcm1hbGl6ZVByb3RvY29sRW52ZWxvcGUiLCAiUHJvdG9jb2xSZXBsYXlHdWFyZCIsICJ3aW5kb3dNcyIsICJwcmV2aW91cyIsICJ0cyIsICJQZW5kaW5nTWVzc2FnZVN0b3JlIiwgInBhcnNlZCIsICJrZWVwIiwgIlVuaWZpZWRNZXNzYWdpbmdNYW5hZ2VyIiwgImZ1bGxNZXNzYWdlIiwgInZpZXdIYXNoIiwgImNvbmZpZ3MiLCAiY2hhbm5lbEtleSIsICJkZWZlcnJlZCIsICJpbml0UHJvbWlzZXMiLCAid29ya2VyTmFtZSIsICJwaXBlbGluZU5hbWUiLCAicGlwZWxpbmUiLCAiY3VycmVudE1lc3NhZ2UiLCAic3RhZ2UiLCAic3RhZ2VUaW1lb3V0IiwgInJldHJpZXMiLCAiYXR0ZW1wdCIsICJxdWV1ZWRNZXNzYWdlcyIsICJkYXRhQXNNZXNzYWdlIiwgImNvbXBvbmVudElkIiwgImRlc3QiLCAibWFwcGluZ3MiLCAiZmFsbGJhY2tTb3VyY2UiLCAicmVzIiwgInJlaiIsICJkZWZhdWx0SW5zdGFuY2UiLCAiZ2V0VW5pZmllZE1lc3NhZ2luZyIsICJjcmVhdGVVbmlmaWVkTWVzc2FnaW5nIiwgInJlc2V0VW5pZmllZE1lc3NhZ2luZyIsICJzZW5kTWVzc2FnZSIsICJyZWdpc3RlckhhbmRsZXIiLCAiZ2V0QnJvYWRjYXN0Q2hhbm5lbCIsICJTZXJ2aWNlQ2hhbm5lbE1hbmFnZXIiLCAiY2hhbm5lbElkIiwgInJlc29sdmVSZWFkeSIsICJyZWFkeVByb21pc2UiLCAiY3JlYXRlU2VydmljZUNoYW5uZWxNYW5hZ2VyIiwgImRlZmF1bHRNYW5hZ2VyIiwgImdldFNlcnZpY2VDaGFubmVsTWFuYWdlciIsICJyZXNldFNlcnZpY2VDaGFubmVsTWFuYWdlciIsICJtYWtlQ2hhbm5lbE1lc3NhZ2VIYW5kbGVyIiwgIkNoYW5uZWxNZXNzYWdlT2JzZXJ2YWJsZSIsICJjcmVhdGVDaGFubmVsUmVxdWVzdEhhbmRsZXIiLCAiT2JzZXJ2YWJsZVJlcXVlc3REaXNwYXRjaGVyIiwgIl90YXJnZXRDaGFubmVsIiwgInN5bmMiLCAiaW1wb3J0TW9kdWxlSW5DaGFubmVsIiwgImNyZWF0ZUNvbnRleHQiLCAiZ2V0U2hhcmVkQ29udGV4dCIsICJjcmVhdGVNdWx0aUNoYW5uZWwiLCAiaW1wb3J0SXNvbGF0ZWRNb2R1bGUiLCAiY29ubmVjdFRvQ2hhbm5lbEFzTW9kdWxlIiwgImNyZWF0ZUNocm9tZUV4dGVuc2lvblJ1bnRpbWVDaGFubmVsIl0KfQo=