@adstore/templates 2.1.0 → 2.1.2

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.
@@ -117,6 +117,15 @@
117
117
  return { current: n };
118
118
  }, []);
119
119
  }
120
+ function A(n, t2, r2) {
121
+ o$1 = 6, y(function() {
122
+ return "function" == typeof n ? (n(t2()), function() {
123
+ return n(null);
124
+ }) : n ? (n.current = t2(), function() {
125
+ return n.current = null;
126
+ }) : void 0;
127
+ }, null == r2 ? r2 : r2.concat(n));
128
+ }
120
129
  function F$1(n, r2) {
121
130
  var u2 = d(t++, 7);
122
131
  return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
@@ -129,7 +138,7 @@
129
138
  for (var t2; t2 = f.shift(); )
130
139
  if (t2.__P && t2.__H)
131
140
  try {
132
- t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
141
+ t2.__H.__h.forEach(k$1), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
133
142
  } catch (r2) {
134
143
  t2.__H.__h = [], preact.options.__e(r2, t2.__v);
135
144
  }
@@ -141,7 +150,7 @@
141
150
  var i2 = (r = n.__c).__H;
142
151
  i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
143
152
  n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
144
- })) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
153
+ })) : (i2.__h.forEach(k$1), i2.__h.forEach(w$1), i2.__h = [])), u = r;
145
154
  }, preact.options.diffed = function(t2) {
146
155
  v && v(t2);
147
156
  var o2 = t2.__c;
@@ -151,7 +160,7 @@
151
160
  }, preact.options.__c = function(t2, r2) {
152
161
  r2.some(function(t3) {
153
162
  try {
154
- t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
163
+ t3.__h.forEach(k$1), t3.__h = t3.__h.filter(function(n) {
155
164
  return !n.__ || w$1(n);
156
165
  });
157
166
  } catch (u2) {
@@ -165,7 +174,7 @@
165
174
  var r2, u2 = t2.__c;
166
175
  u2 && u2.__H && (u2.__H.__.forEach(function(n) {
167
176
  try {
168
- k(n);
177
+ k$1(n);
169
178
  } catch (n2) {
170
179
  r2 = n2;
171
180
  }
@@ -178,7 +187,7 @@
178
187
  }, u2 = setTimeout(r2, 100);
179
188
  g$1 && (t2 = requestAnimationFrame(r2));
180
189
  }
181
- function k(n) {
190
+ function k$1(n) {
182
191
  var t2 = r, u2 = n.__c;
183
192
  "function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
184
193
  }
@@ -218,6 +227,14 @@
218
227
  preact.options.__b = function(n) {
219
228
  n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
220
229
  };
230
+ var N = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
231
+ function k(n) {
232
+ function t2(t3) {
233
+ var e2 = g({}, t3);
234
+ return delete e2.ref, n(e2, t3.ref || null);
235
+ }
236
+ return t2.$$typeof = N, t2.render = t2, t2.prototype.isReactComponent = t2.__f = true, t2.displayName = "ForwardRef(" + (n.displayName || n.name) + ")", t2;
237
+ }
221
238
  var T = preact.options.__e;
222
239
  preact.options.__e = function(n, t2, e2, r2) {
223
240
  if (n.then) {
@@ -685,9 +702,9 @@
685
702
  var _mapCacheHas = mapCacheHas$1;
686
703
  var getMapData = _getMapData;
687
704
  function mapCacheSet$1(key, value) {
688
- var data = getMapData(this, key), size = data.size;
705
+ var data = getMapData(this, key), size2 = data.size;
689
706
  data.set(key, value);
690
- this.size += data.size == size ? 0 : 1;
707
+ this.size += data.size == size2 ? 0 : 1;
691
708
  return this;
692
709
  }
693
710
  var _mapCacheSet = mapCacheSet$1;
@@ -1371,7 +1388,7 @@
1371
1388
  const body$6 = "_body_24bq9_22";
1372
1389
  const bodyOpen$1 = "_bodyOpen_24bq9_30";
1373
1390
  const simpleGift_in = "_simpleGift_in_24bq9_1";
1374
- const close$1 = "_close_24bq9_43";
1391
+ const close$4 = "_close_24bq9_43";
1375
1392
  const arrow$1 = "_arrow_24bq9_57";
1376
1393
  const container$2 = "_container_24bq9_68";
1377
1394
  const inner$1 = "_inner_24bq9_74";
@@ -1396,7 +1413,7 @@
1396
1413
  body: body$6,
1397
1414
  bodyOpen: bodyOpen$1,
1398
1415
  simpleGift_in,
1399
- close: close$1,
1416
+ close: close$4,
1400
1417
  arrow: arrow$1,
1401
1418
  container: container$2,
1402
1419
  inner: inner$1,
@@ -1422,8 +1439,12 @@
1422
1439
  }) => {
1423
1440
  const [isOpen, setIsOpen] = h(false);
1424
1441
  const timerRef = _$1(null);
1425
- const onToggle = () => {
1442
+ const clear = (timer) => {
1426
1443
  clearTimeout(timerRef.current);
1444
+ timerRef.current = null;
1445
+ };
1446
+ const onToggle = () => {
1447
+ clear(timerRef.current);
1427
1448
  setIsOpen((prev) => !prev);
1428
1449
  };
1429
1450
  p(() => {
@@ -1431,10 +1452,10 @@
1431
1452
  setIsOpen(true);
1432
1453
  onAutoOpen && onAutoOpen();
1433
1454
  }, delay || 1e3);
1434
- return () => clearTimeout(timerRef.current);
1455
+ return () => clear(timerRef.current);
1435
1456
  }, [delay]);
1436
1457
  p(() => {
1437
- if (isOpen) {
1458
+ if (isOpen && !timerRef.current) {
1438
1459
  onOpen && onOpen();
1439
1460
  }
1440
1461
  }, [isOpen]);
@@ -1464,10 +1485,24 @@
1464
1485
  children
1465
1486
  });
1466
1487
  };
1467
- const render = (vNode) => (target, state) => preact.render(o(StateContext, {
1468
- value: state,
1469
- children: vNode
1470
- }), target);
1488
+ const render = (vNode) => async ({
1489
+ target,
1490
+ id,
1491
+ ref,
1492
+ state
1493
+ }) => {
1494
+ if (!("ResizeObserver" in window)) {
1495
+ const module2 = await Promise.resolve().then(() => resizeObserver);
1496
+ window.ResizeObserver = module2.ResizeObserver;
1497
+ }
1498
+ return preact.render(o(StateContext, {
1499
+ value: state,
1500
+ children: preact.cloneElement(vNode, {
1501
+ ref,
1502
+ id
1503
+ })
1504
+ }), target);
1505
+ };
1471
1506
  const useCurrentState = () => q$1(State);
1472
1507
  const isValidLayer = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
1473
1508
  const getRules = (state, device) => {
@@ -1489,6 +1524,7 @@
1489
1524
  };
1490
1525
  const useGetRules = (state, device) => getRules(state, device);
1491
1526
  const useContainerDevice = ({
1527
+ id,
1492
1528
  targetRef,
1493
1529
  parentKey = "device-container",
1494
1530
  breakpoints = BREAKPOINTS
@@ -1507,10 +1543,10 @@
1507
1543
  setDevice(findDevice);
1508
1544
  };
1509
1545
  y(() => {
1510
- const parentElement = targetRef.current.closest(`[data-${parentKey}]`);
1546
+ const parentElement = targetRef.current.closest(`[data-${parentKey}='${id}']`) || document.body;
1511
1547
  if (parentElement) {
1512
- const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
1513
- resizeObserver.observe(parentElement);
1548
+ const resizeObserver2 = new ResizeObserver(() => checkDevice(parentElement));
1549
+ resizeObserver2.observe(parentElement);
1514
1550
  checkDevice(parentElement);
1515
1551
  }
1516
1552
  }, []);
@@ -1681,7 +1717,7 @@
1681
1717
  const backgroundStyles = isValue((_j = rules == null ? void 0 : rules.icon) == null ? void 0 : _j.gradientColor) && ((_k = rules == null ? void 0 : rules.icon) == null ? void 0 : _k.animations.includes("gradient")) ? {
1682
1718
  background: `linear-gradient(-90deg, ${(_l = rules.icon) == null ? void 0 : _l.backgroundColor} 0%, ${(_m = rules == null ? void 0 : rules.icon) == null ? void 0 : _m.gradientColor} 100%) 0% 0% / 400% 400%`,
1683
1719
  backgroundSize: "400% 400%"
1684
- } : {};
1720
+ } : rules == null ? void 0 : rules.icon;
1685
1721
  const iconRules = {
1686
1722
  ...(rules == null ? void 0 : rules.icon) || {},
1687
1723
  animation: allAnimations,
@@ -1748,13 +1784,16 @@
1748
1784
  }, []);
1749
1785
  return cycles.onClick || noop;
1750
1786
  };
1751
- const SimpleGift = () => {
1787
+ const SimpleGift = k(({
1788
+ id
1789
+ }, _ref) => {
1752
1790
  var _a, _b, _c, _d, _e, _f, _g;
1753
1791
  const rootRef = _$1(null);
1754
1792
  const [legalIsOpen, toggleLegalIsOpen] = useToggle();
1755
1793
  const state = useCurrentState();
1756
1794
  const device = useContainerDevice({
1757
- targetRef: rootRef
1795
+ targetRef: rootRef,
1796
+ id
1758
1797
  });
1759
1798
  const deviceState = useGetRules(state, device);
1760
1799
  const rules = useParseRules(deviceState);
@@ -1858,7 +1897,7 @@
1858
1897
  })]
1859
1898
  })]
1860
1899
  });
1861
- };
1900
+ });
1862
1901
  const index$6 = render(o(SimpleGift, {}));
1863
1902
  const root$c = "_root_1hrqs_1";
1864
1903
  const icon = "_icon_1hrqs_5";
@@ -1872,7 +1911,7 @@
1872
1911
  const arrow = "_arrow_1hrqs_46";
1873
1912
  const container$1 = "_container_1hrqs_56";
1874
1913
  const promotion$1 = "_promotion_1hrqs_61";
1875
- const close = "_close_1hrqs_69";
1914
+ const close$3 = "_close_1hrqs_69";
1876
1915
  const head$1 = "_head_1hrqs_83";
1877
1916
  const headIcon = "_headIcon_1hrqs_90";
1878
1917
  const headTitle = "_headTitle_1hrqs_96";
@@ -1894,7 +1933,7 @@
1894
1933
  arrow,
1895
1934
  container: container$1,
1896
1935
  promotion: promotion$1,
1897
- close,
1936
+ close: close$3,
1898
1937
  head: head$1,
1899
1938
  headIcon,
1900
1939
  headTitle,
@@ -1975,12 +2014,15 @@
1975
2014
  })]
1976
2015
  });
1977
2016
  };
1978
- const ComplexGift = () => {
2017
+ const ComplexGift = k(({
2018
+ id
2019
+ }, _ref) => {
1979
2020
  var _a, _b, _c, _d;
1980
2021
  const rootRef = _$1(null);
1981
2022
  const state = useCurrentState();
1982
2023
  const device = useContainerDevice({
1983
- targetRef: rootRef
2024
+ targetRef: rootRef,
2025
+ id
1984
2026
  });
1985
2027
  const deviceState = useGetRules(state, device);
1986
2028
  const {
@@ -2062,22 +2104,30 @@
2062
2104
  })]
2063
2105
  })]
2064
2106
  });
2065
- };
2107
+ });
2066
2108
  const index$5 = render(o(ComplexGift, {}));
2067
- const root$a = "_root_1l0ud_1";
2068
- const laptop$3 = "_laptop_1l0ud_11";
2069
- const tablet$2 = "_tablet_1l0ud_16";
2070
- const desktop$7 = "_desktop_1l0ud_21";
2071
- const body$3 = "_body_1l0ud_26";
2072
- const logo$4 = "_logo_1l0ud_37";
2073
- const text$2 = "_text_1l0ud_43";
2074
- const button$4 = "_button_1l0ud_47";
2075
- const legal$3 = "_legal_1l0ud_62";
2109
+ const root$a = "_root_15w5v_1";
2110
+ const content$3 = "_content_15w5v_11";
2111
+ const laptop$3 = "_laptop_15w5v_20";
2112
+ const tablet$2 = "_tablet_15w5v_24";
2113
+ const desktop$7 = "_desktop_15w5v_28";
2114
+ const wrapper$2 = "_wrapper_15w5v_32";
2115
+ const overlay$2 = "_overlay_15w5v_36";
2116
+ const close$2 = "_close_15w5v_42";
2117
+ const body$3 = "_body_15w5v_50";
2118
+ const logo$4 = "_logo_15w5v_62";
2119
+ const text$2 = "_text_15w5v_68";
2120
+ const button$4 = "_button_15w5v_72";
2121
+ const legal$3 = "_legal_15w5v_87";
2076
2122
  const styles$a = {
2077
2123
  root: root$a,
2124
+ content: content$3,
2078
2125
  laptop: laptop$3,
2079
2126
  tablet: tablet$2,
2080
2127
  desktop: desktop$7,
2128
+ wrapper: wrapper$2,
2129
+ overlay: overlay$2,
2130
+ close: close$2,
2081
2131
  body: body$3,
2082
2132
  logo: logo$4,
2083
2133
  text: text$2,
@@ -2105,11 +2155,32 @@
2105
2155
  })
2106
2156
  });
2107
2157
  };
2108
- const SimplePopup$2 = () => {
2109
- var _a, _b, _c, _d, _e, _f;
2158
+ const usePopup = (ref) => {
2159
+ const [isOpen, setIsOpen] = h(false);
2160
+ const show = () => setIsOpen(true);
2161
+ const hide = () => setIsOpen(false);
2162
+ A(ref, () => ({
2163
+ show,
2164
+ hide
2165
+ }));
2166
+ return {
2167
+ isOpen,
2168
+ show,
2169
+ hide
2170
+ };
2171
+ };
2172
+ const SimplePopup = k(({
2173
+ id
2174
+ }, ref) => {
2175
+ var _a, _b, _c, _d, _e, _f, _g;
2110
2176
  const rootRef = _$1(null);
2177
+ const {
2178
+ isOpen,
2179
+ hide
2180
+ } = usePopup(ref);
2111
2181
  const device = useContainerDevice({
2112
- targetRef: rootRef
2182
+ targetRef: rootRef,
2183
+ id
2113
2184
  });
2114
2185
  const state = useCurrentState();
2115
2186
  const deviceState = useGetRules(state, device);
@@ -2128,50 +2199,76 @@
2128
2199
  ...rules == null ? void 0 : rules.legal,
2129
2200
  justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
2130
2201
  };
2131
- return o("a", {
2202
+ return o("div", {
2203
+ className: styles$a.root,
2132
2204
  ref: rootRef,
2133
- href: (_f = rules.root) == null ? void 0 : _f.offer,
2134
- target: "_blank",
2135
- rel: "nofollow noopener noreferrer",
2136
- className: classNames(styles$a.root, {
2137
- [styles$a.desktop]: device === "desktop",
2138
- [styles$a.tablet]: device === "tablet",
2139
- [styles$a.laptop]: device === "laptop"
2140
- }),
2141
- style: rules.root,
2142
- onClick,
2143
- children: o("div", {
2144
- className: styles$a.body,
2145
- style: bodyRules,
2205
+ style: {
2206
+ display: isOpen ? "flex" : "none"
2207
+ },
2208
+ children: [o("div", {
2209
+ className: styles$a.overlay,
2210
+ style: rules.overlay,
2211
+ onClick: hide
2212
+ }), o("div", {
2213
+ className: styles$a.wrapper,
2146
2214
  children: [o("div", {
2147
- className: styles$a.logo,
2148
- style: rules.logo
2149
- }), o("div", {
2150
- className: styles$a.text,
2151
- children: ((rules == null ? void 0 : rules.children) || []).map((el) => o(StateContext, {
2152
- value: el,
2153
- children: o(Line, {})
2154
- }))
2155
- }), o("div", {
2156
- className: styles$a.button,
2157
- style: buttonRules,
2158
- children: buttonRules == null ? void 0 : buttonRules.children
2159
- }), o("div", {
2160
- className: styles$a.legal,
2161
- style: legalRules,
2162
- children: legalRules == null ? void 0 : legalRules.children
2215
+ className: styles$a.close,
2216
+ style: {
2217
+ color: (_f = rules.close) == null ? void 0 : _f.backgroundColor
2218
+ },
2219
+ onClick: hide,
2220
+ children: o(CloseIcon, {})
2221
+ }), o("a", {
2222
+ href: (_g = rules.root) == null ? void 0 : _g.offer,
2223
+ target: "_blank",
2224
+ rel: "nofollow noopener noreferrer",
2225
+ className: classNames(styles$a.content, {
2226
+ [styles$a.desktop]: device === "desktop",
2227
+ [styles$a.tablet]: device === "tablet",
2228
+ [styles$a.laptop]: device === "laptop"
2229
+ }),
2230
+ style: rules.root,
2231
+ onClick,
2232
+ children: o("div", {
2233
+ className: styles$a.body,
2234
+ style: bodyRules,
2235
+ children: [o("div", {
2236
+ className: styles$a.logo,
2237
+ style: rules.logo
2238
+ }), o("div", {
2239
+ className: styles$a.text,
2240
+ children: ((rules == null ? void 0 : rules.children) || []).map((el) => o(StateContext, {
2241
+ value: el,
2242
+ children: o(Line, {})
2243
+ }))
2244
+ }), o("div", {
2245
+ className: styles$a.button,
2246
+ style: buttonRules,
2247
+ children: buttonRules == null ? void 0 : buttonRules.children
2248
+ }), o("div", {
2249
+ className: styles$a.legal,
2250
+ style: legalRules,
2251
+ children: legalRules == null ? void 0 : legalRules.children
2252
+ })]
2253
+ })
2163
2254
  })]
2164
- })
2255
+ })]
2165
2256
  });
2166
- };
2167
- const index$4 = render(o(SimplePopup$2, {}));
2168
- const root$8 = "_root_13k8c_1";
2169
- const desktop$6 = "_desktop_13k8c_13";
2170
- const title$2 = "_title_13k8c_18";
2171
- const wrapper$1 = "_wrapper_13k8c_33";
2257
+ });
2258
+ const index$4 = render(o(SimplePopup, {}));
2259
+ const root$8 = "_root_1ifs0_1";
2260
+ const content$2 = "_content_1ifs0_5";
2261
+ const desktop$6 = "_desktop_1ifs0_18";
2262
+ const overlay$1 = "_overlay_1ifs0_23";
2263
+ const close$1 = "_close_1ifs0_29";
2264
+ const title$2 = "_title_1ifs0_36";
2265
+ const wrapper$1 = "_wrapper_1ifs0_51";
2172
2266
  const styles$8 = {
2173
2267
  root: root$8,
2268
+ content: content$2,
2174
2269
  desktop: desktop$6,
2270
+ overlay: overlay$1,
2271
+ close: close$1,
2175
2272
  title: title$2,
2176
2273
  wrapper: wrapper$1
2177
2274
  };
@@ -2243,59 +2340,89 @@
2243
2340
  })]
2244
2341
  });
2245
2342
  };
2246
- const SimplePopup$1 = () => {
2247
- var _a;
2343
+ const ComplexPopup = k(({
2344
+ id
2345
+ }, ref) => {
2346
+ var _a, _b;
2248
2347
  const rootRef = _$1(null);
2348
+ const {
2349
+ isOpen,
2350
+ hide
2351
+ } = usePopup(ref);
2249
2352
  const device = useContainerDevice({
2250
- targetRef: rootRef
2353
+ targetRef: rootRef,
2354
+ id
2251
2355
  });
2252
2356
  const state = useCurrentState();
2253
2357
  const deviceState = useGetRules(state, device);
2254
2358
  const rules = useParseRules(deviceState);
2255
2359
  useExtractFonts(deviceState);
2256
2360
  return o("div", {
2257
- ref: rootRef,
2258
- className: classNames(styles$8.root, {
2259
- [styles$8.desktop]: device === "desktop"
2260
- }),
2261
- style: rules.root,
2361
+ className: styles$8.root,
2362
+ style: {
2363
+ display: isOpen ? "flex" : "none"
2364
+ },
2262
2365
  children: [o("div", {
2263
- className: styles$8.title,
2264
- style: rules.title,
2265
- children: (_a = rules.title) == null ? void 0 : _a.children
2366
+ className: styles$8.overlay,
2367
+ style: rules.overlay,
2368
+ onClick: hide
2266
2369
  }), o("div", {
2267
- className: styles$8.wrapper,
2268
- children: (rules.children || []).map((child) => o(StateContext, {
2269
- value: {
2270
- ...child,
2271
- device
2370
+ ref: rootRef,
2371
+ className: classNames(styles$8.content, {
2372
+ [styles$8.desktop]: device === "desktop"
2373
+ }),
2374
+ style: rules.root,
2375
+ children: [o("div", {
2376
+ className: styles$8.close,
2377
+ style: {
2378
+ color: (_a = rules.close) == null ? void 0 : _a.backgroundColor
2272
2379
  },
2273
- children: o(Bonus$1, {})
2274
- }))
2380
+ onClick: hide,
2381
+ children: o(CloseIcon, {})
2382
+ }), o("div", {
2383
+ className: styles$8.title,
2384
+ style: rules.title,
2385
+ children: (_b = rules.title) == null ? void 0 : _b.children
2386
+ }), o("div", {
2387
+ className: styles$8.wrapper,
2388
+ children: (rules.children || []).map((child) => o(StateContext, {
2389
+ value: {
2390
+ ...child,
2391
+ device
2392
+ },
2393
+ children: o(Bonus$1, {})
2394
+ }))
2395
+ })]
2275
2396
  })]
2276
2397
  });
2277
- };
2278
- const index$3 = render(o(SimplePopup$1, {}));
2279
- const root$6 = "_root_i7e17_1";
2280
- const laptop$2 = "_laptop_i7e17_11";
2281
- const tablet$1 = "_tablet_i7e17_12";
2282
- const desktop$4 = "_desktop_i7e17_17";
2283
- const body$1 = "_body_i7e17_22";
2284
- const head = "_head_i7e17_34";
2285
- const title$1 = "_title_i7e17_44";
2286
- const logo$2 = "_logo_i7e17_57";
2287
- const wrapper = "_wrapper_i7e17_63";
2288
- const text = "_text_i7e17_70";
2289
- const button$2 = "_button_i7e17_85";
2290
- const buttonHead = "_buttonHead_i7e17_100";
2291
- const buttonTarget = "_buttonTarget_i7e17_119";
2292
- const legal$1 = "_legal_i7e17_135";
2398
+ });
2399
+ const index$3 = render(o(ComplexPopup, {}));
2400
+ const root$6 = "_root_14xbh_1";
2401
+ const content$1 = "_content_14xbh_11";
2402
+ const close = "_close_14xbh_19";
2403
+ const overlay = "_overlay_14xbh_27";
2404
+ const body$1 = "_body_14xbh_33";
2405
+ const desktop$4 = "_desktop_14xbh_43";
2406
+ const laptop$2 = "_laptop_14xbh_48";
2407
+ const tablet$1 = "_tablet_14xbh_48";
2408
+ const head = "_head_14xbh_53";
2409
+ const title$1 = "_title_14xbh_63";
2410
+ const logo$2 = "_logo_14xbh_76";
2411
+ const wrapper = "_wrapper_14xbh_82";
2412
+ const text = "_text_14xbh_89";
2413
+ const button$2 = "_button_14xbh_104";
2414
+ const buttonHead = "_buttonHead_14xbh_119";
2415
+ const buttonTarget = "_buttonTarget_14xbh_138";
2416
+ const legal$1 = "_legal_14xbh_154";
2293
2417
  const styles$6 = {
2294
2418
  root: root$6,
2419
+ content: content$1,
2420
+ close,
2421
+ overlay,
2422
+ body: body$1,
2423
+ desktop: desktop$4,
2295
2424
  laptop: laptop$2,
2296
2425
  tablet: tablet$1,
2297
- desktop: desktop$4,
2298
- body: body$1,
2299
2426
  head,
2300
2427
  title: title$1,
2301
2428
  logo: logo$2,
@@ -2401,11 +2528,18 @@
2401
2528
  })]
2402
2529
  });
2403
2530
  };
2404
- const SimplePopup = () => {
2405
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
2531
+ const ExpressPopup = k(({
2532
+ id
2533
+ }, ref) => {
2534
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
2406
2535
  const rootRef = _$1(null);
2536
+ const {
2537
+ isOpen,
2538
+ hide
2539
+ } = usePopup(ref);
2407
2540
  const device = useContainerDevice({
2408
- targetRef: rootRef
2541
+ targetRef: rootRef,
2542
+ id
2409
2543
  });
2410
2544
  const state = useCurrentState();
2411
2545
  const deviceState = useGetRules(state, device);
@@ -2413,6 +2547,7 @@
2413
2547
  set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
2414
2548
  const rules = useParseRules(deviceState);
2415
2549
  const onClick = useMetrics(deviceState);
2550
+ useExtractFonts(deviceState);
2416
2551
  const bodyRules = {
2417
2552
  ...rules.root,
2418
2553
  alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
@@ -2433,65 +2568,85 @@
2433
2568
  ...rules == null ? void 0 : rules.legal,
2434
2569
  justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
2435
2570
  };
2436
- return o("a", {
2571
+ return o("div", {
2572
+ className: styles$6.root,
2437
2573
  ref: rootRef,
2438
- href: (_h = rules.root) == null ? void 0 : _h.offer,
2439
- target: "_blank",
2440
- rel: "nofollow noopener noreferrer",
2441
- className: classNames(styles$6.root, {
2442
- [styles$6.desktop]: device === "desktop",
2443
- [styles$6.laptop]: device === "laptop",
2444
- [styles$6.tablet]: device === "tablet"
2445
- }),
2446
- onClick,
2447
- children: o("div", {
2448
- className: styles$6.body,
2449
- style: bodyRules,
2574
+ style: {
2575
+ display: isOpen ? "flex" : "none"
2576
+ },
2577
+ children: [o("div", {
2578
+ className: styles$6.overlay,
2579
+ style: rules.overlay,
2580
+ onClick: hide
2581
+ }), o("div", {
2582
+ className: classNames(styles$6.content, {
2583
+ [styles$6.desktop]: device === "desktop",
2584
+ [styles$6.laptop]: device === "laptop",
2585
+ [styles$6.tablet]: device === "tablet"
2586
+ }),
2450
2587
  children: [o("div", {
2451
- className: styles$6.head,
2452
- children: [o("div", {
2453
- className: styles$6.title,
2454
- style: rules.title,
2455
- children: (_i = rules.title) == null ? void 0 : _i.children
2456
- }), o("div", {
2457
- className: styles$6.logo,
2458
- style: rules.logo
2459
- })]
2460
- }), o("div", {
2461
- className: styles$6.wrapper,
2462
- style: contentRules,
2463
- children: (rules.children || []).map((child) => o(StateContext, {
2464
- value: {
2465
- ...child,
2466
- device
2467
- },
2468
- children: o(Match, {})
2469
- }))
2470
- }), o(DisplayText, {
2471
- className: styles$6.text,
2472
- style: textRules,
2473
- children: (_j = rules.text) == null ? void 0 : _j.children
2474
- }), o("div", {
2475
- className: styles$6.button,
2476
- style: rules.buttonWrapper,
2477
- children: [o("div", {
2478
- className: styles$6.buttonHead,
2479
- style: rules.buttonHead,
2480
- children: (_k = rules.buttonHead) == null ? void 0 : _k.children
2481
- }), o("div", {
2482
- className: styles$6.buttonTarget,
2483
- style: buttonRules,
2484
- children: (_l = rules.button) == null ? void 0 : _l.children
2485
- })]
2486
- }), o("div", {
2487
- className: styles$6.legal,
2488
- style: legalRules,
2489
- children: (_m = rules.legal) == null ? void 0 : _m.children
2588
+ className: styles$6.close,
2589
+ style: {
2590
+ color: (_h = rules.close) == null ? void 0 : _h.backgroundColor
2591
+ },
2592
+ onClick: hide,
2593
+ children: o(CloseIcon, {})
2594
+ }), o("a", {
2595
+ ref: rootRef,
2596
+ href: (_i = rules.root) == null ? void 0 : _i.offer,
2597
+ target: "_blank",
2598
+ rel: "nofollow noopener noreferrer",
2599
+ onClick,
2600
+ children: o("div", {
2601
+ className: styles$6.body,
2602
+ style: bodyRules,
2603
+ children: [o("div", {
2604
+ className: styles$6.head,
2605
+ children: [o("div", {
2606
+ className: styles$6.title,
2607
+ style: rules.title,
2608
+ children: (_j = rules.title) == null ? void 0 : _j.children
2609
+ }), o("div", {
2610
+ className: styles$6.logo,
2611
+ style: rules.logo
2612
+ })]
2613
+ }), o("div", {
2614
+ className: styles$6.wrapper,
2615
+ style: contentRules,
2616
+ children: (rules.children || []).map((child) => o(StateContext, {
2617
+ value: {
2618
+ ...child,
2619
+ device
2620
+ },
2621
+ children: o(Match, {})
2622
+ }))
2623
+ }), o(DisplayText, {
2624
+ className: styles$6.text,
2625
+ style: textRules,
2626
+ children: (_k = rules.text) == null ? void 0 : _k.children
2627
+ }), o("div", {
2628
+ className: styles$6.button,
2629
+ style: rules.buttonWrapper,
2630
+ children: [o("div", {
2631
+ className: styles$6.buttonHead,
2632
+ style: rules.buttonHead,
2633
+ children: (_l = rules.buttonHead) == null ? void 0 : _l.children
2634
+ }), o("div", {
2635
+ className: styles$6.buttonTarget,
2636
+ style: buttonRules,
2637
+ children: (_m = rules.button) == null ? void 0 : _m.children
2638
+ })]
2639
+ }), o("div", {
2640
+ className: styles$6.legal,
2641
+ style: legalRules,
2642
+ children: (_n = rules.legal) == null ? void 0 : _n.children
2643
+ })]
2644
+ })
2490
2645
  })]
2491
- })
2646
+ })]
2492
2647
  });
2493
- };
2494
- const index$2 = render(o(SimplePopup, {}));
2648
+ });
2649
+ const index$2 = render(o(ExpressPopup, {}));
2495
2650
  const root$4 = "_root_1slvw_1";
2496
2651
  const background$1 = "_background_1slvw_20";
2497
2652
  const body = "_body_1slvw_29";
@@ -2910,6 +3065,522 @@
2910
3065
  });
2911
3066
  return newState;
2912
3067
  };
3068
+ var resizeObservers = [];
3069
+ var hasActiveObservations = function() {
3070
+ return resizeObservers.some(function(ro) {
3071
+ return ro.activeTargets.length > 0;
3072
+ });
3073
+ };
3074
+ var hasSkippedObservations = function() {
3075
+ return resizeObservers.some(function(ro) {
3076
+ return ro.skippedTargets.length > 0;
3077
+ });
3078
+ };
3079
+ var msg = "ResizeObserver loop completed with undelivered notifications.";
3080
+ var deliverResizeLoopError = function() {
3081
+ var event;
3082
+ if (typeof ErrorEvent === "function") {
3083
+ event = new ErrorEvent("error", {
3084
+ message: msg
3085
+ });
3086
+ } else {
3087
+ event = document.createEvent("Event");
3088
+ event.initEvent("error", false, false);
3089
+ event.message = msg;
3090
+ }
3091
+ window.dispatchEvent(event);
3092
+ };
3093
+ var ResizeObserverBoxOptions;
3094
+ (function(ResizeObserverBoxOptions2) {
3095
+ ResizeObserverBoxOptions2["BORDER_BOX"] = "border-box";
3096
+ ResizeObserverBoxOptions2["CONTENT_BOX"] = "content-box";
3097
+ ResizeObserverBoxOptions2["DEVICE_PIXEL_CONTENT_BOX"] = "device-pixel-content-box";
3098
+ })(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));
3099
+ var freeze = function(obj) {
3100
+ return Object.freeze(obj);
3101
+ };
3102
+ var ResizeObserverSize = function() {
3103
+ function ResizeObserverSize2(inlineSize, blockSize) {
3104
+ this.inlineSize = inlineSize;
3105
+ this.blockSize = blockSize;
3106
+ freeze(this);
3107
+ }
3108
+ return ResizeObserverSize2;
3109
+ }();
3110
+ var DOMRectReadOnly = function() {
3111
+ function DOMRectReadOnly2(x, y2, width, height) {
3112
+ this.x = x;
3113
+ this.y = y2;
3114
+ this.width = width;
3115
+ this.height = height;
3116
+ this.top = this.y;
3117
+ this.left = this.x;
3118
+ this.bottom = this.top + this.height;
3119
+ this.right = this.left + this.width;
3120
+ return freeze(this);
3121
+ }
3122
+ DOMRectReadOnly2.prototype.toJSON = function() {
3123
+ var _a = this, x = _a.x, y2 = _a.y, top = _a.top, right2 = _a.right, bottom = _a.bottom, left2 = _a.left, width = _a.width, height = _a.height;
3124
+ return { x, y: y2, top, right: right2, bottom, left: left2, width, height };
3125
+ };
3126
+ DOMRectReadOnly2.fromRect = function(rectangle) {
3127
+ return new DOMRectReadOnly2(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
3128
+ };
3129
+ return DOMRectReadOnly2;
3130
+ }();
3131
+ var isSVG = function(target) {
3132
+ return target instanceof SVGElement && "getBBox" in target;
3133
+ };
3134
+ var isHidden = function(target) {
3135
+ if (isSVG(target)) {
3136
+ var _a = target.getBBox(), width = _a.width, height = _a.height;
3137
+ return !width && !height;
3138
+ }
3139
+ var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;
3140
+ return !(offsetWidth || offsetHeight || target.getClientRects().length);
3141
+ };
3142
+ var isElement = function(obj) {
3143
+ var _a;
3144
+ if (obj instanceof Element) {
3145
+ return true;
3146
+ }
3147
+ var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;
3148
+ return !!(scope && obj instanceof scope.Element);
3149
+ };
3150
+ var isReplacedElement = function(target) {
3151
+ switch (target.tagName) {
3152
+ case "INPUT":
3153
+ if (target.type !== "image") {
3154
+ break;
3155
+ }
3156
+ case "VIDEO":
3157
+ case "AUDIO":
3158
+ case "EMBED":
3159
+ case "OBJECT":
3160
+ case "CANVAS":
3161
+ case "IFRAME":
3162
+ case "IMG":
3163
+ return true;
3164
+ }
3165
+ return false;
3166
+ };
3167
+ var global$1 = typeof window !== "undefined" ? window : {};
3168
+ var cache = /* @__PURE__ */ new WeakMap();
3169
+ var scrollRegexp = /auto|scroll/;
3170
+ var verticalRegexp = /^tb|vertical/;
3171
+ var IE = /msie|trident/i.test(global$1.navigator && global$1.navigator.userAgent);
3172
+ var parseDimension = function(pixel) {
3173
+ return parseFloat(pixel || "0");
3174
+ };
3175
+ var size = function(inlineSize, blockSize, switchSizes) {
3176
+ if (inlineSize === void 0) {
3177
+ inlineSize = 0;
3178
+ }
3179
+ if (blockSize === void 0) {
3180
+ blockSize = 0;
3181
+ }
3182
+ if (switchSizes === void 0) {
3183
+ switchSizes = false;
3184
+ }
3185
+ return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);
3186
+ };
3187
+ var zeroBoxes = freeze({
3188
+ devicePixelContentBoxSize: size(),
3189
+ borderBoxSize: size(),
3190
+ contentBoxSize: size(),
3191
+ contentRect: new DOMRectReadOnly(0, 0, 0, 0)
3192
+ });
3193
+ var calculateBoxSizes = function(target, forceRecalculation) {
3194
+ if (forceRecalculation === void 0) {
3195
+ forceRecalculation = false;
3196
+ }
3197
+ if (cache.has(target) && !forceRecalculation) {
3198
+ return cache.get(target);
3199
+ }
3200
+ if (isHidden(target)) {
3201
+ cache.set(target, zeroBoxes);
3202
+ return zeroBoxes;
3203
+ }
3204
+ var cs = getComputedStyle(target);
3205
+ var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();
3206
+ var removePadding = !IE && cs.boxSizing === "border-box";
3207
+ var switchSizes = verticalRegexp.test(cs.writingMode || "");
3208
+ var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || "");
3209
+ var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || "");
3210
+ var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);
3211
+ var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);
3212
+ var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);
3213
+ var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);
3214
+ var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);
3215
+ var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);
3216
+ var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);
3217
+ var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);
3218
+ var horizontalPadding = paddingLeft + paddingRight;
3219
+ var verticalPadding = paddingTop + paddingBottom;
3220
+ var horizontalBorderArea = borderLeft + borderRight;
3221
+ var verticalBorderArea = borderTop + borderBottom;
3222
+ var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;
3223
+ var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;
3224
+ var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;
3225
+ var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;
3226
+ var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;
3227
+ var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;
3228
+ var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;
3229
+ var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;
3230
+ var boxes = freeze({
3231
+ devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),
3232
+ borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),
3233
+ contentBoxSize: size(contentWidth, contentHeight, switchSizes),
3234
+ contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)
3235
+ });
3236
+ cache.set(target, boxes);
3237
+ return boxes;
3238
+ };
3239
+ var calculateBoxSize = function(target, observedBox, forceRecalculation) {
3240
+ var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;
3241
+ switch (observedBox) {
3242
+ case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:
3243
+ return devicePixelContentBoxSize;
3244
+ case ResizeObserverBoxOptions.BORDER_BOX:
3245
+ return borderBoxSize;
3246
+ default:
3247
+ return contentBoxSize;
3248
+ }
3249
+ };
3250
+ var ResizeObserverEntry = function() {
3251
+ function ResizeObserverEntry2(target) {
3252
+ var boxes = calculateBoxSizes(target);
3253
+ this.target = target;
3254
+ this.contentRect = boxes.contentRect;
3255
+ this.borderBoxSize = freeze([boxes.borderBoxSize]);
3256
+ this.contentBoxSize = freeze([boxes.contentBoxSize]);
3257
+ this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);
3258
+ }
3259
+ return ResizeObserverEntry2;
3260
+ }();
3261
+ var calculateDepthForNode = function(node) {
3262
+ if (isHidden(node)) {
3263
+ return Infinity;
3264
+ }
3265
+ var depth = 0;
3266
+ var parent = node.parentNode;
3267
+ while (parent) {
3268
+ depth += 1;
3269
+ parent = parent.parentNode;
3270
+ }
3271
+ return depth;
3272
+ };
3273
+ var broadcastActiveObservations = function() {
3274
+ var shallowestDepth = Infinity;
3275
+ var callbacks2 = [];
3276
+ resizeObservers.forEach(function processObserver(ro) {
3277
+ if (ro.activeTargets.length === 0) {
3278
+ return;
3279
+ }
3280
+ var entries = [];
3281
+ ro.activeTargets.forEach(function processTarget(ot) {
3282
+ var entry = new ResizeObserverEntry(ot.target);
3283
+ var targetDepth = calculateDepthForNode(ot.target);
3284
+ entries.push(entry);
3285
+ ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);
3286
+ if (targetDepth < shallowestDepth) {
3287
+ shallowestDepth = targetDepth;
3288
+ }
3289
+ });
3290
+ callbacks2.push(function resizeObserverCallback() {
3291
+ ro.callback.call(ro.observer, entries, ro.observer);
3292
+ });
3293
+ ro.activeTargets.splice(0, ro.activeTargets.length);
3294
+ });
3295
+ for (var _i = 0, callbacks_1 = callbacks2; _i < callbacks_1.length; _i++) {
3296
+ var callback = callbacks_1[_i];
3297
+ callback();
3298
+ }
3299
+ return shallowestDepth;
3300
+ };
3301
+ var gatherActiveObservationsAtDepth = function(depth) {
3302
+ resizeObservers.forEach(function processObserver(ro) {
3303
+ ro.activeTargets.splice(0, ro.activeTargets.length);
3304
+ ro.skippedTargets.splice(0, ro.skippedTargets.length);
3305
+ ro.observationTargets.forEach(function processTarget(ot) {
3306
+ if (ot.isActive()) {
3307
+ if (calculateDepthForNode(ot.target) > depth) {
3308
+ ro.activeTargets.push(ot);
3309
+ } else {
3310
+ ro.skippedTargets.push(ot);
3311
+ }
3312
+ }
3313
+ });
3314
+ });
3315
+ };
3316
+ var process = function() {
3317
+ var depth = 0;
3318
+ gatherActiveObservationsAtDepth(depth);
3319
+ while (hasActiveObservations()) {
3320
+ depth = broadcastActiveObservations();
3321
+ gatherActiveObservationsAtDepth(depth);
3322
+ }
3323
+ if (hasSkippedObservations()) {
3324
+ deliverResizeLoopError();
3325
+ }
3326
+ return depth > 0;
3327
+ };
3328
+ var trigger;
3329
+ var callbacks = [];
3330
+ var notify = function() {
3331
+ return callbacks.splice(0).forEach(function(cb) {
3332
+ return cb();
3333
+ });
3334
+ };
3335
+ var queueMicroTask = function(callback) {
3336
+ if (!trigger) {
3337
+ var toggle_1 = 0;
3338
+ var el_1 = document.createTextNode("");
3339
+ var config = { characterData: true };
3340
+ new MutationObserver(function() {
3341
+ return notify();
3342
+ }).observe(el_1, config);
3343
+ trigger = function() {
3344
+ el_1.textContent = "".concat(toggle_1 ? toggle_1-- : toggle_1++);
3345
+ };
3346
+ }
3347
+ callbacks.push(callback);
3348
+ trigger();
3349
+ };
3350
+ var queueResizeObserver = function(cb) {
3351
+ queueMicroTask(function ResizeObserver2() {
3352
+ requestAnimationFrame(cb);
3353
+ });
3354
+ };
3355
+ var watching = 0;
3356
+ var isWatching = function() {
3357
+ return !!watching;
3358
+ };
3359
+ var CATCH_PERIOD = 250;
3360
+ var observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };
3361
+ var events = [
3362
+ "resize",
3363
+ "load",
3364
+ "transitionend",
3365
+ "animationend",
3366
+ "animationstart",
3367
+ "animationiteration",
3368
+ "keyup",
3369
+ "keydown",
3370
+ "mouseup",
3371
+ "mousedown",
3372
+ "mouseover",
3373
+ "mouseout",
3374
+ "blur",
3375
+ "focus"
3376
+ ];
3377
+ var time = function(timeout) {
3378
+ if (timeout === void 0) {
3379
+ timeout = 0;
3380
+ }
3381
+ return Date.now() + timeout;
3382
+ };
3383
+ var scheduled = false;
3384
+ var Scheduler = function() {
3385
+ function Scheduler2() {
3386
+ var _this = this;
3387
+ this.stopped = true;
3388
+ this.listener = function() {
3389
+ return _this.schedule();
3390
+ };
3391
+ }
3392
+ Scheduler2.prototype.run = function(timeout) {
3393
+ var _this = this;
3394
+ if (timeout === void 0) {
3395
+ timeout = CATCH_PERIOD;
3396
+ }
3397
+ if (scheduled) {
3398
+ return;
3399
+ }
3400
+ scheduled = true;
3401
+ var until = time(timeout);
3402
+ queueResizeObserver(function() {
3403
+ var elementsHaveResized = false;
3404
+ try {
3405
+ elementsHaveResized = process();
3406
+ } finally {
3407
+ scheduled = false;
3408
+ timeout = until - time();
3409
+ if (!isWatching()) {
3410
+ return;
3411
+ }
3412
+ if (elementsHaveResized) {
3413
+ _this.run(1e3);
3414
+ } else if (timeout > 0) {
3415
+ _this.run(timeout);
3416
+ } else {
3417
+ _this.start();
3418
+ }
3419
+ }
3420
+ });
3421
+ };
3422
+ Scheduler2.prototype.schedule = function() {
3423
+ this.stop();
3424
+ this.run();
3425
+ };
3426
+ Scheduler2.prototype.observe = function() {
3427
+ var _this = this;
3428
+ var cb = function() {
3429
+ return _this.observer && _this.observer.observe(document.body, observerConfig);
3430
+ };
3431
+ document.body ? cb() : global$1.addEventListener("DOMContentLoaded", cb);
3432
+ };
3433
+ Scheduler2.prototype.start = function() {
3434
+ var _this = this;
3435
+ if (this.stopped) {
3436
+ this.stopped = false;
3437
+ this.observer = new MutationObserver(this.listener);
3438
+ this.observe();
3439
+ events.forEach(function(name2) {
3440
+ return global$1.addEventListener(name2, _this.listener, true);
3441
+ });
3442
+ }
3443
+ };
3444
+ Scheduler2.prototype.stop = function() {
3445
+ var _this = this;
3446
+ if (!this.stopped) {
3447
+ this.observer && this.observer.disconnect();
3448
+ events.forEach(function(name2) {
3449
+ return global$1.removeEventListener(name2, _this.listener, true);
3450
+ });
3451
+ this.stopped = true;
3452
+ }
3453
+ };
3454
+ return Scheduler2;
3455
+ }();
3456
+ var scheduler = new Scheduler();
3457
+ var updateCount = function(n) {
3458
+ !watching && n > 0 && scheduler.start();
3459
+ watching += n;
3460
+ !watching && scheduler.stop();
3461
+ };
3462
+ var skipNotifyOnElement = function(target) {
3463
+ return !isSVG(target) && !isReplacedElement(target) && getComputedStyle(target).display === "inline";
3464
+ };
3465
+ var ResizeObservation = function() {
3466
+ function ResizeObservation2(target, observedBox) {
3467
+ this.target = target;
3468
+ this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;
3469
+ this.lastReportedSize = {
3470
+ inlineSize: 0,
3471
+ blockSize: 0
3472
+ };
3473
+ }
3474
+ ResizeObservation2.prototype.isActive = function() {
3475
+ var size2 = calculateBoxSize(this.target, this.observedBox, true);
3476
+ if (skipNotifyOnElement(this.target)) {
3477
+ this.lastReportedSize = size2;
3478
+ }
3479
+ if (this.lastReportedSize.inlineSize !== size2.inlineSize || this.lastReportedSize.blockSize !== size2.blockSize) {
3480
+ return true;
3481
+ }
3482
+ return false;
3483
+ };
3484
+ return ResizeObservation2;
3485
+ }();
3486
+ var ResizeObserverDetail = function() {
3487
+ function ResizeObserverDetail2(resizeObserver2, callback) {
3488
+ this.activeTargets = [];
3489
+ this.skippedTargets = [];
3490
+ this.observationTargets = [];
3491
+ this.observer = resizeObserver2;
3492
+ this.callback = callback;
3493
+ }
3494
+ return ResizeObserverDetail2;
3495
+ }();
3496
+ var observerMap = /* @__PURE__ */ new WeakMap();
3497
+ var getObservationIndex = function(observationTargets, target) {
3498
+ for (var i2 = 0; i2 < observationTargets.length; i2 += 1) {
3499
+ if (observationTargets[i2].target === target) {
3500
+ return i2;
3501
+ }
3502
+ }
3503
+ return -1;
3504
+ };
3505
+ var ResizeObserverController = function() {
3506
+ function ResizeObserverController2() {
3507
+ }
3508
+ ResizeObserverController2.connect = function(resizeObserver2, callback) {
3509
+ var detail = new ResizeObserverDetail(resizeObserver2, callback);
3510
+ observerMap.set(resizeObserver2, detail);
3511
+ };
3512
+ ResizeObserverController2.observe = function(resizeObserver2, target, options) {
3513
+ var detail = observerMap.get(resizeObserver2);
3514
+ var firstObservation = detail.observationTargets.length === 0;
3515
+ if (getObservationIndex(detail.observationTargets, target) < 0) {
3516
+ firstObservation && resizeObservers.push(detail);
3517
+ detail.observationTargets.push(new ResizeObservation(target, options && options.box));
3518
+ updateCount(1);
3519
+ scheduler.schedule();
3520
+ }
3521
+ };
3522
+ ResizeObserverController2.unobserve = function(resizeObserver2, target) {
3523
+ var detail = observerMap.get(resizeObserver2);
3524
+ var index2 = getObservationIndex(detail.observationTargets, target);
3525
+ var lastObservation = detail.observationTargets.length === 1;
3526
+ if (index2 >= 0) {
3527
+ lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);
3528
+ detail.observationTargets.splice(index2, 1);
3529
+ updateCount(-1);
3530
+ }
3531
+ };
3532
+ ResizeObserverController2.disconnect = function(resizeObserver2) {
3533
+ var _this = this;
3534
+ var detail = observerMap.get(resizeObserver2);
3535
+ detail.observationTargets.slice().forEach(function(ot) {
3536
+ return _this.unobserve(resizeObserver2, ot.target);
3537
+ });
3538
+ detail.activeTargets.splice(0, detail.activeTargets.length);
3539
+ };
3540
+ return ResizeObserverController2;
3541
+ }();
3542
+ var ResizeObserver$1 = function() {
3543
+ function ResizeObserver2(callback) {
3544
+ if (arguments.length === 0) {
3545
+ throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");
3546
+ }
3547
+ if (typeof callback !== "function") {
3548
+ throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");
3549
+ }
3550
+ ResizeObserverController.connect(this, callback);
3551
+ }
3552
+ ResizeObserver2.prototype.observe = function(target, options) {
3553
+ if (arguments.length === 0) {
3554
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");
3555
+ }
3556
+ if (!isElement(target)) {
3557
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");
3558
+ }
3559
+ ResizeObserverController.observe(this, target, options);
3560
+ };
3561
+ ResizeObserver2.prototype.unobserve = function(target) {
3562
+ if (arguments.length === 0) {
3563
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");
3564
+ }
3565
+ if (!isElement(target)) {
3566
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");
3567
+ }
3568
+ ResizeObserverController.unobserve(this, target);
3569
+ };
3570
+ ResizeObserver2.prototype.disconnect = function() {
3571
+ ResizeObserverController.disconnect(this);
3572
+ };
3573
+ ResizeObserver2.toString = function() {
3574
+ return "function ResizeObserver () { [polyfill code] }";
3575
+ };
3576
+ return ResizeObserver2;
3577
+ }();
3578
+ const resizeObserver = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3579
+ __proto__: null,
3580
+ ResizeObserver: ResizeObserver$1,
3581
+ ResizeObserverEntry,
3582
+ ResizeObserverSize
3583
+ }, Symbol.toStringTag, { value: "Module" }));
2913
3584
  exports2.BonusCard = index$1;
2914
3585
  exports2.ComplexGift = index$5;
2915
3586
  exports2.ComplexPopup = index$3;
@@ -2921,4 +3592,4 @@
2921
3592
  exports2.modifyState = modifyState;
2922
3593
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
2923
3594
  });
2924
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMudHMiLCIuLi9zcmMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTWV0cmljcy50cyIsIi4uL3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvY29tcG9uZW50cy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2NvbXBvbmVudHMvbGluZS9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvY29tcG9uZW50cy9NYXRjaC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9UZXh0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzT25lVHdvL2luZGV4LnRzeCIsIi4uL3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QudHMiLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9oZWxwZXJzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIG5hdGl2ZUNvZGVTdHJpbmcgPSAnW25hdGl2ZSBjb2RlXSc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0aWYgKGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZy50b1N0cmluZygpKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9W10sZT1uLl9fYixhPW4uX19yLHY9bi5kaWZmZWQsbD1uLl9fYyxtPW4udW5tb3VudDtmdW5jdGlvbiBkKHQsdSl7bi5fX2gmJm4uX19oKHIsdCxvfHx1KSxvPTA7dmFyIGk9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIHQ+PWkuX18ubGVuZ3RoJiZpLl9fLnB1c2goe19fVjpjfSksaS5fX1t0XX1mdW5jdGlvbiBoKG4pe3JldHVybiBvPTEscyhCLG4pfWZ1bmN0aW9uIHMobix1LGkpe3ZhciBvPWQodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpCKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci51KSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5fX2N9KTtpZih1LmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiFuLl9fTn0pKXJldHVybiFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9ITE7cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLCEoIWkmJm8uX19jLnByb3BzPT09bikmJighY3x8Yy5jYWxsKHRoaXMsbix0LHIpKX07ci51PSEwO3ZhciBjPXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlLGU9ci5jb21wb25lbnRXaWxsVXBkYXRlO3IuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihuLHQscil7aWYodGhpcy5fX2Upe3ZhciB1PWM7Yz12b2lkIDAsZihuLHQsciksYz11fWUmJmUuY2FsbCh0aGlzLG4sdCxyKX0sci5zaG91bGRDb21wb25lbnRVcGRhdGU9Zn1yZXR1cm4gby5fX058fG8uX199ZnVuY3Rpb24gcCh1LGkpe3ZhciBvPWQodCsrLDMpOyFuLl9fcyYmeihvLl9fSCxpKSYmKG8uX189dSxvLmk9aSxyLl9fSC5fX2gucHVzaChvKSl9ZnVuY3Rpb24geSh1LGkpe3ZhciBvPWQodCsrLDQpOyFuLl9fcyYmeihvLl9fSCxpKSYmKG8uX189dSxvLmk9aSxyLl9faC5wdXNoKG8pKX1mdW5jdGlvbiBfKG4pe3JldHVybiBvPTUsRihmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om59fSxbXSl9ZnVuY3Rpb24gQShuLHQscil7bz02LHkoZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhuKHQoKSksZnVuY3Rpb24oKXtyZXR1cm4gbihudWxsKX0pOm4/KG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9KTp2b2lkIDB9LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gRihuLHIpe3ZhciB1PWQodCsrLDcpO3JldHVybiB6KHUuX19ILHIpPyh1Ll9fVj1uKCksdS5pPXIsdS5fX2g9bix1Ll9fVik6dS5fX31mdW5jdGlvbiBUKG4sdCl7cmV0dXJuIG89OCxGKGZ1bmN0aW9uKCl7cmV0dXJuIG59LHQpfWZ1bmN0aW9uIHEobil7dmFyIHU9ci5jb250ZXh0W24uX19jXSxpPWQodCsrLDkpO3JldHVybiBpLmM9bix1PyhudWxsPT1pLl9fJiYoaS5fXz0hMCx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiB4KHQscil7bi51c2VEZWJ1Z1ZhbHVlJiZuLnVzZURlYnVnVmFsdWUocj9yKHQpOnQpfWZ1bmN0aW9uIFAobil7dmFyIHU9ZCh0KyssMTApLGk9aCgpO3JldHVybiB1Ll9fPW4sci5jb21wb25lbnREaWRDYXRjaHx8KHIuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obix0KXt1Ll9fJiZ1Ll9fKG4sdCksaVsxXShuKX0pLFtpWzBdLGZ1bmN0aW9uKCl7aVsxXSh2b2lkIDApfV19ZnVuY3Rpb24gVigpe3ZhciBuPWQodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rK31yZXR1cm4gbi5fX31mdW5jdGlvbiBiKCl7Zm9yKHZhciB0O3Q9Zi5zaGlmdCgpOylpZih0Ll9fUCYmdC5fX0gpdHJ5e3QuX19ILl9faC5mb3JFYWNoKGspLHQuX19ILl9faC5mb3JFYWNoKHcpLHQuX19ILl9faD1bXX1jYXRjaChyKXt0Ll9fSC5fX2g9W10sbi5fX2Uocix0Ll9fdil9fW4uX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxlJiZlKG4pfSxuLl9fcj1mdW5jdGlvbihuKXthJiZhKG4pLHQ9MDt2YXIgaT0ocj1uLl9fYykuX19IO2kmJih1PT09cj8oaS5fX2g9W10sci5fX2g9W10saS5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX19OJiYobi5fXz1uLl9fTiksbi5fX1Y9YyxuLl9fTj1uLmk9dm9pZCAwfSkpOihpLl9faC5mb3JFYWNoKGspLGkuX19oLmZvckVhY2godyksaS5fX2g9W10pKSx1PXJ9LG4uZGlmZmVkPWZ1bmN0aW9uKHQpe3YmJnYodCk7dmFyIG89dC5fX2M7byYmby5fX0gmJihvLl9fSC5fX2gubGVuZ3RoJiYoMSE9PWYucHVzaChvKSYmaT09PW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxqKShiKSksby5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLmkmJihuLl9fSD1uLmkpLG4uX19WIT09YyYmKG4uX189bi5fX1YpLG4uaT12b2lkIDAsbi5fX1Y9Y30pKSx1PXI9bnVsbH0sbi5fX2M9ZnVuY3Rpb24odCxyKXtyLnNvbWUoZnVuY3Rpb24odCl7dHJ5e3QuX19oLmZvckVhY2goayksdC5fX2g9dC5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHx3KG4pfSl9Y2F0Y2godSl7ci5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSkscj1bXSxuLl9fZSh1LHQuX192KX19KSxsJiZsKHQscil9LG4udW5tb3VudD1mdW5jdGlvbih0KXttJiZtKHQpO3ZhciByLHU9dC5fX2M7dSYmdS5fX0gmJih1Ll9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RyeXtrKG4pfWNhdGNoKG4pe3I9bn19KSx1Ll9fSD12b2lkIDAsciYmbi5fX2Uocix1Ll9fdikpfTt2YXIgZz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gaihuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGcmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDEwMCk7ZyYmKHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpKX1mdW5jdGlvbiBrKG4pe3ZhciB0PXIsdT1uLl9fYztcImZ1bmN0aW9uXCI9PXR5cGVvZiB1JiYobi5fX2M9dm9pZCAwLHUoKSkscj10fWZ1bmN0aW9uIHcobil7dmFyIHQ9cjtuLl9fYz1uLl9fKCkscj10fWZ1bmN0aW9uIHoobix0KXtyZXR1cm4hbnx8bi5sZW5ndGghPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQhPT1uW3JdfSl9ZnVuY3Rpb24gQihuLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChuKTp0fWV4cG9ydHtUIGFzIHVzZUNhbGxiYWNrLHEgYXMgdXNlQ29udGV4dCx4IGFzIHVzZURlYnVnVmFsdWUscCBhcyB1c2VFZmZlY3QsUCBhcyB1c2VFcnJvckJvdW5kYXJ5LFYgYXMgdXNlSWQsQSBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLHkgYXMgdXNlTGF5b3V0RWZmZWN0LEYgYXMgdXNlTWVtbyxzIGFzIHVzZVJlZHVjZXIsXyBhcyB1c2VSZWYsaCBhcyB1c2VTdGF0ZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBhLHVzZUlkIGFzIHMsdXNlUmVkdWNlciBhcyBoLHVzZUVmZmVjdCBhcyB2LHVzZUxheW91dEVmZmVjdCBhcyBkLHVzZVJlZiBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgbSx1c2VNZW1vIGFzIHksdXNlQ2FsbGJhY2sgYXMgXyx1c2VDb250ZXh0IGFzIGIsdXNlRGVidWdWYWx1ZSBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEMobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRShuLHQpe3JldHVybiBuPT09dCYmKDAhPT1ufHwxL249PTEvdCl8fG4hPW4mJnQhPXR9ZnVuY3Rpb24gdyhuKXt0aGlzLnByb3BzPW59ZnVuY3Rpb24geChuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWYscj10PT1uLnJlZjtyZXR1cm4hciYmdCYmKHQuY2FsbD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fCFyOkModGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1Ll9fZj0hMCx1fSh3LnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEModGhpcy5wcm9wcyxuKXx8Qyh0aGlzLnN0YXRlLHQpfTt2YXIgUj1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksUiYmUihuKX07dmFyIE49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIGsobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1OLHQucmVuZGVyPXQsdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBBPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTz17bWFwOkEsZm9yRWFjaDpBLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxUPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fayksdS5fX2Mobix0KTtUKG4sdCxlLHIpfTt2YXIgST1lLnVubW91bnQ7ZnVuY3Rpb24gTChuLHQsZSl7cmV0dXJuIG4mJihuLl9fYyYmbi5fX2MuX19IJiYobi5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX2MmJm4uX19jKCl9KSxuLl9fYy5fX0g9bnVsbCksbnVsbCE9KG49Zyh7fSxuKSkuX19jJiYobi5fX2MuX19QPT09ZSYmKG4uX19jLl9fUD10KSxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBMKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFUobix0LGUpe3JldHVybiBuJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuaW5zZXJ0QmVmb3JlKG4uX19lLG4uX19kKSxuLl9fYy5fX2U9ITAsbi5fX2MuX19QPWUpKSxufWZ1bmN0aW9uIEQoKXt0aGlzLl9fdT0wLHRoaXMudD1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gRihuKXt2YXIgdD1uLl9fLl9fYztyZXR1cm4gdCYmdC5fX2EmJnQuX19hKG4pfWZ1bmN0aW9uIE0obil7dmFyIGUscix1O2Z1bmN0aW9uIG8obyl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe3I9bi5kZWZhdWx0fHxufSxmdW5jdGlvbihuKXt1PW59KSx1KXRocm93IHU7aWYoIXIpdGhyb3cgZTtyZXR1cm4gdChyLG8pfXJldHVybiBvLmRpc3BsYXlOYW1lPVwiTGF6eVwiLG8uX19mPSEwLG99ZnVuY3Rpb24gVigpe3RoaXMudT1udWxsLHRoaXMubz1udWxsfWUudW5tb3VudD1mdW5jdGlvbihuKXt2YXIgdD1uLl9fYzt0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYhMD09PW4uX19oJiYobi50eXBlPW51bGwpLEkmJkkobil9LChELnByb3RvdHlwZT1uZXcgbikuX19jPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dC5fX2Mscj10aGlzO251bGw9PXIudCYmKHIudD1bXSksci50LnB1c2goZSk7dmFyIHU9RihyLl9fdiksbz0hMSxpPWZ1bmN0aW9uKCl7b3x8KG89ITAsZS5fX1I9bnVsbCx1P3UobCk6bCgpKX07ZS5fX1I9aTt2YXIgbD1mdW5jdGlvbigpe2lmKCEtLXIuX191KXtpZihyLnN0YXRlLl9fYSl7dmFyIG49ci5zdGF0ZS5fX2E7ci5fX3YuX19rWzBdPVUobixuLl9fYy5fX1Asbi5fX2MuX19PKX12YXIgdDtmb3Ioci5zZXRTdGF0ZSh7X19hOnIuX19iPW51bGx9KTt0PXIudC5wb3AoKTspdC5mb3JjZVVwZGF0ZSgpfX0sYz0hMD09PXQuX19oO3IuX191Kyt8fGN8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sRC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnQ9W119LEQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1MKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX2g9bnVsbCksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBXPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLm8uZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLm8uc2l6ZSkpZm9yKGU9bi51O2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi51PWU9ZVsyXX19O2Z1bmN0aW9uIFAobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBqKG4pe3ZhciBlPXRoaXMscj1uLmk7ZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLmwpLGUubD1udWxsLGUuaT1udWxsfSxlLmkmJmUuaSE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSxuLl9fdj8oZS5sfHwoZS5pPXIsZS5sPXtub2RlVHlwZToxLHBhcmVudE5vZGU6cixjaGlsZE5vZGVzOltdLGFwcGVuZENoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKG4pPj4+MSwxKSxlLmkucmVtb3ZlQ2hpbGQobil9fSksbyh0KFAse2NvbnRleHQ6ZS5jb250ZXh0fSxuLl9fdiksZS5sKSk6ZS5sJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9ZnVuY3Rpb24geihuLGUpe3ZhciByPXQoaix7X192Om4saTplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KFYucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPUYodC5fX3YpLHI9dC5vLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLFcodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxWLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy51PW51bGwsdGhpcy5vPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMuby5zZXQodFtlXSx0aGlzLnU9WzEsMCx0aGlzLnVdKTtyZXR1cm4gbi5jaGlsZHJlbn0sVi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPVYucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLm8uZm9yRWFjaChmdW5jdGlvbih0LGUpe1cobixlLHQpfSl9O3ZhciBCPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxIPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2V8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxZPS9bQS1aMC05XS9nLCQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50LHE9ZnVuY3Rpb24obil7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKT8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChuKX07ZnVuY3Rpb24gRyhuLHQsZSl7cmV0dXJuIG51bGw9PXQuX19rJiYodC50ZXh0Q29udGVudD1cIlwiKSxvKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1mdW5jdGlvbiBKKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBLPWUuZXZlbnQ7ZnVuY3Rpb24gUSgpe31mdW5jdGlvbiBYKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfWZ1bmN0aW9uIG5uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH1lLmV2ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBLJiYobj1LKG4pKSxuLnBlcnNpc3Q9USxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPVgsbi5pc0RlZmF1bHRQcmV2ZW50ZWQ9bm4sbi5uYXRpdmVFdmVudD1ufTt2YXIgdG4sZW49e2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0scm49ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJmZ1bmN0aW9uKG4pe3ZhciB0PW4ucHJvcHMsZT1uLnR5cGUsdT17fTtmb3IodmFyIG8gaW4gdCl7dmFyIGk9dFtvXTtpZighKFwidmFsdWVcIj09PW8mJlwiZGVmYXVsdFZhbHVlXCJpbiB0JiZudWxsPT1pfHwkJiZcImNoaWxkcmVuXCI9PT1vJiZcIm5vc2NyaXB0XCI9PT1lfHxcImNsYXNzXCI9PT1vfHxcImNsYXNzTmFtZVwiPT09bykpe3ZhciBsPW8udG9Mb3dlckNhc2UoKTtcImRlZmF1bHRWYWx1ZVwiPT09byYmXCJ2YWx1ZVwiaW4gdCYmbnVsbD09dC52YWx1ZT9vPVwidmFsdWVcIjpcImRvd25sb2FkXCI9PT1vJiYhMD09PWk/aT1cIlwiOlwib25kb3VibGVjbGlja1wiPT09bD9vPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWx8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fHEodC50eXBlKT9cIm9uZm9jdXNcIj09PWw/bz1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1sP289XCJvbmZvY3Vzb3V0XCI6Wi50ZXN0KG8pP289bDotMT09PWUuaW5kZXhPZihcIi1cIikmJkgudGVzdChvKT9vPW8ucmVwbGFjZShZLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWkmJihpPXZvaWQgMCk6bD1vPVwib25pbnB1dFwiLFwib25pbnB1dFwiPT09bCYmdVtvPWxdJiYobz1cIm9uaW5wdXRDYXB0dXJlXCIpLHVbb109aX19XCJzZWxlY3RcIj09ZSYmdS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh1LnZhbHVlKSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9LTEhPXUudmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKX0pKSxcInNlbGVjdFwiPT1lJiZudWxsIT11LmRlZmF1bHRWYWx1ZSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9dS5tdWx0aXBsZT8tMSE9dS5kZWZhdWx0VmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKTp1LmRlZmF1bHRWYWx1ZT09bi5wcm9wcy52YWx1ZX0pKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLGVuKSk6KHQuY2xhc3NOYW1lJiYhdC5jbGFzc3x8dC5jbGFzcyYmdC5jbGFzc05hbWUpJiYodS5jbGFzcz11LmNsYXNzTmFtZT10LmNsYXNzTmFtZSksbi5wcm9wcz11fShuKSxuLiQkdHlwZW9mPUIscm4mJnJuKG4pfTt2YXIgdW49ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24obil7dW4mJnVuKG4pLHRuPW4uX19jfTt2YXIgb249ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24obil7b24mJm9uKG4pO3ZhciB0PW4ucHJvcHMsZT1uLl9fZTtudWxsIT1lJiZcInRleHRhcmVhXCI9PT1uLnR5cGUmJlwidmFsdWVcImluIHQmJnQudmFsdWUhPT1lLnZhbHVlJiYoZS52YWx1ZT1udWxsPT10LnZhbHVlP1wiXCI6dC52YWx1ZSksdG49bnVsbH07dmFyIGxuPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdG4uX19uW24uX19jXS5wcm9wcy52YWx1ZX19fX0sY249XCIxNy4wLjJcIjtmdW5jdGlvbiBmbihuKXtyZXR1cm4gdC5iaW5kKG51bGwsbil9ZnVuY3Rpb24gYW4obil7cmV0dXJuISFuJiZuLiQkdHlwZW9mPT09Qn1mdW5jdGlvbiBzbihuKXtyZXR1cm4gYW4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB2bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBkbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxwbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxtbj11O2Z1bmN0aW9uIHluKG4pe24oKX1mdW5jdGlvbiBfbihuKXtyZXR1cm4gbn1mdW5jdGlvbiBibigpe3JldHVyblshMSx5bl19dmFyIFNuPWQ7ZnVuY3Rpb24gZ24obix0KXt2YXIgZT10KCkscj1hKHtoOntfXzplLHY6dH19KSx1PXJbMF0uaCxvPXJbMV07cmV0dXJuIGQoZnVuY3Rpb24oKXt1Ll9fPWUsdS52PXQsRSh1Ll9fLHQoKSl8fG8oe2g6dX0pfSxbbixlLHRdKSx2KGZ1bmN0aW9uKCl7cmV0dXJuIEUodS5fXyx1LnYoKSl8fG8oe2g6dX0pLG4oZnVuY3Rpb24oKXtFKHUuX18sdS52KCkpfHxvKHtoOnV9KX0pfSxbbl0pLGV9dmFyIENuPXt1c2VTdGF0ZTphLHVzZUlkOnMsdXNlUmVkdWNlcjpoLHVzZUVmZmVjdDp2LHVzZUxheW91dEVmZmVjdDpkLHVzZUluc2VydGlvbkVmZmVjdDpTbix1c2VUcmFuc2l0aW9uOmJuLHVzZURlZmVycmVkVmFsdWU6X24sdXNlU3luY0V4dGVybmFsU3RvcmU6Z24sc3RhcnRUcmFuc2l0aW9uOnluLHVzZVJlZjpwLHVzZUltcGVyYXRpdmVIYW5kbGU6bSx1c2VNZW1vOnksdXNlQ2FsbGJhY2s6Xyx1c2VDb250ZXh0OmIsdXNlRGVidWdWYWx1ZTpTLHZlcnNpb246XCIxNy4wLjJcIixDaGlsZHJlbjpPLHJlbmRlcjpHLGh5ZHJhdGU6Six1bm1vdW50Q29tcG9uZW50QXROb2RlOmhuLGNyZWF0ZVBvcnRhbDp6LGNyZWF0ZUVsZW1lbnQ6dCxjcmVhdGVDb250ZXh0OmwsY3JlYXRlRmFjdG9yeTpmbixjbG9uZUVsZW1lbnQ6c24sY3JlYXRlUmVmOmMsRnJhZ21lbnQ6dSxpc1ZhbGlkRWxlbWVudDphbixmaW5kRE9NTm9kZTp2bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50OncsbWVtbzp4LGZvcndhcmRSZWY6ayxmbHVzaFN5bmM6cG4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6ZG4sU3RyaWN0TW9kZTptbixTdXNwZW5zZTpELFN1c3BlbnNlTGlzdDpWLGxhenk6TSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpsbn07ZXhwb3J0e08gYXMgQ2hpbGRyZW4sdyBhcyBQdXJlQ29tcG9uZW50LG1uIGFzIFN0cmljdE1vZGUsRCBhcyBTdXNwZW5zZSxWIGFzIFN1c3BlbnNlTGlzdCxsbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxzbiBhcyBjbG9uZUVsZW1lbnQsZm4gYXMgY3JlYXRlRmFjdG9yeSx6IGFzIGNyZWF0ZVBvcnRhbCxDbiBhcyBkZWZhdWx0LHZuIGFzIGZpbmRET01Ob2RlLHBuIGFzIGZsdXNoU3luYyxrIGFzIGZvcndhcmRSZWYsSiBhcyBoeWRyYXRlLGFuIGFzIGlzVmFsaWRFbGVtZW50LE0gYXMgbGF6eSx4IGFzIG1lbW8sRyBhcyByZW5kZXIseW4gYXMgc3RhcnRUcmFuc2l0aW9uLGhuIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsZG4gYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsX24gYXMgdXNlRGVmZXJyZWRWYWx1ZSxTbiBhcyB1c2VJbnNlcnRpb25FZmZlY3QsZ24gYXMgdXNlU3luY0V4dGVybmFsU3RvcmUsYm4gYXMgdXNlVHJhbnNpdGlvbixjbiBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiXG5pbnRlcmZhY2UgSW5qZWN0TGlua09wdGlvbnMge1xuICByZWw6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdExpbmsgPShvcHRpb25zOiBJbmplY3RMaW5rT3B0aW9ucykgPT4ge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gbGluay5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG5cbiAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cbiIsImltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGlzVmFsdWUgfSBmcm9tIFwiLi9pbmRleFwiO1xuXG50eXBlIFZpc2l0b3IgPSBDYWxsYmFjazxbUHJvcGVydHlLZXksIHVua25vd24sIHN0cmluZ10+XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvciA9IChpbnB1dDogdW5rbm93biwgdmlzaXRvcjogVmlzaXRvciwgcGF0aD86IHN0cmluZyk6IGFueSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoZWwsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGluZGV4XS5maWx0ZXIoaXNWYWx1ZSkuam9pbignLicpXG4gICAgICByZXR1cm4gaXRlcmF0b3IodmlzaXRvcihpbmRleCwgZWwsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuICAgIH0pXG4gIH1cblxuICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dCkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgbmV3UGF0aCA9IFtwYXRoLCBrZXldLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIGFjY1trZXldID0gaXRlcmF0b3IodmlzaXRvcihrZXksIHZhbHVlLCBuZXdQYXRoKSwgdmlzaXRvciwgbmV3UGF0aClcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9IGFzIGFueSlcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBsb2Rhc2hNZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnXG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5VmFsdWUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+XG4gICF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiA9PiAhaXNFbXB0eVZhbHVlKHZhbHVlKVxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGlzUHJpbWl0aXZlID0gKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiA9PlxuICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHx8IHZhbHVlID09PSBudWxsXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb25zdGFudHMgPSA8SyBleHRlbmRzIHN0cmluZz4oLi4uY29uc3RhbnRzOiBLW10pID0+IHtcbiAgcmV0dXJuIGNvbnN0YW50cy5yZWR1Y2U8eyBbUCBpbiBLXTogUCB9PigoYWNjLCBjb25zdGFudCkgPT4ge1xuICAgIGFjY1tjb25zdGFudF0gPSBjb25zdGFudFxuICAgIHJldHVybiBhY2NcbiAgfSwge30gYXMgeyBbUCBpbiBLXTogUCB9KVxufVxuXG5leHBvcnQgY29uc3QgcGljayA9IDxUVmFsdWUgZXh0ZW5kcyBBbnlPYmplY3Q+KG9iajogVFZhbHVlLCAuLi5wcm9wczogKGtleW9mIFRWYWx1ZSlbXSkgPT4ge1xuICByZXR1cm4gcHJvcHMucmVkdWNlKChyZXN1bHQsIHByb3ApID0+IHtcbiAgICByZXN1bHRbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sIHt9IGFzIGFueSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9taXQ8VCBleHRlbmRzIEFueU9iamVjdCwgUCBleHRlbmRzIHN0cmluZ1tdPihvYmo6IFQsIC4uLnByb3BzOiBQKTogT21pdDxULCBQW251bWJlcl0+IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuICBwcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgIGRlbGV0ZSByZXN1bHRbcHJvcF1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3QgZ2V0ID0gKG9iajogQW55T2JqZWN0LCBwYXRoOiBzdHJpbmcsIGRlZlZhbHVlPzogdW5rbm93bik6IGFueSA9PiB7XG4gIGlmICghcGF0aCkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cbiAgY29uc3QgcmVzdWx0ID0gcGF0aEFycmF5LnJlZHVjZSgocHJldk9iajogQW55T2JqZWN0LCBrZXk6IHN0cmluZykgPT4gcHJldk9iaiAmJiBwcmV2T2JqW2tleV0sIG9iailcbiAgLy8gSWYgZm91bmQgdmFsdWUgaXMgdW5kZWZpbmVkIHJldHVybiBkZWZhdWx0IHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIHRoZSB2YWx1ZVxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZWYWx1ZSA6IHJlc3VsdFxufVxuXG5leHBvcnQgY29uc3Qgc2V0ID0gKG9iajogQW55T2JqZWN0LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuXG4gIHJldHVybiBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgIGlmIChhY2Nba2V5XSA9PT0gdW5kZWZpbmVkKSBhY2Nba2V5XSA9IHt9XG4gICAgaWYgKGkgPT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSBhY2Nba2V5XSA9IHZhbHVlXG4gICAgcmV0dXJuIGFjY1trZXldXG4gIH0sIG9iailcbn1cblxuZXhwb3J0IGNvbnN0IGhleFRvUmdiID0gKGhleDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGNoYXJzID0gaGV4LnNsaWNlKDEpXG5cbiAgaWYgKGNoYXJzLmxlbmd0aCA9PT0gMykge1xuICAgIGhleCA9IGNoYXJzXG4gICAgICAuc3BsaXQoJycpXG4gICAgICAubWFwKHZhbCA9PiBgJHt2YWx9JHt2YWx9YClcbiAgICAgIC5qb2luKCcnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaS5leGVjKGhleClcblxuICByZXR1cm4gcmVzdWx0XG4gICAgPyB7XG4gICAgICAgIHI6IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpLFxuICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcbiAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNilcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgaXNKc29uU2FtZSA9ICguLi52YWx1ZXM6IHVua25vd25bXSkgPT4ge1xuICByZXR1cm4gdmFsdWVzLm1hcCh2YWx1ZSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLmV2ZXJ5KCh2YWwsIF8sIGFycikgPT4gdmFsID09PSBhcnJbMF0pXG59XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkVGVtcGxhdGUgPSAoZGF0YTogQW55T2JqZWN0KSA9PiAnaWQnIGluIGRhdGEgJiYgJ3Jvb3QnIGluIGRhdGFcblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGRlbGF5PzogbnVtYmVyXG4gIG9uT3Blbj86IENhbGxiYWNrXG4gIG9uQXV0b09wZW4/OiBDYWxsYmFja1xufVxuXG5leHBvcnQgY29uc3QgdXNlR2lmdE9wZW4gPSAoeyBkZWxheSwgb25PcGVuLCBvbkF1dG9PcGVuIH06IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICAgIG9uQXV0b09wZW4gJiYgb25BdXRvT3BlbigpXG4gICAgfSwgZGVsYXkgfHwgMTAwMClcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgfSwgW2RlbGF5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIG9uT3BlbiAmJiBvbk9wZW4oKVxuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgcmV0dXJuIHtcbiAgICBpc09wZW4sXG4gICAgb25Ub2dnbGVcbiAgfVxufVxuIiwiaW1wb3J0e29wdGlvbnMgYXMgcn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIF89MDtmdW5jdGlvbiBvKG8sZSxuLHQsZixsKXt2YXIgcyx1LGE9e307Zm9yKHUgaW4gZSlcInJlZlwiPT11P3M9ZVt1XTphW3VdPWVbdV07dmFyIGk9e3R5cGU6byxwcm9wczphLGtleTpuLHJlZjpzLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19kOnZvaWQgMCxfX2M6bnVsbCxfX2g6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tXyxfX3NvdXJjZTpmLF9fc2VsZjpsfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiYocz1vLmRlZmF1bHRQcm9wcykpZm9yKHUgaW4gcyl2b2lkIDA9PT1hW3VdJiYoYVt1XT1zW3VdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShpKSxpfWV4cG9ydHtvIGFzIGpzeCxvIGFzIGpzeERFVixvIGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncHJlYWN0J1xuXG5leHBvcnQgY29uc3QgU3RhdGUgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gKHsgY2hpbGRyZW4sIHZhbHVlIH0pID0+IHtcbiAgcmV0dXJuIDxTdGF0ZS5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L1N0YXRlLlByb3ZpZGVyPlxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRleHRcbiIsImltcG9ydCB7IENvbXBvbmVudENoaWxkLCBDb250YWluZXJOb2RlLCByZW5kZXIgYXMgcHJlYWN0UmVuZGVyIH0gZnJvbSAncHJlYWN0J1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9TdGF0ZUNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCByZW5kZXIgPSAodk5vZGU6IENvbXBvbmVudENoaWxkKSA9PiAodGFyZ2V0OiBDb250YWluZXJOb2RlLCBzdGF0ZT86IGFueSkgPT5cbiAgcHJlYWN0UmVuZGVyKDxTdGF0ZUNvbnRleHQgdmFsdWU9e3N0YXRlfT57dk5vZGV9PC9TdGF0ZUNvbnRleHQ+LCB0YXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSBcIi4uL1N0YXRlQ29udGV4dFwiO1xuXG5leHBvcnQgY29uc3QgdXNlQ3VycmVudFN0YXRlID0gPFRWYWx1ZSA9IHVua25vd24+KCkgPT4gdXNlQ29udGV4dDxUVmFsdWU+KFN0YXRlKVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBEZXZpY2UsIGRldmljZXMsIEV4dHJhY3RSdWxlcywgaXNWYWx1ZSwgaXRlcmF0b3IsIExheWVyLCBtZXJnZSwgb21pdCwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4udmFsdWVbcmVzdWx0UnVsZXMucGFyZW50XSwgLi4ub21pdChyZXN1bHRSdWxlcywgJ3BhcmVudCcpIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cbmV4cG9ydCBjb25zdCBib3JkZXJPcHRpb25zID0gWydib3JkZXJXaWR0aCcsICdib3JkZXJDb2xvcicsICdib3JkZXJTdHlsZSddXG5cbmV4cG9ydCBjb25zdCBzcGFjaW5nT3B0aW9ucyA9IFtcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5cbmV4cG9ydCBjb25zdCBub29wWWFNZXRyaWthID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgWWFNZWt0aWthIHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuZXhwb3J0IGNvbnN0IG5vb3BBZEZveCA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIEFkRm94IHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgaXNKc29uU2FtZSwgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgbm9vcEFkRm94LCBub29wWWFNZXRyaWthIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlTWV0cmljcyA9IChzdGF0ZTogdW5rbm93biwgbGF5ZXJOYW1lID0gJ3Jvb3QnKSA9PiB7XG4gIGNvbnN0IHNhdmVNZXRyaWNzID0gdXNlUmVmKClcbiAgY29uc3QgeWFSZWFjaEdvYWwgPSBzdGF0ZS55YVJlYWNoR29hbCB8fCBub29wWWFNZXRyaWthXG4gIGNvbnN0IGFkZm94UmVhY2hHb2FsID0gc3RhdGUuYWRmb3hSZWFjaEdvYWwgfHwgbm9vcEFkRm94XG4gIGNvbnN0IG1ldHJpY3MgPSBwaWNrKHN0YXRlW2xheWVyTmFtZV0sICd5YVNob3cnLCAneWFDbGljaycsICdhZGZveFNob3cnLCAnYWRmb3hDbGljaycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzSnNvblNhbWUoc2F2ZU1ldHJpY3MuY3VycmVudCwgbWV0cmljcykpIHtcbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhU2hvdylcbiAgICAgIH1cbiAgICAgIGlmIChtZXRyaWNzLmFkZm94U2hvdykge1xuICAgICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94U2hvdylcbiAgICAgIH1cbiAgICB9XG4gICAgc2F2ZU1ldHJpY3MuY3VycmVudCA9IG1ldHJpY3NcbiAgfSwgW21ldHJpY3NdKVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG1ldHJpY3MueWFDbGljaykge1xuICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YUNsaWNrKVxuICAgIH1cbiAgICBpZiAobWV0cmljcy5hZGZveENsaWNrKSB7XG4gICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94Q2xpY2spXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpbmplY3RMaW5rLCBpdGVyYXRvciB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjsgLy8gaHR0cHM6Ly9naXRodWIuY29tL0Rvd25sb2FkL3ByZWFjdC1oZWxtZXQvaXNzdWVzLzM0XG5cbmV4cG9ydCBjb25zdCB1c2VFeHRyYWN0Rm9udHMgPSAoc3RhdGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgZm9udHMgPSBuZXcgU2V0KFtdKVxuXG4gIGl0ZXJhdG9yKHN0YXRlLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdmb250RmFtaWx5Jykge1xuICAgICAgZm9udHMuYWRkKHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KVxuXG4gIGNvbnN0IGZvbnRMaW5rcyA9IHVzZU1lbW8oKCkgPT4gQXJyYXkuZnJvbShmb250cy52YWx1ZXMoKSkubWFwKGZvbnQgPT4gKHtcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBgaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PSR7Zm9udH06MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcGBcbiAgfSkpLCBbZm9udHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZm9udExpbmtzLmZvckVhY2goKGxpbmspID0+IGluamVjdExpbmsobGluaykpXG4gIH0sIFtmb250TGlua3NdKVxufVxuIiwiaW1wb3J0IHsgbm9vcCwgcGljayB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUxpZmVjeWNsZSA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBjeWNsZXMgPSBwaWNrKHN0YXRlLCAnb25Nb3VudCcsICdvbkRlc3Ryb3knLCAnb25DbGljaycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAoY3ljbGVzLm9uTW91bnQgfHwgbm9vcCkoKVxuXG4gICAgcmV0dXJuIGN5Y2xlcy5vbkRlc3Ryb3kgfHwgbm9vcFxuICB9LCBbXSlcblxuICByZXR1cm4gY3ljbGVzLm9uQ2xpY2sgfHwgbm9vcFxufVxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcbmltcG9ydCB7IGJvcmRlck9wdGlvbnMgfSBmcm9tICdzcmMvaGVscGVycy9jb25zdGFudHMnXG5pbXBvcnQgeyB1c2VMaWZlY3ljbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlTGlmZWN5Y2xlJ1xuXG5jb25zdCBTaW1wbGVHaWZ0OiBGQzxTdGF0ZT4gPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2tNZXRyaWNzID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3Blbih7XG4gICAgZGVsYXk6IGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5LFxuICAgIC4uLnBpY2soZGV2aWNlU3RhdGUsICdvbk9wZW4nLCAnb25BdXRvT3BlbicpXG4gIH0pXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VMaWZlY3ljbGUoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IGxlZ2FsQm9yZGVyID0gbGVnYWxJc09wZW4gPyBwaWNrKHJ1bGVzLmNvbnRhaW5lciwgLi4uYm9yZGVyT3B0aW9ucykgOiB7fVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogbGVnYWxJc09wZW5cbiAgICAgIH0pfVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgb25DbGljaygpXG4gICAgICAgICAgICAgIG9uQ2xpY2tNZXRyaWNzKClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICAgICAge3J1bGVzPy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIFtzdHlsZXMuYnV0dG9uQW5pbWF0ZWRdOiBydWxlcy5idXR0b24uaXNBbmltYXRlZFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgc3R5bGU9e3J1bGVzLmJ1dHRvbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEdhcH0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17eyAuLi5ydWxlcy5sZWdhbCwgLi4ubGVnYWxCb3JkZXIgfX0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57cnVsZXM/LmxlZ2FsPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUxlZ2FsSXNPcGVufT5cbiAgICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlR2lmdCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGluZX0gc3R5bGU9e3J1bGVzLmxpbmV9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keUlubmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRleHR9PntydWxlcy5idXR0b24/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c0NhcmRcbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgcGljaywgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXNDYXJkIGZyb20gJy4vY29tcG9uZW50cy9Cb251c0NhcmQnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyB1c2VMaWZlY3ljbGUgfSBmcm9tIFwic3JjL2hvb2tzL3VzZUxpZmVjeWNsZVwiO1xuXG5jb25zdCBDb21wbGV4R2lmdCA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oe1xuICAgIGRlbGF5OiBkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5kZWxheSxcbiAgICAuLi5waWNrKGRldmljZVN0YXRlLCAnb25PcGVuJywgJ29uQXV0b09wZW4nKVxuICB9KVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VMaWZlY3ljbGUoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIGNvbnN0IGhhc1RpdGxlSWNvbiA9IHJ1bGVzPy50aXRsZT8uaGFzSWNvblxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7XG4gICAgICAgICAgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e2JvZHlSdWxlc31cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgICAge2hhc1RpdGxlSWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259IHN0eWxlPXtwaWNrKHJ1bGVzLnRpdGxlLCAnY29sb3InKX0+XG4gICAgICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZFRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PntydWxlcy50aXRsZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcblxuLy8gaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tIFwic3JjXCI7XG4vLyBpbXBvcnQgeyBpc0VtcHR5VmFsdWUsIGlzVmFsdWUgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbi8vXG5cbi8vXG4vLyBleHBvcnQgZGVmYXVsdCAoZW1pdHRlcjogRW1pdHRlclR5cGUpID0+IHtcbi8vICAgZW1pdHRlci5vbigncmVuZGVyTm9kZScsICh7IHJ1bGUsIGxheWVyIH0pID0+IHtcbi8vICAgICBpZiAoJyRhbmltYXRpb25zJyBpbiBydWxlKSB7XG4vLyAgICAgICBjb25zdCBhbGxBbmltYXRpb25zID0gcnVsZS4kYW5pbWF0aW9uc1xuLy8gICAgICAgICAubWFwKChhbmltYXRpb246IGtleW9mIHR5cGVvZiBhbmltYXRpb25zTWFwKSA9PiBhbmltYXRpb25zTWFwW2FuaW1hdGlvbl0pXG4vLyAgICAgICAgIC5qb2luKCcsICcpXG4vL1xuLy8gICAgICAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4vLyAgICAgICAgIGlzVmFsdWUocnVsZS4kZ3JhZGllbnRDb2xvcikgJiYgcnVsZS4kYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuLy8gICAgICAgICAgID8ge1xuLy8gICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZS5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGUuJGdyYWRpZW50Q29sb3J9IDEwMCUpYCxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICA6IHt9XG4vL1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb246IHtcbi8vICAgICAgICAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4vLyAgICAgICAgICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnaWNvbicgJiYgIWlzRW1wdHlWYWx1ZShydWxlLmhhc0ljb24pKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvblRhcmdldDoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdmbGV4JyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAndGl0bGUnKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaGVhZGVySWNvbjoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdibG9jaycgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2NvbnRhaW5lcicpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBib2R5OiB7XG4vLyAgICAgICAgICAgJGRlbGF5OiBydWxlLmRlbGF5LFxuLy8gICAgICAgICAgIGxlZnQ6IHJ1bGUubGVmdFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBhcnJvdzoge1xuLy8gICAgICAgICAgIGxlZnQ6IGAkeysocnVsZS5sZWZ0IHx8IDApICogLTEgKyA4fWAsXG4vLyAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBydWxlLmJhY2tncm91bmRDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgfSlcbi8vIH1cbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChlbCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtlbH0+XG4gICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgIHtidXR0b25SdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge2xlZ2FsUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgc3BhY2luZ09wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3BpY2socnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9IOKAlCB7cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tICdzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgnXG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9jb21wb25lbnRzL01hdGNoJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b25XcmFwcGVyLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uV3JhcHBlcj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfSBzdHlsZT17Y29udGVudFJ1bGVzfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8TWF0Y2ggLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3RleHRSdWxlc30+XG4gICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbkhlYWQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2ssIGRldmljZXMgYXMgZGV2aWNlc0xpc3QsIGdldCwgaXNWYWxpZFRlbXBsYXRlLCBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSwgaXNWYWxpZFRlbXBsYXRlIH1cbiJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiaSIsImlubmVyIiwibW9kdWxlIiwibyIsIm4iLCJ0IiwidSIsIkIiLCJyIiwiZiIsImMiLCJlIiwiXyIsIkYiLCJxIiwidyIsImciLCJsIiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInN0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiZGVmaW5lUHJvcGVydHkiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25NZXJnZVZhbHVlIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJleHBvcnRzIiwiY2xvbmVCdWZmZXIiLCJVaW50OEFycmF5IiwiY2xvbmVBcnJheUJ1ZmZlciIsImNsb25lVHlwZWRBcnJheSIsImNvcHlBcnJheSIsImJhc2VDcmVhdGUiLCJvdmVyQXJnIiwiZ2V0UHJvdG90eXBlIiwiaXNQcm90b3R5cGUiLCJpbml0Q2xvbmVPYmplY3QiLCJpc09iamVjdExpa2UiLCJhcmdzVGFnIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5IiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZU9iamVjdCIsInN0dWJGYWxzZSIsImlzQnVmZmVyIiwib2JqZWN0VGFnIiwiaXNQbGFpbk9iamVjdCIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlVXRpbCIsImlzVHlwZWRBcnJheSIsInNhZmVHZXQiLCJhc3NpZ25WYWx1ZSIsImNvcHlPYmplY3QiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsIm5hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJrZXlzSW4iLCJ0b1BsYWluT2JqZWN0IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwicmVxdWlyZSQkMTQiLCJiYXNlTWVyZ2VEZWVwIiwiYmFzZU1lcmdlIiwiaWRlbnRpdHkiLCJhcHBseSIsIm92ZXJSZXN0IiwiY29uc3RhbnQiLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsInNldFRvU3RyaW5nIiwiYmFzZVJlc3QiLCJpc0l0ZXJhdGVlQ2FsbCIsImNyZWF0ZUFzc2lnbmVyIiwiaW5qZWN0TGluayIsIm9wdGlvbnMiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJ2YWx1ZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaXRlcmF0b3IiLCJpbnB1dCIsInZpc2l0b3IiLCJwYXRoIiwiQXJyYXkiLCJtYXAiLCJlbCIsIm5ld1BhdGgiLCJmaWx0ZXIiLCJpc1ZhbHVlIiwiam9pbiIsInJlZHVjZSIsImFjYyIsImlzRW1wdHlWYWx1ZSIsInVuZGVmaW5lZCIsIm5vb3AiLCJwaWNrIiwib2JqIiwicHJvcHMiLCJyZXN1bHQiLCJwcm9wIiwib21pdCIsImdldCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsImlzVmFsaWRUZW1wbGF0ZSIsImRhdGEiLCJyZ2JUb1JnYmEiLCJyZ2IiLCJhbHBoYSIsInJlcGxhY2UiLCJkZXZpY2VzIiwiQlJFQUtQT0lOVFMiLCJtb2JpbGUiLCJ0YWJsZXQiLCJsYXB0b3AiLCJkZXNrdG9wIiwidXNlR2lmdE9wZW4iLCJkZWxheSIsIm9uT3BlbiIsIm9uQXV0b09wZW4iLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwiX2pzeCIsIlByb3ZpZGVyIiwicmVuZGVyIiwidk5vZGUiLCJ0YXJnZXQiLCJzdGF0ZSIsInByZWFjdFJlbmRlciIsInVzZUN1cnJlbnRTdGF0ZSIsInVzZUNvbnRleHQiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJib3JkZXJPcHRpb25zIiwic3BhY2luZ09wdGlvbnMiLCJub29wWWFNZXRyaWthIiwiZ29hbCIsImNvbnNvbGUiLCJsb2ciLCJub29wQWRGb3giLCJ1c2VNZXRyaWNzIiwibGF5ZXJOYW1lIiwic2F2ZU1ldHJpY3MiLCJ5YVJlYWNoR29hbCIsImFkZm94UmVhY2hHb2FsIiwibWV0cmljcyIsInlhU2hvdyIsImFkZm94U2hvdyIsInlhQ2xpY2siLCJhZGZveENsaWNrIiwidXNlRXh0cmFjdEZvbnRzIiwiZm9udHMiLCJTZXQiLCJhZGQiLCJmb250TGlua3MiLCJ1c2VNZW1vIiwiZnJvbSIsImZvbnQiLCJyZWwiLCJocmVmIiwidXNlTGlmZWN5Y2xlIiwiY3ljbGVzIiwib25Nb3VudCIsIm9uRGVzdHJveSIsIm9uQ2xpY2siLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrTWV0cmljcyIsInN0eWxlcyIsImZhZGVpbiIsImxlZ2FsQm9yZGVyIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJsZWdhbE9wZW4iLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsR2FwIiwibGVnYWwiLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYm9keUlubmVyIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwiaGFzVGl0bGVJY29uIiwidGl0bGUiLCJwcm9tb3Rpb24iLCJoZWFkSWNvbiIsImhlYWRUaXRsZSIsImNoaWxkIiwic3dpdGNoVGV4dEFsaWduVG9GbGV4IiwidGV4dEFsaWduIiwiY2VudGVyIiwicmlnaHQiLCJMaW5lIiwiU2ltcGxlUG9wdXAiLCJhbGlnbkl0ZW1zIiwiYWxpZ24iLCJidXR0b25SdWxlcyIsImp1c3RpZnlDb250ZW50IiwibGVnYWxSdWxlcyIsIkJvbnVzIiwiaGVhZGVyIiwid3JhcHBlciIsIk1hdGNoIiwidGVhbXMiLCJsZWFndWUiLCJuYW1lIiwidGVhbUEiLCJ0ZWFtQiIsInRlYW0iLCJ0ZWFtTG9nbyIsInRlYW1OYW1lIiwib2RkIiwib2RkTGFiZWwiLCJvZGRWYWx1ZSIsImJ1dHRvbldyYXBwZXIiLCJjb250ZW50UnVsZXMiLCJjb250ZW50IiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsInJvd0ZpcnN0Iiwicm93U2Vjb25kIiwiYm9va21ha2VyIiwibGVnYWxJbmZvIiwibGVnYWxJbmZvQnV0dG9uIiwib3BlblRleHQiLCJjbG9zZVRleHQiLCJUZXh0IiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJ2YWx1ZU9uZSIsImNvZWYiLCJjb2VmSGVhZCIsImNvZWZWYWx1ZSIsInZhbHVlWCIsIm9kZFJldmVyc2UiLCJ2YWx1ZVR3byIsIk1hdGNoZXNPbmVUd28iLCJ0aXRsZUxhYmVsIiwidGl0bGVWYWx1ZSIsInRlYW0xTmFtZSIsInRlYW1WYWx1ZSIsInZhbHVlMSIsInRlYW0yTmFtZSIsInZhbHVlMiIsInVzZUFuaW1hdGVkTGlzdCIsInNsaWRlcyIsIml0ZW1zQ291bnQiLCJhbmltYXRlZElkeCIsInNldEFuaW1hdGVkSWR4IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJnb05leHQiLCJ0aW1lb3V0IiwiREVGQVVMVF9BTklNQVRJT05fU1BFRUQiLCJXaWRlQ2FyZCIsImdldENoaWxkIiwibWF0Y2hlcyIsIm1hdGNoZXNPbmVUd28iLCJzbGlkZXNMaXN0IiwiQm9vbGVhbiIsInNsaWRlIiwiYW5pbWF0aW9uTmFtZSIsImN1cnJlbnRTbGlkZSIsInNsaWRlUnVsZXMiLCJiYWNrZ3JvdW5kUnVsZXMiLCJoYXNDdXN0b21CYWNrZ3JvdW5kIiwibW9kaWZ5U3RhdGUiLCJkZXZpY2VzTGlzdCIsIm5ld1N0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEtBQUMsV0FBWTtBQUdaLFVBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsZUFBU0EsY0FBYTtBQUNyQixZQUFJLFVBQVUsQ0FBQTtBQUVkLGlCQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLGNBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLGNBQUksQ0FBQztBQUFLO0FBRVYsY0FBSSxVQUFVLE9BQU87QUFFckIsY0FBSSxZQUFZ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QUFNLENBQUNNLE1BQUdBLEdBQUUsS0FBSyxNQUFLTixJQUFFQyxJQUFFRyxFQUFDO0FBQUUsWUFBSVIsS0FBRTtBQUFHLGVBQU9NLEdBQUUsUUFBUSxTQUFTRixJQUFFO0FBQUMsY0FBR0EsR0FBRSxLQUFJO0FBQUMsZ0JBQUlDLEtBQUVELEdBQUUsR0FBRyxDQUFDO0FBQUUsWUFBQUEsR0FBRSxLQUFHQSxHQUFFLEtBQUlBLEdBQUUsTUFBSSxRQUFPQyxPQUFJRCxHQUFFLEdBQUcsQ0FBQyxNQUFJSixLQUFFO0FBQUEsVUFBRztBQUFBLFFBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQ0EsTUFBR0csR0FBRSxJQUFJLFVBQVFDLFFBQUssQ0FBQ00sTUFBR0EsR0FBRSxLQUFLLE1BQUtOLElBQUVDLElBQUVHLEVBQUM7QUFBQSxNQUFFO0FBQUUsUUFBRSxJQUFFO0FBQUcsVUFBSUUsS0FBRSxFQUFFLHVCQUFzQkMsS0FBRSxFQUFFO0FBQW9CLFFBQUUsc0JBQW9CLFNBQVNQLElBQUVDLElBQUVHLElBQUU7QUFBQyxZQUFHLEtBQUssS0FBSTtBQUFDLGNBQUlGLEtBQUVJO0FBQUUsVUFBQUEsS0FBRSxRQUFPRCxHQUFFTCxJQUFFQyxJQUFFRyxFQUFDLEdBQUVFLEtBQUVKO0FBQUEsUUFBQztBQUFDLFFBQUFLLE1BQUdBLEdBQUUsS0FBSyxNQUFLUCxJQUFFQyxJQUFFRyxFQUFDO0FBQUEsTUFBQyxHQUFFLEVBQUUsd0JBQXNCQztBQUFBLElBQUM7QUFBQyxXQUFPTixHQUFFLE9BQUtBLEdBQUU7QUFBQSxFQUFFO0FBQUMsV0FBUyxFQUFFRyxJQUFFTixJQUFFO0FBQUMsUUFBSUcsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLEtBQUNDLE9BQUFBLFFBQUUsT0FBSyxFQUFFRCxHQUFFLEtBQUlILEVBQUMsTUFBSUcsR0FBRSxLQUFHRyxJQUFFSCxHQUFFLElBQUVILElBQUUsRUFBRSxJQUFJLElBQUksS0FBS0csRUFBQztBQUFBLEVBQUU7QUFBQyxXQUFTLEVBQUVHLElBQUVOLElBQUU7QUFBQyxRQUFJRyxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsS0FBQ0MsT0FBQUEsUUFBRSxPQUFLLEVBQUVELEdBQUUsS0FBSUgsRUFBQyxNQUFJRyxHQUFFLEtBQUdHLElBQUVILEdBQUUsSUFBRUgsSUFBRSxFQUFFLElBQUksS0FBS0csRUFBQztBQUFBLEVBQUU7QUFBQyxXQUFTUyxJQUFFLEdBQUU7QUFBQyxXQUFPVCxNQUFFLEdBQUVVLElBQUUsV0FBVTtBQUFDLGFBQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxJQUFDLEdBQUUsRUFBRTtBQUFBLEVBQUM7QUFBc0wsV0FBU0EsSUFBRSxHQUFFTCxJQUFFO0FBQUMsUUFBSUYsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFdBQU8sRUFBRUEsR0FBRSxLQUFJRSxFQUFDLEtBQUdGLEdBQUUsTUFBSSxFQUFHLEdBQUNBLEdBQUUsSUFBRUUsSUFBRUYsR0FBRSxNQUFJLEdBQUVBLEdBQUUsT0FBS0EsR0FBRTtBQUFBLEVBQUU7QUFBc0QsV0FBU1EsSUFBRSxHQUFFO0FBQUMsUUFBSVIsS0FBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUVOLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxXQUFPQSxHQUFFLElBQUUsR0FBRU0sTUFBRyxRQUFNTixHQUFFLE9BQUtBLEdBQUUsS0FBRyxNQUFHTSxHQUFFLElBQUksQ0FBQyxJQUFHQSxHQUFFLE1BQU0sU0FBTyxFQUFFO0FBQUEsRUFBRTtBQUE2WCxXQUFTLElBQUc7QUFBQyxhQUFRRCxJQUFFQSxLQUFFLEVBQUU7QUFBUyxVQUFHQSxHQUFFLE9BQUtBLEdBQUU7QUFBSSxZQUFHO0FBQUMsVUFBQUEsR0FBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxJQUFJLFFBQVFVLEdBQUMsR0FBRVYsR0FBRSxJQUFJLE1BQUksQ0FBQTtBQUFBLFFBQUUsU0FBT0csSUFBTjtBQUFTLFVBQUFILEdBQUUsSUFBSSxNQUFJLENBQUEsR0FBR0QsT0FBQyxRQUFDLElBQUlJLElBQUVILEdBQUUsR0FBRztBQUFBLFFBQUM7QUFBQSxFQUFDO0FBQUNELFNBQUMsUUFBQyxNQUFJLFNBQVMsR0FBRTtBQUFDLFFBQUUsTUFBSyxLQUFHLEVBQUUsQ0FBQztBQUFBLEVBQUMsR0FBRUEsZUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLFNBQUcsRUFBRSxDQUFDLEdBQUUsSUFBRTtBQUFFLFFBQUlKLE1BQUcsSUFBRSxFQUFFLEtBQUs7QUFBSSxJQUFBQSxPQUFJLE1BQUksS0FBR0EsR0FBRSxNQUFJLENBQUEsR0FBRyxFQUFFLE1BQUksQ0FBQSxHQUFHQSxHQUFFLEdBQUcsUUFBUSxTQUFTSSxJQUFFO0FBQUMsTUFBQUEsR0FBRSxRQUFNQSxHQUFFLEtBQUdBLEdBQUUsTUFBS0EsR0FBRSxNQUFJLEdBQUVBLEdBQUUsTUFBSUEsR0FBRSxJQUFFO0FBQUEsSUFBTSxDQUFDLE1BQUlKLEdBQUUsSUFBSSxRQUFRLENBQUMsR0FBRUEsR0FBRSxJQUFJLFFBQVFlLEdBQUMsR0FBRWYsR0FBRSxNQUFJLENBQUEsS0FBSyxJQUFFO0FBQUEsRUFBQyxHQUFFSSxPQUFBQSxRQUFFLFNBQU8sU0FBU0MsSUFBRTtBQUFDLFNBQUcsRUFBRUEsRUFBQztBQUFFLFFBQUlGLEtBQUVFLEdBQUU7QUFBSSxJQUFBRixNQUFHQSxHQUFFLFFBQU1BLEdBQUUsSUFBSSxJQUFJLFdBQVMsTUFBSSxFQUFFLEtBQUtBLEVBQUMsS0FBRyxNQUFJQyxPQUFDLFFBQUMsMkJBQXlCLElBQUVBLGVBQUUsMEJBQXdCLEdBQUcsQ0FBQyxJQUFHRCxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLFFBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsUUFBTSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLFFBQU8sRUFBRSxNQUFJO0FBQUEsSUFBQyxDQUFDLElBQUcsSUFBRSxJQUFFO0FBQUEsRUFBSSxHQUFFQyxPQUFDLFFBQUMsTUFBSSxTQUFTQyxJQUFFRyxJQUFFO0FBQUMsSUFBQUEsR0FBRSxLQUFLLFNBQVNILElBQUU7QUFBQyxVQUFH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LE9BQUssRUFBRSxJQUFJLElBQUksU0FBU1AsSUFBRTtBQUFDLGFBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLElBQUMsQ0FBQyxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTU4sT0FBSSxFQUFFLE9BQUtNLEdBQUUsYUFBYSxFQUFFLEtBQUksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSUEsTUFBSTtBQUFBLEVBQUM7QUFBQyxXQUFTLElBQUc7QUFBQyxTQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUMsV0FBUyxFQUFFLEdBQUU7QUFBQyxRQUFJTixLQUFFLEVBQUUsR0FBRztBQUFJLFdBQU9BLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFJLENBQUM7QUFBQSxFQUFDO0FBQXFMLFdBQVMsSUFBRztBQUFDLFNBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBLEVBQUk7QUFBQ00sU0FBQyxRQUFDLFVBQVEsU0FBUyxHQUFFO0FBQUMsUUFBSU4sS0FBRSxFQUFFO0FBQUksSUFBQUEsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUcsR0FBR0EsTUFBRyxTQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxLQUFHLEVBQUUsQ0FBQztBQUFBLEVBQUMsSUFBRyxFQUFFLFlBQVUsSUFBSUQsT0FBQUEsYUFBRyxNQUFJLFNBQVMsR0FBRUMsSUFBRTtBQUFDLFFBQUlNLEtBQUVOLEdBQUUsS0FBSUcsS0FBRTtBQUFLLFlBQU1BLEdBQUUsTUFBSUEsR0FBRSxJQUFFLENBQUUsSUFBRUEsR0FBRSxFQUFFLEtBQUtHLEVBQUM7QUFBRSxRQUFJTCxLQUFFLEVBQUVFLEdBQUUsR0FBRyxHQUFFTCxLQUFFLE9BQUdILEtBQUUsV0FBVTtBQUFDLE1BQUFHLE9BQUlBLEtBQUUsTUFBR1EsR0FBRSxNQUFJLE1BQUtMLEtBQUVBLEdBQUVXLEVBQUMsSUFBRUEsR0FBQztBQUFBLElBQUc7QUFBRSxJQUFBTixHQUFF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aEIsR0FBR29PLFNBQVNwTyxLQUFLO0FBQUEsUUFDakIsQ0FBQ3pDLE1BQU0sR0FBRztBQUFBLFVBQ1IsR0FBRzZRLFNBQVNwTyxLQUFLLEVBQUV6QyxNQUFNO0FBQUEsVUFDekIsQ0FBQ2tFLElBQUksR0FBRyxPQUFPNUosVUFBVSxhQUFhQSxNQUFNeUIsSUFBSThVLFVBQVcsR0FBRXBPLFNBQVN6QyxVQUFVa0UsTUFBTSxDQUFDLElBQUk1SjtBQUFBQSxRQUM3RjtBQUFBLE1BQUE7QUFBQSxJQUNGLENBQ0Q7QUFDTXVXLFdBQUFBO0FBQUFBLEVBQ1Q7Ozs7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCwxMDNdfQ==
3595
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMudHMiLCIuLi9zcmMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTWV0cmljcy50cyIsIi4uL3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvY29tcG9uZW50cy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2NvbXBvbmVudHMvbGluZS9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZVBvcHVwLnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvcmVzaXplT2JzZXJ2ZXJzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9hbGdvcml0aG1zL2hhc0FjdGl2ZU9ic2VydmF0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9oYXNTa2lwcGVkT2JzZXJ2YXRpb25zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9hbGdvcml0aG1zL2RlbGl2ZXJSZXNpemVMb29wRXJyb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL1Jlc2l6ZU9ic2VydmVyQm94T3B0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvZnJlZXplLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlclNpemUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL0RPTVJlY3RSZWFkT25seS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvZWxlbWVudC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvZ2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9hbGdvcml0aG1zL2NhbGN1bGF0ZUJveFNpemUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL1Jlc2l6ZU9ic2VydmVyRW50cnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL2FsZ29yaXRobXMvY2FsY3VsYXRlRGVwdGhGb3JOb2RlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9hbGdvcml0aG1zL2Jyb2FkY2FzdEFjdGl2ZU9ic2VydmF0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9nYXRoZXJBY3RpdmVPYnNlcnZhdGlvbnNBdERlcHRoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi91dGlscy9wcm9jZXNzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi91dGlscy9xdWV1ZU1pY3JvVGFzay5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvcXVldWVSZXNpemVPYnNlcnZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvc2NoZWR1bGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZhdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvUmVzaXplT2JzZXJ2ZXJEZXRhaWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvUmVzaXplT2JzZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSkpLHU9cn0sbi5kaWZmZWQ9ZnVuY3Rpb24odCl7diYmdih0KTt2YXIgbz10Ll9fYztvJiZvLl9fSCYmKG8uX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKG8pJiZpPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGopKGIpKSxvLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jfSkpLHU9cj1udWxsfSxuLl9fYz1mdW5jdGlvbih0LHIpe3Iuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChrKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fHcobil9KX1jYXRjaCh1KXtyLnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSxyPVtdLG4uX19lKHUsdC5fX3YpfX0pLGwmJmwodCxyKX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe20mJm0odCk7dmFyIHIsdT10Ll9fYzt1JiZ1Ll9fSCYmKHUuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7dHJ5e2sobil9Y2F0Y2gobil7cj1ufX0pLHUuX19IPXZvaWQgMCxyJiZuLl9fZShyLHUuX192KSl9O3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiBqKG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksZyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMTAwKTtnJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIGsobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gdyhuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24geihuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e1QgYXMgdXNlQ2FsbGJhY2sscSBhcyB1c2VDb250ZXh0LHggYXMgdXNlRGVidWdWYWx1ZSxwIGFzIHVzZUVmZmVjdCxQIGFzIHVzZUVycm9yQm91bmRhcnksViBhcyB1c2VJZCxBIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUseSBhcyB1c2VMYXlvdXRFZmZlY3QsRiBhcyB1c2VNZW1vLHMgYXMgdXNlUmVkdWNlcixfIGFzIHVzZVJlZixoIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtDb21wb25lbnQgYXMgbixjcmVhdGVFbGVtZW50IGFzIHQsb3B0aW9ucyBhcyBlLHRvQ2hpbGRBcnJheSBhcyByLEZyYWdtZW50IGFzIHUscmVuZGVyIGFzIG8saHlkcmF0ZSBhcyBpLGNyZWF0ZUNvbnRleHQgYXMgbCxjcmVhdGVSZWYgYXMgYyxjbG9uZUVsZW1lbnQgYXMgZn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7Q29tcG9uZW50LEZyYWdtZW50LGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gQyhuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBFKG4sdCl7cmV0dXJuIG49PT10JiYoMCE9PW58fDEvbj09MS90KXx8biE9biYmdCE9dH1mdW5jdGlvbiB3KG4pe3RoaXMucHJvcHM9bn1mdW5jdGlvbiB4KG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6Qyh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHV9KHcucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx3LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gQyh0aGlzLnByb3BzLG4pfHxDKHRoaXMuc3RhdGUsdCl9O3ZhciBSPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxSJiZSKG4pfTt2YXIgTj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gayhuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPU4sdC5yZW5kZXI9dCx0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEE9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6QSxmb3JFYWNoOkEsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LFQ9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO1Qobix0LGUscil9O3ZhciBJPWUudW5tb3VudDtmdW5jdGlvbiBMKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEwobix0LGUpfSkpLG59ZnVuY3Rpb24gVShuLHQsZSl7cmV0dXJuIG4mJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFUobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5pbnNlcnRCZWZvcmUobi5fX2Usbi5fX2QpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gRCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBGKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gTShuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBWKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJiEwPT09bi5fX2gmJihuLnR5cGU9bnVsbCksSSYmSShuKX0sKEQucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci50JiYoci50PVtdKSxyLnQucHVzaChlKTt2YXIgdT1GKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VShuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci50LnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fSxjPSEwPT09dC5fX2g7ci5fX3UrK3x8Y3x8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxELnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudD1bXX0sRC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUwodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9faD1udWxsKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIFc9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4uby5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4uby5zaXplKSlmb3IoZT1uLnU7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLnU9ZT1lWzJdfX07ZnVuY3Rpb24gUChuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIGoobil7dmFyIGU9dGhpcyxyPW4uaTtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUubCksZS5sPW51bGwsZS5pPW51bGx9LGUuaSYmZS5pIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLG4uX192PyhlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoUCx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpKTplLmwmJmUuY29tcG9uZW50V2lsbFVubW91bnQoKX1mdW5jdGlvbiB6KG4sZSl7dmFyIHI9dChqLHtfX3Y6bixpOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oVi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9Rih0Ll9fdikscj10Lm8uZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksVyh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LFYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLnU9bnVsbCx0aGlzLm89bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5vLnNldCh0W2VdLHRoaXMudT1bMSwwLHRoaXMudV0pO3JldHVybiBuLmNoaWxkcmVufSxWLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Vi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VyhuLGUsdCl9KX07dmFyIEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEg9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFk9L1tBLVowLTldL2csJD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQscT1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBHKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEoobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEs9ZS5ldmVudDtmdW5jdGlvbiBRKCl7fWZ1bmN0aW9uIFgoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfWUuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIEsmJihuPUsobikpLG4ucGVyc2lzdD1RLG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9WCxuLmlzRGVmYXVsdFByZXZlbnRlZD1ubixuLm5hdGl2ZUV2ZW50PW59O3ZhciB0bixlbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxybj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9O2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dO2lmKCEoXCJ2YWx1ZVwiPT09byYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWl8fCQmJlwiY2hpbGRyZW5cIj09PW8mJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PW98fFwiY2xhc3NOYW1lXCI9PT1vKSl7dmFyIGw9by50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1vJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP289XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PW8mJiEwPT09aT9pPVwiXCI6XCJvbmRvdWJsZWNsaWNrXCI9PT1sP289XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09bHx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8cSh0LnR5cGUpP1wib25mb2N1c1wiPT09bD9vPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWw/bz1cIm9uZm9jdXNvdXRcIjpaLnRlc3Qobyk/bz1sOi0xPT09ZS5pbmRleE9mKFwiLVwiKSYmSC50ZXN0KG8pP289by5yZXBsYWNlKFksXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09aSYmKGk9dm9pZCAwKTpsPW89XCJvbmlucHV0XCIsXCJvbmlucHV0XCI9PT1sJiZ1W289bF0mJihvPVwib25pbnB1dENhcHR1cmVcIiksdVtvXT1pfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsZW4pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9QixybiYmcm4obil9O3ZhciB1bj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXt1biYmdW4obiksdG49bi5fX2N9O3ZhciBvbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtvbiYmb24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSx0bj1udWxsfTt2YXIgbG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0bi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfX19fSxjbj1cIjE3LjAuMlwiO2Z1bmN0aW9uIGZuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBhbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1CfWZ1bmN0aW9uIHNuKG4pe3JldHVybiBhbihuKT9mLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIGRuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LHBuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LG1uPXU7ZnVuY3Rpb24geW4obil7bigpfWZ1bmN0aW9uIF9uKG4pe3JldHVybiBufWZ1bmN0aW9uIGJuKCl7cmV0dXJuWyExLHluXX12YXIgU249ZDtmdW5jdGlvbiBnbihuLHQpe3ZhciBlPXQoKSxyPWEoe2g6e19fOmUsdjp0fX0pLHU9clswXS5oLG89clsxXTtyZXR1cm4gZChmdW5jdGlvbigpe3UuX189ZSx1LnY9dCxFKHUuX18sdCgpKXx8byh7aDp1fSl9LFtuLGUsdF0pLHYoZnVuY3Rpb24oKXtyZXR1cm4gRSh1Ll9fLHUudigpKXx8byh7aDp1fSksbihmdW5jdGlvbigpe0UodS5fXyx1LnYoKSl8fG8oe2g6dX0pfSl9LFtuXSksZX12YXIgQ249e3VzZVN0YXRlOmEsdXNlSWQ6cyx1c2VSZWR1Y2VyOmgsdXNlRWZmZWN0OnYsdXNlTGF5b3V0RWZmZWN0OmQsdXNlSW5zZXJ0aW9uRWZmZWN0OlNuLHVzZVRyYW5zaXRpb246Ym4sdXNlRGVmZXJyZWRWYWx1ZTpfbix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpnbixzdGFydFRyYW5zaXRpb246eW4sdXNlUmVmOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTptLHVzZU1lbW86eSx1c2VDYWxsYmFjazpfLHVzZUNvbnRleHQ6Yix1c2VEZWJ1Z1ZhbHVlOlMsdmVyc2lvbjpcIjE3LjAuMlwiLENoaWxkcmVuOk8scmVuZGVyOkcsaHlkcmF0ZTpKLHVubW91bnRDb21wb25lbnRBdE5vZGU6aG4sY3JlYXRlUG9ydGFsOnosY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OmZuLGNsb25lRWxlbWVudDpzbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmFuLGZpbmRET01Ob2RlOnZuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6dyxtZW1vOngsZm9yd2FyZFJlZjprLGZsdXNoU3luYzpwbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpkbixTdHJpY3RNb2RlOm1uLFN1c3BlbnNlOkQsU3VzcGVuc2VMaXN0OlYsbGF6eTpNLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmxufTtleHBvcnR7TyBhcyBDaGlsZHJlbix3IGFzIFB1cmVDb21wb25lbnQsbW4gYXMgU3RyaWN0TW9kZSxEIGFzIFN1c3BlbnNlLFYgYXMgU3VzcGVuc2VMaXN0LGxuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNuIGFzIGNsb25lRWxlbWVudCxmbiBhcyBjcmVhdGVGYWN0b3J5LHogYXMgY3JlYXRlUG9ydGFsLENuIGFzIGRlZmF1bHQsdm4gYXMgZmluZERPTU5vZGUscG4gYXMgZmx1c2hTeW5jLGsgYXMgZm9yd2FyZFJlZixKIGFzIGh5ZHJhdGUsYW4gYXMgaXNWYWxpZEVsZW1lbnQsTSBhcyBsYXp5LHggYXMgbWVtbyxHIGFzIHJlbmRlcix5biBhcyBzdGFydFRyYW5zaXRpb24saG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxkbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxfbiBhcyB1c2VEZWZlcnJlZFZhbHVlLFNuIGFzIHVzZUluc2VydGlvbkVmZmVjdCxnbiBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxibiBhcyB1c2VUcmFuc2l0aW9uLGNuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93biwgc3RyaW5nXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yLCBwYXRoPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwgaW5kZXhdLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIHJldHVybiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGtleV0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgfHwgdmFsdWUgPT09IG51bGxcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRUZW1wbGF0ZSA9IChkYXRhOiBBbnlPYmplY3QpID0+ICdpZCcgaW4gZGF0YSAmJiAncm9vdCcgaW4gZGF0YVxuXG5leHBvcnQgY29uc3QgcmdiVG9SZ2JhID0gKHJnYjogc3RyaW5nLCBhbHBoYSA9IDEpOiBzdHJpbmcgPT4gcmdiLnJlcGxhY2UoJyknLCBgLCAke2FscGhhfSlgKS5yZXBsYWNlKCdyZ2InLCAncmdiYScpXG5cbmV4cG9ydCBjb25zdCBtZXJnZSA9IGxvZGFzaE1lcmdlXG5cbmV4cG9ydCBjb25zdCBkZXZpY2VzID0gWydkZXNrdG9wJywgJ2xhcHRvcCcsICd0YWJsZXQnLCAnbW9iaWxlJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IEJSRUFLUE9JTlRTID0ge1xuICBtb2JpbGU6IDMyMCxcbiAgdGFibGV0OiA3NjgsXG4gIGxhcHRvcDogMTAyNCxcbiAgZGVza3RvcDogMTkyMFxufSBhcyBjb25zdFxuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuZXhwb3J0ICogZnJvbSAnLi9kb20nXG5leHBvcnQgKiBmcm9tICcuL2l0ZXJhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudEVtaXR0ZXInXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBkZWxheT86IG51bWJlclxuICBvbk9wZW4/OiBDYWxsYmFjayAvLyDQodGA0LDQsdCw0YLRi9Cy0LDQtdGCINC60L7Qs9C00LAg0L7RgtC60YDRi9C70Lgg0YDRg9C60LDQvNC4XG4gIG9uQXV0b09wZW4/OiBDYWxsYmFja1xufVxuXG5leHBvcnQgY29uc3QgdXNlR2lmdE9wZW4gPSAoeyBkZWxheSwgb25PcGVuLCBvbkF1dG9PcGVuIH06IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IGNsZWFyID0gKHRpbWVyOiB1bmtub3duKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgdGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyKHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgICAgb25BdXRvT3BlbiAmJiBvbkF1dG9PcGVuKClcbiAgICB9LCBkZWxheSB8fCAxMDAwKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyKHRpbWVyUmVmLmN1cnJlbnQpXG4gIH0sIFtkZWxheV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmICF0aW1lclJlZi5jdXJyZW50KSB7XG4gICAgICBvbk9wZW4gJiYgb25PcGVuKClcbiAgICB9XG4gIH0sIFtpc09wZW5dKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciwgY2xvbmVFbGVtZW50IH0gZnJvbSAncHJlYWN0J1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9TdGF0ZUNvbnRleHQnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgaWQ6IHN0cmluZ1xuICB0YXJnZXQ6IENvbnRhaW5lck5vZGVcbiAgc3RhdGU/OiB1bmtub3duXG4gIHJlZj86IHVua25vd25cbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9XG4gICh2Tm9kZTogQ29tcG9uZW50Q2hpbGQpID0+XG4gIGFzeW5jICh7IHRhcmdldCwgaWQsIHJlZiwgc3RhdGUgfTogT3B0aW9ucykgPT4ge1xuICAgIGlmICghKCdSZXNpemVPYnNlcnZlcicgaW4gd2luZG93KSkge1xuICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KCdAanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlcicpXG4gICAgICB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgPSBtb2R1bGUuUmVzaXplT2JzZXJ2ZXJcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlYWN0UmVuZGVyKFxuICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17c3RhdGV9PntjbG9uZUVsZW1lbnQodk5vZGUsIHsgcmVmLCBpZCB9KX08L1N0YXRlQ29udGV4dD4sXG4gICAgICB0YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICApXG4gIH1cbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vU3RhdGVDb250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDdXJyZW50U3RhdGUgPSA8VFZhbHVlID0gdW5rbm93bj4oKSA9PiB1c2VDb250ZXh0PFRWYWx1ZT4oU3RhdGUpXG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIERldmljZSwgZGV2aWNlcywgRXh0cmFjdFJ1bGVzLCBpc1ZhbHVlLCBpdGVyYXRvciwgTGF5ZXIsIG1lcmdlLCBvbWl0LCBSdWxlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBpc1ZhbGlkTGF5ZXIgPSAoc3RhdGU6IEFueU9iamVjdCA9IHt9KTogc3RhdGUgaXMgTGF5ZXIgPT5cbiAgdHlwZW9mIHN0YXRlID09PSAnb2JqZWN0JyAmJiBpc1ZhbHVlKHN0YXRlKSAmJiBkZXZpY2VzLmV2ZXJ5KGRldmljZSA9PiBkZXZpY2UgaW4gc3RhdGUpXG5cbmV4cG9ydCBjb25zdCBnZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZSA9ICdkZXNrdG9wJz4oXG4gIHN0YXRlOiBUU3RhdGUsXG4gIGRldmljZTogVERldmljZVxuKTogRXh0cmFjdFJ1bGVzPFRTdGF0ZSwgVERldmljZT4gPT4ge1xuICBpZiAoIXN0YXRlKSByZXR1cm4gc3RhdGVcblxuICByZXR1cm4gaXRlcmF0b3Ioc3RhdGUsIChfa2V5LCB2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKGlzVmFsaWRMYXllcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFJ1bGVzID0gdmFsdWVbZGV2aWNlXVxuICAgICAgaWYgKCdwYXJlbnQnIGluIHJlc3VsdFJ1bGVzICYmIGlzVmFsdWUocmVzdWx0UnVsZXMucGFyZW50KSkge1xuICAgICAgICByZXR1cm4geyAuLi52YWx1ZVtyZXN1bHRSdWxlcy5wYXJlbnRdLCAuLi5vbWl0KHJlc3VsdFJ1bGVzLCAncGFyZW50JykgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdFJ1bGVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pIGFzIEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+XG59XG4iLCJpbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IGdldFJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9nZXREZXZpY2VTdGF0ZSdcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnLi4vcHJvbW9zL1NpbXBsZUdpZnQvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1c2VHZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZT4oc3RhdGU6IFRTdGF0ZSwgZGV2aWNlOiBURGV2aWNlKSA9PlxuICBnZXRSdWxlczxUU3RhdGUsIFREZXZpY2U+KHN0YXRlLCBkZXZpY2UpXG4iLCJpbXBvcnQgeyBCUkVBS1BPSU5UUywgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IE11dGFibGVSZWYgfSBmcm9tICdwcmVhY3QvaG9va3MnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgaWQ6IHN0cmluZ1xuICB0YXJnZXRSZWY6IE11dGFibGVSZWY8SFRNTERpdkVsZW1lbnQ+XG4gIC8qKlxuICAgKiBQcm9tbyDQstGB0YLRgNCw0LjQstCw0LXRgtGB0Y8g0LIg0YDQsNC30L3Ri9C1IERPTSDQuCDQvNGLINC90LUg0LfQvdCw0LXQvCDRgNCw0LfQvNC10YAg0LrQsNC60L7Qs9C+INC60L7QvdGC0LXQudC90LXRgNCwXG4gICAqINGP0LLQu9GP0LXRgtGB0Y8g0L3Rg9C20L3Ri9C8LiDQndCw0L/RgNC40LzQtdGAIEdpZnQqINC30LDQvdC40LzQsNC10YIg0LLRgdC10LPQviAzMHB4LCDQuCDQvdC10L7QsdGF0L7QtNC40LzRi9C5INC60L7QvdGC0LXQudC90LXRgFxuICAgKiDQvNC+0LbQtdGCINC90LDRhdC+0LTQuNGC0YzRgdGPINCz0L7RgNCw0LfQtNC+INCy0YvRiNC1LlxuICAgKi9cbiAgcGFyZW50S2V5Pzogc3RyaW5nXG4gIGJyZWFrcG9pbnRzPzogdHlwZW9mIEJSRUFLUE9JTlRTXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDb250YWluZXJEZXZpY2UgPSAoe1xuICBpZCxcbiAgdGFyZ2V0UmVmLFxuICBwYXJlbnRLZXkgPSAnZGV2aWNlLWNvbnRhaW5lcicsXG4gIGJyZWFrcG9pbnRzID0gQlJFQUtQT0lOVFNcbn06IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgW2RldmljZSwgc2V0RGV2aWNlXSA9IHVzZVN0YXRlPERldmljZT4oJ2Rlc2t0b3AnKVxuXG4gIGNvbnN0IGNoZWNrRGV2aWNlID0gKHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwXG4gICAgY29uc3Qgc29ydGVkQnJlYWtwb2ludHMgPSBPYmplY3QuZW50cmllcyh7IC4uLmJyZWFrcG9pbnRzIH0pLnNvcnQoKFtfMSwgdmFsdWVBXSwgW18yLCB2YWx1ZUJdKSA9PiB2YWx1ZUEgLSB2YWx1ZUIpXG5cbiAgICBjb25zdCBmaW5kRGV2aWNlID1cbiAgICAgIChzb3J0ZWRCcmVha3BvaW50cy5maW5kKChbXzEsIHZhbHVlXSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW18yLCBuZXh0VmFsdWVdID0gc29ydGVkQnJlYWtwb2ludHNbaW5kZXggKyAxXSB8fCBbXVxuXG4gICAgICAgIHJldHVybiBwYXJlbnRXaWR0aCA+PSB2YWx1ZSAmJiBwYXJlbnRXaWR0aCA8IG5leHRWYWx1ZVxuICAgICAgfSk/LlswXSBhcyBEZXZpY2UpIHx8ICdkZXNrdG9wJ1xuXG4gICAgc2V0RGV2aWNlKGZpbmREZXZpY2UpXG4gIH1cblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0YXJnZXRSZWYuY3VycmVudC5jbG9zZXN0KGBbZGF0YS0ke3BhcmVudEtleX09JyR7aWR9J11gKSB8fCBkb2N1bWVudC5ib2R5XG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgXG59KVxuXG5leHBvcnQgY29uc3QgdXNlR2lmdFJ1bGVzID0gKGRldmljZVN0YXRlOiB1bmtub3duLCBhbmltYXRpb25zOiBSZWNvcmQ8QW5pbWF0aW9uTmFtZSwgc3RyaW5nPikgPT4ge1xuICBjb25zdCBmdWxsQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnNNYXAoYW5pbWF0aW9ucylcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBoYXNJY29uID0gcnVsZXM/Lmljb24/Lmhhc0ljb25cblxuICBjb25zdCBhcnJvd1J1bGVzID0ge1xuICAgIGxlZnQ6IGAkeysoZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8ubGVmdCB8fCAwKSAqIC0xICsgOH1weGAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlclRvcENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4gIH1cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgbGVmdDogcnVsZXM/LmNvbnRhaW5lcj8ubGVmdFxuICB9XG5cbiAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IChydWxlcz8uaWNvbj8uYW5pbWF0aW9ucyB8fCBbXSlcbiAgICAubWFwKChhbmltYXRpb246IEFuaW1hdGlvbk5hbWUpID0+IGZ1bGxBbmltYXRpb25zW2FuaW1hdGlvbl0pXG4gICAgLmpvaW4oJywgJylcblxuICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID1cbiAgICBpc1ZhbHVlKHJ1bGVzPy5pY29uPy5ncmFkaWVudENvbG9yKSAmJiBydWxlcz8uaWNvbj8uYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuICAgICAgPyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZXMuaWNvbj8uYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcn0gMTAwJSkgMCUgMCUgLyA0MDAlIDQwMCVgLFxuICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuICAgICAgICB9XG4gICAgICA6IHJ1bGVzPy5pY29uXG5cbiAgY29uc3QgaWNvblJ1bGVzID0ge1xuICAgIC4uLihydWxlcz8uaWNvbiB8fCB7fSksXG4gICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGFzSWNvbixcbiAgICBhcnJvd1J1bGVzLFxuICAgIGJvZHlSdWxlcyxcbiAgICBpY29uUnVsZXNcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGJhY2tncm91bmRPcHRpb25zID0gWydiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZEZpdCddXG5leHBvcnQgY29uc3QgYm9yZGVyT3B0aW9ucyA9IFsnYm9yZGVyV2lkdGgnLCAnYm9yZGVyQ29sb3InLCAnYm9yZGVyU3R5bGUnXVxuXG5leHBvcnQgY29uc3Qgc3BhY2luZ09wdGlvbnMgPSBbXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuXG5leHBvcnQgY29uc3Qgbm9vcFlhTWV0cmlrYSA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIFlhTWVrdGlrYSByZWFjaCBnb2FsOiAke2dvYWx9YClcbmV4cG9ydCBjb25zdCBub29wQWRGb3ggPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBBZEZveCByZWFjaCBnb2FsOiAke2dvYWx9YClcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IGlzSnNvblNhbWUsIHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IG5vb3BBZEZveCwgbm9vcFlhTWV0cmlrYSB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IHVzZU1ldHJpY3MgPSAoc3RhdGU6IHVua25vd24sIGxheWVyTmFtZSA9ICdyb290JykgPT4ge1xuICBjb25zdCBzYXZlTWV0cmljcyA9IHVzZVJlZigpXG4gIGNvbnN0IHlhUmVhY2hHb2FsID0gc3RhdGUueWFSZWFjaEdvYWwgfHwgbm9vcFlhTWV0cmlrYVxuICBjb25zdCBhZGZveFJlYWNoR29hbCA9IHN0YXRlLmFkZm94UmVhY2hHb2FsIHx8IG5vb3BBZEZveFxuICBjb25zdCBtZXRyaWNzID0gcGljayhzdGF0ZVtsYXllck5hbWVdLCAneWFTaG93JywgJ3lhQ2xpY2snLCAnYWRmb3hTaG93JywgJ2FkZm94Q2xpY2snKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0pzb25TYW1lKHNhdmVNZXRyaWNzLmN1cnJlbnQsIG1ldHJpY3MpKSB7XG4gICAgICBpZiAobWV0cmljcy55YVNob3cpIHtcbiAgICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YVNob3cpXG4gICAgICB9XG4gICAgICBpZiAobWV0cmljcy5hZGZveFNob3cpIHtcbiAgICAgICAgYWRmb3hSZWFjaEdvYWwobWV0cmljcy5hZGZveFNob3cpXG4gICAgICB9XG4gICAgfVxuICAgIHNhdmVNZXRyaWNzLmN1cnJlbnQgPSBtZXRyaWNzXG4gIH0sIFttZXRyaWNzXSlcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChtZXRyaWNzLnlhQ2xpY2spIHtcbiAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFDbGljaylcbiAgICB9XG4gICAgaWYgKG1ldHJpY3MuYWRmb3hDbGljaykge1xuICAgICAgYWRmb3hSZWFjaEdvYWwobWV0cmljcy5hZGZveENsaWNrKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaW5qZWN0TGluaywgaXRlcmF0b3IgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb3dubG9hZC9wcmVhY3QtaGVsbWV0L2lzc3Vlcy8zNFxuXG5leHBvcnQgY29uc3QgdXNlRXh0cmFjdEZvbnRzID0gKHN0YXRlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IGZvbnRzID0gbmV3IFNldChbXSlcblxuICBpdGVyYXRvcihzdGF0ZSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZiAoa2V5ID09PSAnZm9udEZhbWlseScpIHtcbiAgICAgIGZvbnRzLmFkZCh2YWx1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSlcblxuICBjb25zdCBmb250TGlua3MgPSB1c2VNZW1vKCgpID0+IEFycmF5LmZyb20oZm9udHMudmFsdWVzKCkpLm1hcChmb250ID0+ICh7XG4gICAgcmVsOiAnc3R5bGVzaGVldCcsXG4gICAgaHJlZjogYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT0ke2ZvbnR9OjMwMCw0MDAsNTAwLDcwMCZkaXNwbGF5PXN3YXBgXG4gIH0pKSwgW2ZvbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZvbnRMaW5rcy5mb3JFYWNoKChsaW5rKSA9PiBpbmplY3RMaW5rKGxpbmspKVxuICB9LCBbZm9udExpbmtzXSlcbn1cbiIsImltcG9ydCB7IG5vb3AsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VMaWZlY3ljbGUgPSAoc3RhdGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgY3ljbGVzID0gcGljayhzdGF0ZSwgJ29uTW91bnQnLCAnb25EZXN0cm95JywgJ29uQ2xpY2snKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgKGN5Y2xlcy5vbk1vdW50IHx8IG5vb3ApKClcblxuICAgIHJldHVybiBjeWNsZXMub25EZXN0cm95IHx8IG5vb3BcbiAgfSwgW10pXG5cbiAgcmV0dXJuIGN5Y2xlcy5vbkNsaWNrIHx8IG5vb3Bcbn1cbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBGQywgZm9yd2FyZFJlZiwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyBib3JkZXJPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuaW1wb3J0IHsgdXNlTGlmZWN5Y2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUxpZmVjeWNsZSdcblxuY29uc3QgU2ltcGxlR2lmdDogRkM8U3RhdGU+ID0gZm9yd2FyZFJlZigoeyBpZCB9LCBfcmVmKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYsIGlkIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrTWV0cmljcyA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oe1xuICAgIGRlbGF5OiBkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5kZWxheSxcbiAgICAuLi5waWNrKGRldmljZVN0YXRlLCAnb25PcGVuJywgJ29uQXV0b09wZW4nKVxuICB9KVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTGlmZWN5Y2xlKGRldmljZVN0YXRlKVxuICBjb25zdCBsZWdhbEJvcmRlciA9IGxlZ2FsSXNPcGVuID8gcGljayhydWxlcy5jb250YWluZXIsIC4uLmJvcmRlck9wdGlvbnMpIDoge31cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGxlZ2FsSXNPcGVuXG4gICAgICB9KX1cbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHsgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlbiB9KX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2soKVxuICAgICAgICAgICAgICBvbkNsaWNrTWV0cmljcygpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgICAgIHtydWxlcz8udGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5idXR0b24sIHtcbiAgICAgICAgICAgICAgICBbc3R5bGVzLmJ1dHRvbkFuaW1hdGVkXTogcnVsZXMuYnV0dG9uLmlzQW5pbWF0ZWRcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHN0eWxlPXtydWxlcy5idXR0b259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxHYXB9IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3sgLi4ucnVsZXMubGVnYWwsIC4uLmxlZ2FsQm9yZGVyIH19PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3J1bGVzPy5sZWdhbD8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVMZWdhbElzT3Blbn0+XG4gICAgICAgICAgICAgICAgICB7bGVnYWxJc09wZW4gPyBydWxlcz8ubGVnYWw/LmJ1dHRvbk9wZW5UZXh0IDogcnVsZXM/LmxlZ2FsPy5idXR0b25IaWRlVGV4dH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufSlcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5SW5uZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICA8RGlzcGxheVRleHQ+e3J1bGVzLnRleHQ/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGV4dH0+e3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzQ2FyZFxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBwaWNrLCBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IHVzZUxpZmVjeWNsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VMaWZlY3ljbGUnXG5cbmNvbnN0IENvbXBsZXhHaWZ0ID0gZm9yd2FyZFJlZigoeyBpZCB9LCBfcmVmKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYsIGlkIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3Blbih7XG4gICAgZGVsYXk6IGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5LFxuICAgIC4uLnBpY2soZGV2aWNlU3RhdGUsICdvbk9wZW4nLCAnb25BdXRvT3BlbicpXG4gIH0pXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZUxpZmVjeWNsZShkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgY29uc3QgaGFzVGl0bGVJY29uID0gcnVsZXM/LnRpdGxlPy5oYXNJY29uXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHtcbiAgICAgICAgICBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17Ym9keVJ1bGVzfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgICB7aGFzVGl0bGVJY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkSWNvbn0gc3R5bGU9e3BpY2socnVsZXMudGl0bGUsICdjb2xvcicpfT5cbiAgICAgICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkVGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgICAgICAgIDxCb251c0NhcmQgLz5cbiAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufSlcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuZXhwb3J0IGNvbnN0IHVzZVBvcHVwID0gKHJlZjogdW5rbm93bikgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qgc2hvdyA9ICgpID0+IHNldElzT3Blbih0cnVlKVxuICBjb25zdCBoaWRlID0gKCkgPT4gc2V0SXNPcGVuKGZhbHNlKVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHNob3csXG4gICAgaGlkZVxuICB9KSlcblxuICByZXR1cm4ge1xuICAgIGlzT3BlbixcbiAgICBzaG93LFxuICAgIGhpZGVcbiAgfVxufVxuIiwiaW1wb3J0IHsgRkMsIGZvcndhcmRSZWYsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcGljaywgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gJ3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleCdcbmltcG9ydCBMaW5lIGZyb20gJy4vY29tcG9uZW50cy9saW5lJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgeyB1c2VQb3B1cCB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlUG9wdXAnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9IGZvcndhcmRSZWYoKHsgaWQgfSwgcmVmKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIGhpZGUgfSA9IHVzZVBvcHVwKHJlZilcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmLCBpZCB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5yb290fVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTogaXNPcGVuID8gJ2ZsZXgnIDogJ25vbmUnXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0gc3R5bGU9e3J1bGVzLm92ZXJsYXl9IG9uQ2xpY2s9e2hpZGV9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGNvbG9yOiBydWxlcy5jbG9zZT8uYmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXtoaWRlfVxuICAgICAgICA+XG4gICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5jb250ZW50LCB7XG4gICAgICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgICAgIH0pfVxuICAgICAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2VsfT5cbiAgICAgICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgICAge2J1dHRvblJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgICAgICB7bGVnYWxSdWxlcz8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCwgcGljayB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBzcGFjaW5nT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gc3R5bGU9e3J1bGVzLmhlYWRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cGljayhydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCBmb3J3YXJkUmVmLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCB7IHVzZVBvcHVwIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VQb3B1cCdcblxuY29uc3QgQ29tcGxleFBvcHVwOiBGQyA9IGZvcndhcmRSZWYoKHsgaWQgfSwgcmVmKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIGhpZGUgfSA9IHVzZVBvcHVwKHJlZilcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmLCBpZCB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5yb290fVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTogaXNPcGVuID8gJ2ZsZXgnIDogJ25vbmUnXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0gc3R5bGU9e3J1bGVzLm92ZXJsYXl9IG9uQ2xpY2s9e2hpZGV9IC8+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5jb250ZW50LCB7XG4gICAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGNvbG9yOiBydWxlcy5jbG9zZT8uYmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXtoaWRlfVxuICAgICAgICA+XG4gICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59KVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPENvbXBsZXhQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTWF0Y2g6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbXN9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVhZ3VlfSBzdHlsZT17cnVsZXMubGVhZ3VlfT57cnVsZXMubGVhZ3VlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX0g4oCUIHtydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtydWxlcy5vZGRMYWJlbH0+e3J1bGVzLm9kZExhYmVsPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZFZhbHVlfSBzdHlsZT17cnVsZXMub2RkVmFsdWV9PntydWxlcy5vZGRWYWx1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30vPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaFxuIiwiaW1wb3J0IHsgRkMsIGZvcndhcmRSZWYsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gJ3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleCdcbmltcG9ydCBNYXRjaCBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2gnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgdXNlUG9wdXAgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZVBvcHVwJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5cbmNvbnN0IEV4cHJlc3NQb3B1cDogRkMgPSBmb3J3YXJkUmVmKCh7IGlkIH0sIHJlZikgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHsgaXNPcGVuLCBoaWRlIH0gPSB1c2VQb3B1cChyZWYpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiwgaWQgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbldyYXBwZXIucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b25XcmFwcGVyPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiBpc09wZW4gPyAnZmxleCcgOiAnbm9uZSdcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fSBzdHlsZT17cnVsZXMub3ZlcmxheX0gb25DbGljaz17aGlkZX0gLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5jb250ZW50LCB7XG4gICAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBjb2xvcjogcnVsZXMuY2xvc2U/LmJhY2tncm91bmRDb2xvclxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbGljaz17aGlkZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGEgcmVmPXtyb290UmVmfSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17dGV4dFJ1bGVzfT5cbiAgICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59KVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPEV4cHJlc3NQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2ssIGRldmljZXMgYXMgZGV2aWNlc0xpc3QsIGdldCwgaXNWYWxpZFRlbXBsYXRlLCBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSwgaXNWYWxpZFRlbXBsYXRlIH1cbiIsInZhciByZXNpemVPYnNlcnZlcnMgPSBbXTtcbmV4cG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9O1xuIiwiaW1wb3J0IHsgcmVzaXplT2JzZXJ2ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbnZhciBoYXNBY3RpdmVPYnNlcnZhdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlc2l6ZU9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChybykgeyByZXR1cm4gcm8uYWN0aXZlVGFyZ2V0cy5sZW5ndGggPiAwOyB9KTtcbn07XG5leHBvcnQgeyBoYXNBY3RpdmVPYnNlcnZhdGlvbnMgfTtcbiIsImltcG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9IGZyb20gJy4uL3V0aWxzL3Jlc2l6ZU9ic2VydmVycyc7XG52YXIgaGFzU2tpcHBlZE9ic2VydmF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVzaXplT2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKHJvKSB7IHJldHVybiByby5za2lwcGVkVGFyZ2V0cy5sZW5ndGggPiAwOyB9KTtcbn07XG5leHBvcnQgeyBoYXNTa2lwcGVkT2JzZXJ2YXRpb25zIH07XG4iLCJ2YXIgbXNnID0gJ1Jlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9ucy4nO1xudmFyIGRlbGl2ZXJSZXNpemVMb29wRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV2ZW50O1xuICAgIGlmICh0eXBlb2YgRXJyb3JFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBldmVudCA9IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2ZW50LmluaXRFdmVudCgnZXJyb3InLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBldmVudC5tZXNzYWdlID0gbXNnO1xuICAgIH1cbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XG59O1xuZXhwb3J0IHsgZGVsaXZlclJlc2l6ZUxvb3BFcnJvciB9O1xuIiwidmFyIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucztcbihmdW5jdGlvbiAoUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zKSB7XG4gICAgUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zW1wiQk9SREVSX0JPWFwiXSA9IFwiYm9yZGVyLWJveFwiO1xuICAgIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9uc1tcIkNPTlRFTlRfQk9YXCJdID0gXCJjb250ZW50LWJveFwiO1xuICAgIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9uc1tcIkRFVklDRV9QSVhFTF9DT05URU5UX0JPWFwiXSA9IFwiZGV2aWNlLXBpeGVsLWNvbnRlbnQtYm94XCI7XG59KShSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfHwgKFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyA9IHt9KSk7XG5leHBvcnQgeyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfTtcbiIsImV4cG9ydCB2YXIgZnJlZXplID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmopOyB9O1xuIiwiaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIFJlc2l6ZU9ic2VydmVyU2l6ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJTaXplKGlubGluZVNpemUsIGJsb2NrU2l6ZSkge1xuICAgICAgICB0aGlzLmlubGluZVNpemUgPSBpbmxpbmVTaXplO1xuICAgICAgICB0aGlzLmJsb2NrU2l6ZSA9IGJsb2NrU2l6ZTtcbiAgICAgICAgZnJlZXplKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJTaXplO1xufSgpKTtcbmV4cG9ydCB7IFJlc2l6ZU9ic2VydmVyU2l6ZSB9O1xuIiwiaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIERPTVJlY3RSZWFkT25seSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRE9NUmVjdFJlYWRPbmx5KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy50b3AgPSB0aGlzLnk7XG4gICAgICAgIHRoaXMubGVmdCA9IHRoaXMueDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh0aGlzKTtcbiAgICB9XG4gICAgRE9NUmVjdFJlYWRPbmx5LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHggPSBfYS54LCB5ID0gX2EueSwgdG9wID0gX2EudG9wLCByaWdodCA9IF9hLnJpZ2h0LCBib3R0b20gPSBfYS5ib3R0b20sIGxlZnQgPSBfYS5sZWZ0LCB3aWR0aCA9IF9hLndpZHRoLCBoZWlnaHQgPSBfYS5oZWlnaHQ7XG4gICAgICAgIHJldHVybiB7IHg6IHgsIHk6IHksIHRvcDogdG9wLCByaWdodDogcmlnaHQsIGJvdHRvbTogYm90dG9tLCBsZWZ0OiBsZWZ0LCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07XG4gICAgfTtcbiAgICBET01SZWN0UmVhZE9ubHkuZnJvbVJlY3QgPSBmdW5jdGlvbiAocmVjdGFuZ2xlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRE9NUmVjdFJlYWRPbmx5KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICB9O1xuICAgIHJldHVybiBET01SZWN0UmVhZE9ubHk7XG59KCkpO1xuZXhwb3J0IHsgRE9NUmVjdFJlYWRPbmx5IH07XG4iLCJ2YXIgaXNTVkcgPSBmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmICdnZXRCQm94JyBpbiB0YXJnZXQ7IH07XG52YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgaWYgKGlzU1ZHKHRhcmdldCkpIHtcbiAgICAgICAgdmFyIF9hID0gdGFyZ2V0LmdldEJCb3goKSwgd2lkdGggPSBfYS53aWR0aCwgaGVpZ2h0ID0gX2EuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gIXdpZHRoICYmICFoZWlnaHQ7XG4gICAgfVxuICAgIHZhciBfYiA9IHRhcmdldCwgb2Zmc2V0V2lkdGggPSBfYi5vZmZzZXRXaWR0aCwgb2Zmc2V0SGVpZ2h0ID0gX2Iub2Zmc2V0SGVpZ2h0O1xuICAgIHJldHVybiAhKG9mZnNldFdpZHRoIHx8IG9mZnNldEhlaWdodCB8fCB0YXJnZXQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpO1xufTtcbnZhciBpc0VsZW1lbnQgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgc2NvcGUgPSAoX2EgPSBvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmoub3duZXJEb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRWaWV3O1xuICAgIHJldHVybiAhIShzY29wZSAmJiBvYmogaW5zdGFuY2VvZiBzY29wZS5FbGVtZW50KTtcbn07XG52YXIgaXNSZXBsYWNlZEVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgc3dpdGNoICh0YXJnZXQudGFnTmFtZSkge1xuICAgICAgICBjYXNlICdJTlBVVCc6XG4gICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgIT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnVklERU8nOlxuICAgICAgICBjYXNlICdBVURJTyc6XG4gICAgICAgIGNhc2UgJ0VNQkVEJzpcbiAgICAgICAgY2FzZSAnT0JKRUNUJzpcbiAgICAgICAgY2FzZSAnQ0FOVkFTJzpcbiAgICAgICAgY2FzZSAnSUZSQU1FJzpcbiAgICAgICAgY2FzZSAnSU1HJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHsgaXNTVkcsIGlzSGlkZGVuLCBpc0VsZW1lbnQsIGlzUmVwbGFjZWRFbGVtZW50IH07XG4iLCJleHBvcnQgdmFyIGdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge307XG4iLCJpbXBvcnQgeyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfSBmcm9tICcuLi9SZXNpemVPYnNlcnZlckJveE9wdGlvbnMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTaXplIH0gZnJvbSAnLi4vUmVzaXplT2JzZXJ2ZXJTaXplJztcbmltcG9ydCB7IERPTVJlY3RSZWFkT25seSB9IGZyb20gJy4uL0RPTVJlY3RSZWFkT25seSc7XG5pbXBvcnQgeyBpc1NWRywgaXNIaWRkZW4gfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWxzL2ZyZWV6ZSc7XG5pbXBvcnQgeyBnbG9iYWwgfSBmcm9tICcuLi91dGlscy9nbG9iYWwnO1xudmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbnZhciBzY3JvbGxSZWdleHAgPSAvYXV0b3xzY3JvbGwvO1xudmFyIHZlcnRpY2FsUmVnZXhwID0gL150Ynx2ZXJ0aWNhbC87XG52YXIgSUUgPSAoL21zaWV8dHJpZGVudC9pKS50ZXN0KGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIHBhcnNlRGltZW5zaW9uID0gZnVuY3Rpb24gKHBpeGVsKSB7IHJldHVybiBwYXJzZUZsb2F0KHBpeGVsIHx8ICcwJyk7IH07XG52YXIgc2l6ZSA9IGZ1bmN0aW9uIChpbmxpbmVTaXplLCBibG9ja1NpemUsIHN3aXRjaFNpemVzKSB7XG4gICAgaWYgKGlubGluZVNpemUgPT09IHZvaWQgMCkgeyBpbmxpbmVTaXplID0gMDsgfVxuICAgIGlmIChibG9ja1NpemUgPT09IHZvaWQgMCkgeyBibG9ja1NpemUgPSAwOyB9XG4gICAgaWYgKHN3aXRjaFNpemVzID09PSB2b2lkIDApIHsgc3dpdGNoU2l6ZXMgPSBmYWxzZTsgfVxuICAgIHJldHVybiBuZXcgUmVzaXplT2JzZXJ2ZXJTaXplKChzd2l0Y2hTaXplcyA/IGJsb2NrU2l6ZSA6IGlubGluZVNpemUpIHx8IDAsIChzd2l0Y2hTaXplcyA/IGlubGluZVNpemUgOiBibG9ja1NpemUpIHx8IDApO1xufTtcbnZhciB6ZXJvQm94ZXMgPSBmcmVlemUoe1xuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IHNpemUoKSxcbiAgICBib3JkZXJCb3hTaXplOiBzaXplKCksXG4gICAgY29udGVudEJveFNpemU6IHNpemUoKSxcbiAgICBjb250ZW50UmVjdDogbmV3IERPTVJlY3RSZWFkT25seSgwLCAwLCAwLCAwKVxufSk7XG52YXIgY2FsY3VsYXRlQm94U2l6ZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBmb3JjZVJlY2FsY3VsYXRpb24pIHtcbiAgICBpZiAoZm9yY2VSZWNhbGN1bGF0aW9uID09PSB2b2lkIDApIHsgZm9yY2VSZWNhbGN1bGF0aW9uID0gZmFsc2U7IH1cbiAgICBpZiAoY2FjaGUuaGFzKHRhcmdldCkgJiYgIWZvcmNlUmVjYWxjdWxhdGlvbikge1xuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIGlmIChpc0hpZGRlbih0YXJnZXQpKSB7XG4gICAgICAgIGNhY2hlLnNldCh0YXJnZXQsIHplcm9Cb3hlcyk7XG4gICAgICAgIHJldHVybiB6ZXJvQm94ZXM7XG4gICAgfVxuICAgIHZhciBjcyA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcbiAgICB2YXIgc3ZnID0gaXNTVkcodGFyZ2V0KSAmJiB0YXJnZXQub3duZXJTVkdFbGVtZW50ICYmIHRhcmdldC5nZXRCQm94KCk7XG4gICAgdmFyIHJlbW92ZVBhZGRpbmcgPSAhSUUgJiYgY3MuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCc7XG4gICAgdmFyIHN3aXRjaFNpemVzID0gdmVydGljYWxSZWdleHAudGVzdChjcy53cml0aW5nTW9kZSB8fCAnJyk7XG4gICAgdmFyIGNhblNjcm9sbFZlcnRpY2FsbHkgPSAhc3ZnICYmIHNjcm9sbFJlZ2V4cC50ZXN0KGNzLm92ZXJmbG93WSB8fCAnJyk7XG4gICAgdmFyIGNhblNjcm9sbEhvcml6b250YWxseSA9ICFzdmcgJiYgc2Nyb2xsUmVnZXhwLnRlc3QoY3Mub3ZlcmZsb3dYIHx8ICcnKTtcbiAgICB2YXIgcGFkZGluZ1RvcCA9IHN2ZyA/IDAgOiBwYXJzZURpbWVuc2lvbihjcy5wYWRkaW5nVG9wKTtcbiAgICB2YXIgcGFkZGluZ1JpZ2h0ID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLnBhZGRpbmdSaWdodCk7XG4gICAgdmFyIHBhZGRpbmdCb3R0b20gPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MucGFkZGluZ0JvdHRvbSk7XG4gICAgdmFyIHBhZGRpbmdMZWZ0ID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLnBhZGRpbmdMZWZ0KTtcbiAgICB2YXIgYm9yZGVyVG9wID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLmJvcmRlclRvcFdpZHRoKTtcbiAgICB2YXIgYm9yZGVyUmlnaHQgPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MuYm9yZGVyUmlnaHRXaWR0aCk7XG4gICAgdmFyIGJvcmRlckJvdHRvbSA9IHN2ZyA/IDAgOiBwYXJzZURpbWVuc2lvbihjcy5ib3JkZXJCb3R0b21XaWR0aCk7XG4gICAgdmFyIGJvcmRlckxlZnQgPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MuYm9yZGVyTGVmdFdpZHRoKTtcbiAgICB2YXIgaG9yaXpvbnRhbFBhZGRpbmcgPSBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodDtcbiAgICB2YXIgdmVydGljYWxQYWRkaW5nID0gcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b207XG4gICAgdmFyIGhvcml6b250YWxCb3JkZXJBcmVhID0gYm9yZGVyTGVmdCArIGJvcmRlclJpZ2h0O1xuICAgIHZhciB2ZXJ0aWNhbEJvcmRlckFyZWEgPSBib3JkZXJUb3AgKyBib3JkZXJCb3R0b207XG4gICAgdmFyIGhvcml6b250YWxTY3JvbGxiYXJUaGlja25lc3MgPSAhY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID8gMCA6IHRhcmdldC5vZmZzZXRIZWlnaHQgLSB2ZXJ0aWNhbEJvcmRlckFyZWEgLSB0YXJnZXQuY2xpZW50SGVpZ2h0O1xuICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclRoaWNrbmVzcyA9ICFjYW5TY3JvbGxWZXJ0aWNhbGx5ID8gMCA6IHRhcmdldC5vZmZzZXRXaWR0aCAtIGhvcml6b250YWxCb3JkZXJBcmVhIC0gdGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aWR0aFJlZHVjdGlvbiA9IHJlbW92ZVBhZGRpbmcgPyBob3Jpem9udGFsUGFkZGluZyArIGhvcml6b250YWxCb3JkZXJBcmVhIDogMDtcbiAgICB2YXIgaGVpZ2h0UmVkdWN0aW9uID0gcmVtb3ZlUGFkZGluZyA/IHZlcnRpY2FsUGFkZGluZyArIHZlcnRpY2FsQm9yZGVyQXJlYSA6IDA7XG4gICAgdmFyIGNvbnRlbnRXaWR0aCA9IHN2ZyA/IHN2Zy53aWR0aCA6IHBhcnNlRGltZW5zaW9uKGNzLndpZHRoKSAtIHdpZHRoUmVkdWN0aW9uIC0gdmVydGljYWxTY3JvbGxiYXJUaGlja25lc3M7XG4gICAgdmFyIGNvbnRlbnRIZWlnaHQgPSBzdmcgPyBzdmcuaGVpZ2h0IDogcGFyc2VEaW1lbnNpb24oY3MuaGVpZ2h0KSAtIGhlaWdodFJlZHVjdGlvbiAtIGhvcml6b250YWxTY3JvbGxiYXJUaGlja25lc3M7XG4gICAgdmFyIGJvcmRlckJveFdpZHRoID0gY29udGVudFdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcgKyB2ZXJ0aWNhbFNjcm9sbGJhclRoaWNrbmVzcyArIGhvcml6b250YWxCb3JkZXJBcmVhO1xuICAgIHZhciBib3JkZXJCb3hIZWlnaHQgPSBjb250ZW50SGVpZ2h0ICsgdmVydGljYWxQYWRkaW5nICsgaG9yaXpvbnRhbFNjcm9sbGJhclRoaWNrbmVzcyArIHZlcnRpY2FsQm9yZGVyQXJlYTtcbiAgICB2YXIgYm94ZXMgPSBmcmVlemUoe1xuICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBzaXplKE1hdGgucm91bmQoY29udGVudFdpZHRoICogZGV2aWNlUGl4ZWxSYXRpbyksIE1hdGgucm91bmQoY29udGVudEhlaWdodCAqIGRldmljZVBpeGVsUmF0aW8pLCBzd2l0Y2hTaXplcyksXG4gICAgICAgIGJvcmRlckJveFNpemU6IHNpemUoYm9yZGVyQm94V2lkdGgsIGJvcmRlckJveEhlaWdodCwgc3dpdGNoU2l6ZXMpLFxuICAgICAgICBjb250ZW50Qm94U2l6ZTogc2l6ZShjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQsIHN3aXRjaFNpemVzKSxcbiAgICAgICAgY29udGVudFJlY3Q6IG5ldyBET01SZWN0UmVhZE9ubHkocGFkZGluZ0xlZnQsIHBhZGRpbmdUb3AsIGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodClcbiAgICB9KTtcbiAgICBjYWNoZS5zZXQodGFyZ2V0LCBib3hlcyk7XG4gICAgcmV0dXJuIGJveGVzO1xufTtcbnZhciBjYWxjdWxhdGVCb3hTaXplID0gZnVuY3Rpb24gKHRhcmdldCwgb2JzZXJ2ZWRCb3gsIGZvcmNlUmVjYWxjdWxhdGlvbikge1xuICAgIHZhciBfYSA9IGNhbGN1bGF0ZUJveFNpemVzKHRhcmdldCwgZm9yY2VSZWNhbGN1bGF0aW9uKSwgYm9yZGVyQm94U2l6ZSA9IF9hLmJvcmRlckJveFNpemUsIGNvbnRlbnRCb3hTaXplID0gX2EuY29udGVudEJveFNpemUsIGRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBfYS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplO1xuICAgIHN3aXRjaCAob2JzZXJ2ZWRCb3gpIHtcbiAgICAgICAgY2FzZSBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMuREVWSUNFX1BJWEVMX0NPTlRFTlRfQk9YOlxuICAgICAgICAgICAgcmV0dXJuIGRldmljZVBpeGVsQ29udGVudEJveFNpemU7XG4gICAgICAgIGNhc2UgUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zLkJPUkRFUl9CT1g6XG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyQm94U2l6ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50Qm94U2l6ZTtcbiAgICB9XG59O1xuZXhwb3J0IHsgY2FsY3VsYXRlQm94U2l6ZSwgY2FsY3VsYXRlQm94U2l6ZXMgfTtcbiIsImltcG9ydCB7IGNhbGN1bGF0ZUJveFNpemVzIH0gZnJvbSAnLi9hbGdvcml0aG1zL2NhbGN1bGF0ZUJveFNpemUnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIFJlc2l6ZU9ic2VydmVyRW50cnkgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyRW50cnkodGFyZ2V0KSB7XG4gICAgICAgIHZhciBib3hlcyA9IGNhbGN1bGF0ZUJveFNpemVzKHRhcmdldCk7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0ID0gYm94ZXMuY29udGVudFJlY3Q7XG4gICAgICAgIHRoaXMuYm9yZGVyQm94U2l6ZSA9IGZyZWV6ZShbYm94ZXMuYm9yZGVyQm94U2l6ZV0pO1xuICAgICAgICB0aGlzLmNvbnRlbnRCb3hTaXplID0gZnJlZXplKFtib3hlcy5jb250ZW50Qm94U2l6ZV0pO1xuICAgICAgICB0aGlzLmRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBmcmVlemUoW2JveGVzLmRldmljZVBpeGVsQ29udGVudEJveFNpemVdKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyRW50cnk7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9O1xuIiwiaW1wb3J0IHsgaXNIaWRkZW4gfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbnZhciBjYWxjdWxhdGVEZXB0aEZvck5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChpc0hpZGRlbihub2RlKSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGRlcHRoICs9IDE7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZGVwdGg7XG59O1xuZXhwb3J0IHsgY2FsY3VsYXRlRGVwdGhGb3JOb2RlIH07XG4iLCJpbXBvcnQgeyByZXNpemVPYnNlcnZlcnMgfSBmcm9tICcuLi91dGlscy9yZXNpemVPYnNlcnZlcnMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9IGZyb20gJy4uL1Jlc2l6ZU9ic2VydmVyRW50cnknO1xuaW1wb3J0IHsgY2FsY3VsYXRlRGVwdGhGb3JOb2RlIH0gZnJvbSAnLi9jYWxjdWxhdGVEZXB0aEZvck5vZGUnO1xuaW1wb3J0IHsgY2FsY3VsYXRlQm94U2l6ZSB9IGZyb20gJy4vY2FsY3VsYXRlQm94U2l6ZSc7XG52YXIgYnJvYWRjYXN0QWN0aXZlT2JzZXJ2YXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGFsbG93ZXN0RGVwdGggPSBJbmZpbml0eTtcbiAgICB2YXIgY2FsbGJhY2tzID0gW107XG4gICAgcmVzaXplT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gcHJvY2Vzc09ic2VydmVyKHJvKSB7XG4gICAgICAgIGlmIChyby5hY3RpdmVUYXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIHJvLmFjdGl2ZVRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiBwcm9jZXNzVGFyZ2V0KG90KSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgUmVzaXplT2JzZXJ2ZXJFbnRyeShvdC50YXJnZXQpO1xuICAgICAgICAgICAgdmFyIHRhcmdldERlcHRoID0gY2FsY3VsYXRlRGVwdGhGb3JOb2RlKG90LnRhcmdldCk7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgb3QubGFzdFJlcG9ydGVkU2l6ZSA9IGNhbGN1bGF0ZUJveFNpemUob3QudGFyZ2V0LCBvdC5vYnNlcnZlZEJveCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RGVwdGggPCBzaGFsbG93ZXN0RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBzaGFsbG93ZXN0RGVwdGggPSB0YXJnZXREZXB0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uIHJlc2l6ZU9ic2VydmVyQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICByby5jYWxsYmFjay5jYWxsKHJvLm9ic2VydmVyLCBlbnRyaWVzLCByby5vYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgICAgICByby5hY3RpdmVUYXJnZXRzLnNwbGljZSgwLCByby5hY3RpdmVUYXJnZXRzLmxlbmd0aCk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBjYWxsYmFja3NfMSA9IGNhbGxiYWNrczsgX2kgPCBjYWxsYmFja3NfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzXzFbX2ldO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhbGxvd2VzdERlcHRoO1xufTtcbmV4cG9ydCB7IGJyb2FkY2FzdEFjdGl2ZU9ic2VydmF0aW9ucyB9O1xuIiwiaW1wb3J0IHsgcmVzaXplT2JzZXJ2ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbmltcG9ydCB7IGNhbGN1bGF0ZURlcHRoRm9yTm9kZSB9IGZyb20gJy4vY2FsY3VsYXRlRGVwdGhGb3JOb2RlJztcbnZhciBnYXRoZXJBY3RpdmVPYnNlcnZhdGlvbnNBdERlcHRoID0gZnVuY3Rpb24gKGRlcHRoKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gcHJvY2Vzc09ic2VydmVyKHJvKSB7XG4gICAgICAgIHJvLmFjdGl2ZVRhcmdldHMuc3BsaWNlKDAsIHJvLmFjdGl2ZVRhcmdldHMubGVuZ3RoKTtcbiAgICAgICAgcm8uc2tpcHBlZFRhcmdldHMuc3BsaWNlKDAsIHJvLnNraXBwZWRUYXJnZXRzLmxlbmd0aCk7XG4gICAgICAgIHJvLm9ic2VydmF0aW9uVGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uIHByb2Nlc3NUYXJnZXQob3QpIHtcbiAgICAgICAgICAgIGlmIChvdC5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZURlcHRoRm9yTm9kZShvdC50YXJnZXQpID4gZGVwdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcm8uYWN0aXZlVGFyZ2V0cy5wdXNoKG90KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvLnNraXBwZWRUYXJnZXRzLnB1c2gob3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IHsgZ2F0aGVyQWN0aXZlT2JzZXJ2YXRpb25zQXREZXB0aCB9O1xuIiwiaW1wb3J0IHsgaGFzQWN0aXZlT2JzZXJ2YXRpb25zIH0gZnJvbSAnLi4vYWxnb3JpdGhtcy9oYXNBY3RpdmVPYnNlcnZhdGlvbnMnO1xuaW1wb3J0IHsgaGFzU2tpcHBlZE9ic2VydmF0aW9ucyB9IGZyb20gJy4uL2FsZ29yaXRobXMvaGFzU2tpcHBlZE9ic2VydmF0aW9ucyc7XG5pbXBvcnQgeyBkZWxpdmVyUmVzaXplTG9vcEVycm9yIH0gZnJvbSAnLi4vYWxnb3JpdGhtcy9kZWxpdmVyUmVzaXplTG9vcEVycm9yJztcbmltcG9ydCB7IGJyb2FkY2FzdEFjdGl2ZU9ic2VydmF0aW9ucyB9IGZyb20gJy4uL2FsZ29yaXRobXMvYnJvYWRjYXN0QWN0aXZlT2JzZXJ2YXRpb25zJztcbmltcG9ydCB7IGdhdGhlckFjdGl2ZU9ic2VydmF0aW9uc0F0RGVwdGggfSBmcm9tICcuLi9hbGdvcml0aG1zL2dhdGhlckFjdGl2ZU9ic2VydmF0aW9uc0F0RGVwdGgnO1xudmFyIHByb2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlcHRoID0gMDtcbiAgICBnYXRoZXJBY3RpdmVPYnNlcnZhdGlvbnNBdERlcHRoKGRlcHRoKTtcbiAgICB3aGlsZSAoaGFzQWN0aXZlT2JzZXJ2YXRpb25zKCkpIHtcbiAgICAgICAgZGVwdGggPSBicm9hZGNhc3RBY3RpdmVPYnNlcnZhdGlvbnMoKTtcbiAgICAgICAgZ2F0aGVyQWN0aXZlT2JzZXJ2YXRpb25zQXREZXB0aChkZXB0aCk7XG4gICAgfVxuICAgIGlmIChoYXNTa2lwcGVkT2JzZXJ2YXRpb25zKCkpIHtcbiAgICAgICAgZGVsaXZlclJlc2l6ZUxvb3BFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gZGVwdGggPiAwO1xufTtcbmV4cG9ydCB7IHByb2Nlc3MgfTtcbiIsInZhciB0cmlnZ2VyO1xudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrcy5zcGxpY2UoMCkuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIGNiKCk7IH0pOyB9O1xudmFyIHF1ZXVlTWljcm9UYXNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICAgIHZhciB0b2dnbGVfMSA9IDA7XG4gICAgICAgIHZhciBlbF8xID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgICAgICB2YXIgY29uZmlnID0geyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH07XG4gICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeSgpOyB9KS5vYnNlcnZlKGVsXzEsIGNvbmZpZyk7XG4gICAgICAgIHRyaWdnZXIgPSBmdW5jdGlvbiAoKSB7IGVsXzEudGV4dENvbnRlbnQgPSBcIlwiLmNvbmNhdCh0b2dnbGVfMSA/IHRvZ2dsZV8xLS0gOiB0b2dnbGVfMSsrKTsgfTtcbiAgICB9XG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIHRyaWdnZXIoKTtcbn07XG5leHBvcnQgeyBxdWV1ZU1pY3JvVGFzayB9O1xuIiwiaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3F1ZXVlTWljcm9UYXNrJztcbnZhciBxdWV1ZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYik7XG4gICAgfSk7XG59O1xuZXhwb3J0IHsgcXVldWVSZXNpemVPYnNlcnZlciB9O1xuIiwiaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgeyBnbG9iYWwgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBxdWV1ZVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi9xdWV1ZVJlc2l6ZU9ic2VydmVyJztcbnZhciB3YXRjaGluZyA9IDA7XG52YXIgaXNXYXRjaGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEhd2F0Y2hpbmc7IH07XG52YXIgQ0FUQ0hfUEVSSU9EID0gMjUwO1xudmFyIG9ic2VydmVyQ29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfTtcbnZhciBldmVudHMgPSBbXG4gICAgJ3Jlc2l6ZScsXG4gICAgJ2xvYWQnLFxuICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAnYW5pbWF0aW9uc3RhcnQnLFxuICAgICdhbmltYXRpb25pdGVyYXRpb24nLFxuICAgICdrZXl1cCcsXG4gICAgJ2tleWRvd24nLFxuICAgICdtb3VzZXVwJyxcbiAgICAnbW91c2Vkb3duJyxcbiAgICAnbW91c2VvdmVyJyxcbiAgICAnbW91c2VvdXQnLFxuICAgICdibHVyJyxcbiAgICAnZm9jdXMnXG5dO1xudmFyIHRpbWUgPSBmdW5jdGlvbiAodGltZW91dCkge1xuICAgIGlmICh0aW1lb3V0ID09PSB2b2lkIDApIHsgdGltZW91dCA9IDA7IH1cbiAgICByZXR1cm4gRGF0ZS5ub3coKSArIHRpbWVvdXQ7XG59O1xudmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc2NoZWR1bGUoKTsgfTtcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAodGltZW91dCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGltZW91dCA9PT0gdm9pZCAwKSB7IHRpbWVvdXQgPSBDQVRDSF9QRVJJT0Q7IH1cbiAgICAgICAgaWYgKHNjaGVkdWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgIHZhciB1bnRpbCA9IHRpbWUodGltZW91dCk7XG4gICAgICAgIHF1ZXVlUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRzSGF2ZVJlc2l6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHNIYXZlUmVzaXplZCA9IHByb2Nlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB1bnRpbCAtIHRpbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50c0hhdmVSZXNpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJ1bigxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucnVuKHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIHRoaXMucnVuKCk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjYiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLm9ic2VydmVyICYmIF90aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgb2JzZXJ2ZXJDb25maWcpOyB9O1xuICAgICAgICBkb2N1bWVudC5ib2R5ID8gY2IoKSA6IGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgY2IpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5saXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUoKTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBfdGhpcy5saXN0ZW5lciwgdHJ1ZSk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5zdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyICYmIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIGdsb2JhbC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIF90aGlzLmxpc3RlbmVyLCB0cnVlKTsgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbnZhciBzY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7XG52YXIgdXBkYXRlQ291bnQgPSBmdW5jdGlvbiAobikge1xuICAgICF3YXRjaGluZyAmJiBuID4gMCAmJiBzY2hlZHVsZXIuc3RhcnQoKTtcbiAgICB3YXRjaGluZyArPSBuO1xuICAgICF3YXRjaGluZyAmJiBzY2hlZHVsZXIuc3RvcCgpO1xufTtcbmV4cG9ydCB7IHNjaGVkdWxlciwgdXBkYXRlQ291bnQgfTtcbiIsImltcG9ydCB7IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB9IGZyb20gJy4vUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zJztcbmltcG9ydCB7IGNhbGN1bGF0ZUJveFNpemUgfSBmcm9tICcuL2FsZ29yaXRobXMvY2FsY3VsYXRlQm94U2l6ZSc7XG5pbXBvcnQgeyBpc1NWRywgaXNSZXBsYWNlZEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2VsZW1lbnQnO1xudmFyIHNraXBOb3RpZnlPbkVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuICFpc1NWRyh0YXJnZXQpXG4gICAgICAgICYmICFpc1JlcGxhY2VkRWxlbWVudCh0YXJnZXQpXG4gICAgICAgICYmIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5kaXNwbGF5ID09PSAnaW5saW5lJztcbn07XG52YXIgUmVzaXplT2JzZXJ2YXRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCwgb2JzZXJ2ZWRCb3gpIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMub2JzZXJ2ZWRCb3ggPSBvYnNlcnZlZEJveCB8fCBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMuQ09OVEVOVF9CT1g7XG4gICAgICAgIHRoaXMubGFzdFJlcG9ydGVkU2l6ZSA9IHtcbiAgICAgICAgICAgIGlubGluZVNpemU6IDAsXG4gICAgICAgICAgICBibG9ja1NpemU6IDBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgUmVzaXplT2JzZXJ2YXRpb24ucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZUJveFNpemUodGhpcy50YXJnZXQsIHRoaXMub2JzZXJ2ZWRCb3gsIHRydWUpO1xuICAgICAgICBpZiAoc2tpcE5vdGlmeU9uRWxlbWVudCh0aGlzLnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFJlcG9ydGVkU2l6ZSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdFJlcG9ydGVkU2l6ZS5pbmxpbmVTaXplICE9PSBzaXplLmlubGluZVNpemVcbiAgICAgICAgICAgIHx8IHRoaXMubGFzdFJlcG9ydGVkU2l6ZS5ibG9ja1NpemUgIT09IHNpemUuYmxvY2tTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2YXRpb24gfTtcbiIsInZhciBSZXNpemVPYnNlcnZlckRldGFpbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJEZXRhaWwocmVzaXplT2JzZXJ2ZXIsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFyZ2V0cyA9IFtdO1xuICAgICAgICB0aGlzLnNraXBwZWRUYXJnZXRzID0gW107XG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcjtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJEZXRhaWw7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJEZXRhaWwgfTtcbiIsImltcG9ydCB7IHNjaGVkdWxlciwgdXBkYXRlQ291bnQgfSBmcm9tICcuL3V0aWxzL3NjaGVkdWxlcic7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZhdGlvbiB9IGZyb20gJy4vUmVzaXplT2JzZXJ2YXRpb24nO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJEZXRhaWwgfSBmcm9tICcuL1Jlc2l6ZU9ic2VydmVyRGV0YWlsJztcbmltcG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9IGZyb20gJy4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbnZhciBvYnNlcnZlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgZ2V0T2JzZXJ2YXRpb25JbmRleCA9IGZ1bmN0aW9uIChvYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JzZXJ2YXRpb25UYXJnZXRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChvYnNlcnZhdGlvblRhcmdldHNbaV0udGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn07XG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XG4gICAgfVxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5jb25uZWN0ID0gZnVuY3Rpb24gKHJlc2l6ZU9ic2VydmVyLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZGV0YWlsID0gbmV3IFJlc2l6ZU9ic2VydmVyRGV0YWlsKHJlc2l6ZU9ic2VydmVyLCBjYWxsYmFjayk7XG4gICAgICAgIG9ic2VydmVyTWFwLnNldChyZXNpemVPYnNlcnZlciwgZGV0YWlsKTtcbiAgICB9O1xuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5vYnNlcnZlID0gZnVuY3Rpb24gKHJlc2l6ZU9ic2VydmVyLCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRldGFpbCA9IG9ic2VydmVyTWFwLmdldChyZXNpemVPYnNlcnZlcik7XG4gICAgICAgIHZhciBmaXJzdE9ic2VydmF0aW9uID0gZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gICAgICAgIGlmIChnZXRPYnNlcnZhdGlvbkluZGV4KGRldGFpbC5vYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCkgPCAwKSB7XG4gICAgICAgICAgICBmaXJzdE9ic2VydmF0aW9uICYmIHJlc2l6ZU9ic2VydmVycy5wdXNoKGRldGFpbCk7XG4gICAgICAgICAgICBkZXRhaWwub2JzZXJ2YXRpb25UYXJnZXRzLnB1c2gobmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCwgb3B0aW9ucyAmJiBvcHRpb25zLmJveCkpO1xuICAgICAgICAgICAgdXBkYXRlQ291bnQoMSk7XG4gICAgICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uIChyZXNpemVPYnNlcnZlciwgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBkZXRhaWwgPSBvYnNlcnZlck1hcC5nZXQocmVzaXplT2JzZXJ2ZXIpO1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRPYnNlcnZhdGlvbkluZGV4KGRldGFpbC5vYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCk7XG4gICAgICAgIHZhciBsYXN0T2JzZXJ2YXRpb24gPSBkZXRhaWwub2JzZXJ2YXRpb25UYXJnZXRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGxhc3RPYnNlcnZhdGlvbiAmJiByZXNpemVPYnNlcnZlcnMuc3BsaWNlKHJlc2l6ZU9ic2VydmVycy5pbmRleE9mKGRldGFpbCksIDEpO1xuICAgICAgICAgICAgZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdXBkYXRlQ291bnQoLTEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZGV0YWlsID0gb2JzZXJ2ZXJNYXAuZ2V0KHJlc2l6ZU9ic2VydmVyKTtcbiAgICAgICAgZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKG90KSB7IHJldHVybiBfdGhpcy51bm9ic2VydmUocmVzaXplT2JzZXJ2ZXIsIG90LnRhcmdldCk7IH0pO1xuICAgICAgICBkZXRhaWwuYWN0aXZlVGFyZ2V0cy5zcGxpY2UoMCwgZGV0YWlsLmFjdGl2ZVRhcmdldHMubGVuZ3RoKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyIH07XG4iLCJpbXBvcnQgeyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIgfSBmcm9tICcuL1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcic7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2VsZW1lbnQnO1xudmFyIFJlc2l6ZU9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlcihjYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc2l6ZU9ic2VydmVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVzaXplT2JzZXJ2ZXInOiBUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5jb25uZWN0KHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdSZXNpemVPYnNlcnZlcic6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRWxlbWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIub2JzZXJ2ZSh0aGlzLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAndW5vYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAndW5vYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRWxlbWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIudW5vYnNlcnZlKHRoaXMsIHRhcmdldCk7XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlci5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmRpc2Nvbm5lY3QodGhpcyk7XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdmdW5jdGlvbiBSZXNpemVPYnNlcnZlciAoKSB7IFtwb2x5ZmlsbCBjb2RlXSB9JztcbiAgICB9O1xuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcbn0oKSk7XG5leHBvcnQgeyBSZXNpemVPYnNlcnZlciB9O1xuIl0sIm5hbWVzIjpbImNsYXNzTmFtZXMiLCJpIiwiaW5uZXIiLCJtb2R1bGUiLCJvIiwibiIsInQiLCJ1IiwiQiIsInIiLCJmIiwiYyIsImUiLCJfIiwiRiIsInEiLCJrIiwidyIsImciLCJsIiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJzaXplIiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiZXhwb3J0cyIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsImluamVjdExpbmsiLCJvcHRpb25zIiwiaGVhZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5IiwidmFsdWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwicGF0aCIsIkFycmF5IiwibWFwIiwiZWwiLCJuZXdQYXRoIiwiZmlsdGVyIiwiaXNWYWx1ZSIsImpvaW4iLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJub29wIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJnZXQiLCJkZWZWYWx1ZSIsInBhdGhBcnJheSIsIm1hdGNoIiwicHJldk9iaiIsInNldCIsImxlbmd0aCIsImhleFRvUmdiIiwiaGV4IiwiY2hhcnMiLCJzbGljZSIsInNwbGl0IiwidmFsIiwiZXhlYyIsInBhcnNlSW50IiwiYiIsImlzSnNvblNhbWUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlcnkiLCJhcnIiLCJpc1ZhbGlkVGVtcGxhdGUiLCJkYXRhIiwicmdiVG9SZ2JhIiwicmdiIiwiYWxwaGEiLCJyZXBsYWNlIiwiZGV2aWNlcyIsIkJSRUFLUE9JTlRTIiwibW9iaWxlIiwidGFibGV0IiwibGFwdG9wIiwiZGVza3RvcCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJvbk9wZW4iLCJvbkF1dG9PcGVuIiwiaXNPcGVuIiwic2V0SXNPcGVuIiwidXNlU3RhdGUiLCJ0aW1lclJlZiIsInVzZVJlZiIsImNsZWFyIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50Iiwib25Ub2dnbGUiLCJwcmV2IiwidXNlRWZmZWN0Iiwic2V0VGltZW91dCIsInMiLCJhIiwiU3RhdGUiLCJjcmVhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiY2hpbGRyZW4iLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsImlkIiwicmVmIiwic3RhdGUiLCJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsInByZWFjdFJlbmRlciIsImNsb25lRWxlbWVudCIsInVzZUN1cnJlbnRTdGF0ZSIsInVzZUNvbnRleHQiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsImJvZHkiLCJyZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImNvbG9yIiwiZm9udFNpemUiLCJwcm9wS2V5IiwicHJvcFZhbHVlIiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwiZGlzcGxheSIsImJvcmRlclN0eWxlIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZENvbG9yT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJ0ZXh0RGVjb3JhdGlvbiIsImlzVmFsaWRSdWxlIiwicnVsZSIsInVzZVBhcnNlUnVsZXMiLCJEaXNwbGF5VGV4dCIsInJlc3QiLCJmb3JtYXRWYWx1ZSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwidXNlVG9nZ2xlIiwiQ2xvc2VJY29uIiwieG1sbnMiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZCIsImZpbGwiLCJHaWZ0SWNvbiIsImZpbGxSdWxlIiwiYW5pbWF0aW9uc01hcCIsImFuaW1hdGlvbnMiLCJmYWRlIiwicHVsc2UiLCJ3aWdnbGUiLCJncmFkaWVudCIsInVzZUdpZnRSdWxlcyIsImRldmljZVN0YXRlIiwiZnVsbEFuaW1hdGlvbnMiLCJoYXNJY29uIiwiaWNvbiIsImFycm93UnVsZXMiLCJsZWZ0IiwiY29udGFpbmVyIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvZHlSdWxlcyIsImFsbEFuaW1hdGlvbnMiLCJhbmltYXRpb24iLCJiYWNrZ3JvdW5kU3R5bGVzIiwiZ3JhZGllbnRDb2xvciIsImJhY2tncm91bmQiLCJpY29uUnVsZXMiLCJiYWNrZ3JvdW5kT3B0aW9ucyIsImJvcmRlck9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJ1c2VMaWZlY3ljbGUiLCJjeWNsZXMiLCJvbk1vdW50Iiwib25EZXN0cm95Iiwib25DbGljayIsIlNpbXBsZUdpZnQiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJvb3RSZWYiLCJsZWdhbElzT3BlbiIsInRvZ2dsZUxlZ2FsSXNPcGVuIiwib25DbGlja01ldHJpY3MiLCJzdHlsZXMiLCJmYWRlaW4iLCJsZWdhbEJvcmRlciIsIl9qc3hzIiwiY2xhc3NOYW1lIiwibGVnYWxPcGVuIiwic3R5bGUiLCJpY29uVGFyZ2V0IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsR2FwIiwibGVnYWwiLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYm9keUlubmVyIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwiaGFzVGl0bGVJY29uIiwidGl0bGUiLCJwcm9tb3Rpb24iLCJoZWFkSWNvbiIsImhlYWRUaXRsZSIsImNoaWxkIiwic3dpdGNoVGV4dEFsaWduVG9GbGV4IiwidGV4dEFsaWduIiwiY2VudGVyIiwicmlnaHQiLCJMaW5lIiwidXNlUG9wdXAiLCJzaG93IiwiaGlkZSIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJTaW1wbGVQb3B1cCIsImFsaWduSXRlbXMiLCJhbGlnbiIsImJ1dHRvblJ1bGVzIiwianVzdGlmeUNvbnRlbnQiLCJsZWdhbFJ1bGVzIiwib3ZlcmxheSIsIndyYXBwZXIiLCJjb250ZW50IiwiQm9udXMiLCJoZWFkZXIiLCJDb21wbGV4UG9wdXAiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJFeHByZXNzUG9wdXAiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsInJvd0ZpcnN0Iiwicm93U2Vjb25kIiwiYm9va21ha2VyIiwibGVnYWxJbmZvIiwibGVnYWxJbmZvQnV0dG9uIiwib3BlblRleHQiLCJjbG9zZVRleHQiLCJUZXh0IiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJ2YWx1ZU9uZSIsImNvZWYiLCJjb2VmSGVhZCIsImNvZWZWYWx1ZSIsInZhbHVlWCIsIm9kZFJldmVyc2UiLCJ2YWx1ZVR3byIsIk1hdGNoZXNPbmVUd28iLCJ0aXRsZUxhYmVsIiwidGl0bGVWYWx1ZSIsInRlYW0xTmFtZSIsInRlYW1WYWx1ZSIsInZhbHVlMSIsInRlYW0yTmFtZSIsInZhbHVlMiIsInVzZUFuaW1hdGVkTGlzdCIsInNsaWRlcyIsIml0ZW1zQ291bnQiLCJhbmltYXRlZElkeCIsInNldEFuaW1hdGVkSWR4IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJnb05leHQiLCJ0aW1lb3V0IiwiREVGQVVMVF9BTklNQVRJT05fU1BFRUQiLCJXaWRlQ2FyZCIsImdldENoaWxkIiwibWF0Y2hlcyIsIm1hdGNoZXNPbmVUd28iLCJzbGlkZXNMaXN0IiwiQm9vbGVhbiIsInNsaWRlIiwiYW5pbWF0aW9uTmFtZSIsImN1cnJlbnRTbGlkZSIsInNsaWRlUnVsZXMiLCJiYWNrZ3JvdW5kUnVsZXMiLCJoYXNDdXN0b21CYWNrZ3JvdW5kIiwibW9kaWZ5U3RhdGUiLCJkZXZpY2VzTGlzdCIsIm5ld1N0YXRlIiwiUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zIiwiUmVzaXplT2JzZXJ2ZXJTaXplIiwiRE9NUmVjdFJlYWRPbmx5IiwieSIsIlJlc2l6ZU9ic2VydmVyRW50cnkiLCJjYWxsYmFja3MiLCJTY2hlZHVsZXIiLCJSZXNpemVPYnNlcnZhdGlvbiIsIlJlc2l6ZU9ic2VydmVyRGV0YWlsIiwiUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEtBQUMsV0FBWTtBQUdaLFVBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsZUFBU0EsY0FBYTtBQUNyQixZQUFJLFVBQVUsQ0FBQTtBQUVkLGlCQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLGNBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLGNBQUksQ0FBQztBQUFLO0FBRVYsY0FBSSxVQUFVLE9BQU87QUFFckIsY0FBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELG9CQUFRLEtBQUssR0FBRztBQUFBLFVBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FB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QWUsVUFBVSxVQUFVLFNBQVUsUUFBUSxTQUFTO0FBQzFELFVBQUksVUFBVSxXQUFXLEdBQUc7QUFDeEIsY0FBTSxJQUFJLFVBQVUsMkZBQTJGO0FBQUEsTUFDbEg7QUFDRCxVQUFJLENBQUMsVUFBVSxNQUFNLEdBQUc7QUFDcEIsY0FBTSxJQUFJLFVBQVUsc0ZBQXNGO0FBQUEsTUFDN0c7QUFDRCwrQkFBeUIsUUFBUSxNQUFNLFFBQVEsT0FBTztBQUFBLElBQzlEO0FBQ0ksSUFBQUEsZ0JBQWUsVUFBVSxZQUFZLFNBQVUsUUFBUTtBQUNuRCxVQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGNBQU0sSUFBSSxVQUFVLDZGQUE2RjtBQUFBLE1BQ3BIO0FBQ0QsVUFBSSxDQUFDLFVBQVUsTUFBTSxHQUFHO0FBQ3BCLGNBQU0sSUFBSSxVQUFVLHdGQUF3RjtBQUFBLE1BQy9HO0FBQ0QsK0JBQXlCLFVBQVUsTUFBTSxNQUFNO0FBQUEsSUFDdkQ7QUFDSSxJQUFBQSxnQkFBZSxVQUFVLGFBQWEsV0FBWTtBQUM5QywrQkFBeUIsV0FBVyxJQUFJO0FBQUEsSUFDaEQ7QUFDSSxJQUFBQSxnQkFBZSxXQUFXLFdBQVk7QUFDbEMsYUFBTztBQUFBLElBQ2Y7QUFDSSxXQUFPQTtBQUFBLEVBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCwxMDMsMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2Ml19