@secrecy/lib 1.0.0-dev.45 → 1.0.0-dev.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/BaseClient.js +1 -1
  2. package/dist/client/convert/node.js +5 -1
  3. package/dist/client/index.js +78 -75
  4. package/dist/client/types/Node.js +1 -1
  5. package/dist/client/types/selectors.js +5 -1
  6. package/dist/index.js +1 -1
  7. package/dist/{BaseClient.d.ts → src/BaseClient.d.ts} +0 -4
  8. package/dist/{PopupTools.d.ts → src/PopupTools.d.ts} +0 -0
  9. package/dist/{ZeusThunder.d.ts → src/ZeusThunder.d.ts} +0 -0
  10. package/dist/{cache.d.ts → src/cache.d.ts} +0 -0
  11. package/dist/{client → src/client}/admin/index.d.ts +0 -0
  12. package/dist/{client → src/client}/convert/file.d.ts +0 -0
  13. package/dist/{client → src/client}/convert/mail.d.ts +0 -0
  14. package/dist/{client → src/client}/convert/node.d.ts +0 -0
  15. package/dist/{client → src/client}/helpers.d.ts +0 -0
  16. package/dist/{client → src/client}/index.d.ts +3 -4
  17. package/dist/{client → src/client}/storage.d.ts +0 -0
  18. package/dist/{client → src/client}/types/File.d.ts +0 -0
  19. package/dist/{client → src/client}/types/Inputs.d.ts +0 -0
  20. package/dist/{client → src/client}/types/Node.d.ts +5 -0
  21. package/dist/{client → src/client}/types/UserAppNotifications.d.ts +0 -0
  22. package/dist/{client → src/client}/types/UserAppSettings.d.ts +0 -0
  23. package/dist/{client → src/client}/types/index.d.ts +0 -0
  24. package/dist/{client → src/client}/types/selectors.d.ts +16 -0
  25. package/dist/{crypto → src/crypto}/file.d.ts +0 -0
  26. package/dist/{crypto → src/crypto}/index.d.ts +0 -0
  27. package/dist/{error.d.ts → src/error.d.ts} +0 -0
  28. package/dist/src/index.d.ts +12 -0
  29. package/dist/{minify → src/minify}/index.d.ts +0 -0
  30. package/dist/{minify → src/minify}/lz4.d.ts +0 -0
  31. package/dist/{sodium.d.ts → src/sodium.d.ts} +0 -0
  32. package/dist/{utils → src/utils}/store-buddy.d.ts +0 -0
  33. package/dist/{utils → src/utils}/time.d.ts +0 -0
  34. package/dist/{utils → src/utils}/utils.d.ts +0 -0
  35. package/dist/{worker → src/worker}/__mock__/sodium.worker.d.ts +0 -0
  36. package/dist/{worker → src/worker}/md5.d.ts +0 -0
  37. package/dist/{worker → src/worker}/sodium.d.ts +0 -0
  38. package/dist/{worker → src/worker}/workerCodes.d.ts +0 -0
  39. package/dist/{zeus → src/zeus}/const.d.ts +0 -0
  40. package/dist/{zeus → src/zeus}/index.d.ts +2431 -607
  41. package/dist/zeus/const.js +16 -12
  42. package/dist/zeus/index.js +71 -47
  43. package/package.json +17 -16
  44. package/dist/index.d.ts +0 -12
@@ -27,6 +27,7 @@ import { decode } from "jsonwebtoken"; // import { md5 } from "../worker/index.j
27
27
  // import { firstValueFrom, of } from "rxjs";
28
28
 
29
29
  import { serialize } from "bson";
30
+ import { getStorage } from "./storage";
30
31
 
31
32
  const encryptName = async (name, nameKey) => {
32
33
  const {
@@ -51,13 +52,13 @@ export class SecrecyClient extends BaseClient {
51
52
 
52
53
  let node = nodesCache.get(nodeId);
53
54
 
54
- if (!node || !("children" in node)) {
55
+ if (!node) {
55
56
  await this.node({
56
57
  id: nodeId
57
58
  });
58
59
  node = nodesCache.get(nodeId);
59
60
 
60
- if (!node || !("children" in node)) {
61
+ if (!node) {
61
62
  return null;
62
63
  }
63
64
  }
@@ -71,10 +72,10 @@ export class SecrecyClient extends BaseClient {
71
72
  return {
72
73
  id: node.id,
73
74
  nameKey: sodium.to_hex(encryptCryptoBox(sodium.from_hex(nameKey), publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey)),
74
- files: node.history.map(f => ({
75
+ files: "history" in node ? node.history.map(f => ({
75
76
  id: f.id,
76
77
  key: sodium.to_hex(encryptCryptoBox(sodium.from_hex(f.key), publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey))
77
- }))
78
+ })) : []
78
79
  };
79
80
  };
80
81
 
@@ -1943,56 +1944,10 @@ export class SecrecyClient extends BaseClient {
1943
1944
  };
1944
1945
  }
1945
1946
 
1946
- async folderSize(_ref23) {
1947
- let {
1948
- folderId
1949
- } = _ref23;
1950
- const {
1951
- folderSize
1952
- } = await this.client("query", {
1953
- scalars: {
1954
- BigInt: {
1955
- decode: e => BigInt(e),
1956
- encode: e => e.toString()
1957
- }
1958
- }
1959
- })({
1960
- folderSize: [{
1961
- folderId
1962
- }, {
1963
- "...on ErrorAccessDenied": {
1964
- __typename: true,
1965
- message: true
1966
- },
1967
- "...on FolderSizeResponse": {
1968
- __typename: true,
1969
- size: true,
1970
- sizeBefore: true
1971
- }
1972
- }]
1973
- });
1974
-
1975
- if (!folderSize) {
1976
- return null;
1977
- }
1978
-
1979
- if (folderSize.__typename === "ErrorAccessDenied") {
1980
- return folderSize;
1981
- }
1982
-
1983
- return {
1984
- __typename: "SuccessResponse",
1985
- data: {
1986
- size: BigInt(folderSize.size),
1987
- sizeBefore: BigInt(folderSize.sizeBefore)
1988
- }
1989
- };
1990
- }
1991
-
1992
- async deleteMail(_ref24) {
1947
+ async deleteMail(_ref23) {
1993
1948
  let {
1994
1949
  mailId
1995
- } = _ref24;
1950
+ } = _ref23;
1996
1951
  const {
1997
1952
  deleteMail
1998
1953
  } = await this.client("mutation")({
@@ -2024,14 +1979,14 @@ export class SecrecyClient extends BaseClient {
2024
1979
  };
2025
1980
  }
2026
1981
 
2027
- async saveInCloud(_ref25) {
1982
+ async saveInCloud(_ref24) {
2028
1983
  var _node$parent;
2029
1984
 
2030
1985
  let {
2031
1986
  fileId,
2032
1987
  name,
2033
1988
  nodeId
2034
- } = _ref25;
1989
+ } = _ref24;
2035
1990
 
2036
1991
  if (nodeId && !nodesCache.has(nodeId)) {
2037
1992
  await this.node({
@@ -2172,20 +2127,20 @@ export class SecrecyClient extends BaseClient {
2172
2127
  }
2173
2128
 
2174
2129
  const node = await gqlNodeToExternalNodeFull(saveInCloud.saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
2175
- const me = (_node$parent = node.parent) == null ? void 0 : _node$parent.users.find(_ref26 => {
2176
- let [u] = _ref26;
2130
+ const me = (_node$parent = node.parent) == null ? void 0 : _node$parent.users.find(_ref25 => {
2131
+ let [u] = _ref25;
2177
2132
  return u.publicKey === _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
2178
2133
  });
2179
2134
 
2180
2135
  if (me && ["admin", "write"].includes(me[1])) {
2181
2136
  var _node$parent$users$fi, _node$parent2;
2182
2137
 
2183
- const others = (_node$parent$users$fi = (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.users.filter(_ref27 => {
2184
- let [u] = _ref27;
2138
+ const others = (_node$parent$users$fi = (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.users.filter(_ref26 => {
2139
+ let [u] = _ref26;
2185
2140
  return u.publicKey !== _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
2186
2141
  })) != null ? _node$parent$users$fi : [];
2187
- await Promise.all(others.map(_ref28 => {
2188
- let [u, rights] = _ref28;
2142
+ await Promise.all(others.map(_ref27 => {
2143
+ let [u, rights] = _ref27;
2189
2144
  return this.shareNode({
2190
2145
  nodeId: node.id,
2191
2146
  rights,
@@ -2200,11 +2155,11 @@ export class SecrecyClient extends BaseClient {
2200
2155
  };
2201
2156
  }
2202
2157
 
2203
- async dbGet(_ref29) {
2158
+ async dbGet(_ref28) {
2204
2159
  let {
2205
2160
  field,
2206
2161
  userId
2207
- } = _ref29;
2162
+ } = _ref28;
2208
2163
  const {
2209
2164
  dbGet
2210
2165
  } = await this.client("query")({
@@ -2253,11 +2208,11 @@ export class SecrecyClient extends BaseClient {
2253
2208
  };
2254
2209
  }
2255
2210
 
2256
- async dbSet(_ref30) {
2211
+ async dbSet(_ref29) {
2257
2212
  let {
2258
2213
  value,
2259
2214
  userId
2260
- } = _ref30;
2215
+ } = _ref29;
2261
2216
 
2262
2217
  if (typeof value !== "object") {
2263
2218
  throw new Error("value should be an object including fields you want to update.");
@@ -2307,11 +2262,11 @@ export class SecrecyClient extends BaseClient {
2307
2262
  };
2308
2263
  }
2309
2264
 
2310
- async dbSearch(_ref31) {
2265
+ async dbSearch(_ref30) {
2311
2266
  let {
2312
2267
  search,
2313
2268
  field
2314
- } = _ref31;
2269
+ } = _ref30;
2315
2270
  const {
2316
2271
  dbSearch
2317
2272
  } = await this.client("query", {
@@ -2544,14 +2499,14 @@ export class SecrecyClient extends BaseClient {
2544
2499
  };
2545
2500
  }
2546
2501
 
2547
- async createDraftMail(_ref32) {
2502
+ async createDraftMail(_ref31) {
2548
2503
  let {
2549
2504
  body,
2550
2505
  subject,
2551
2506
  files,
2552
2507
  recipientsIds,
2553
2508
  replyTo
2554
- } = _ref32;
2509
+ } = _ref31;
2555
2510
  const hashKey = sodium.randombytes_buf(sodium.crypto_generichash_KEYBYTES, "hex");
2556
2511
  const hash = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, JSON.stringify({
2557
2512
  body,
@@ -2637,13 +2592,13 @@ export class SecrecyClient extends BaseClient {
2637
2592
  };
2638
2593
  }
2639
2594
 
2640
- async fileContent(_ref33) {
2595
+ async fileContent(_ref32) {
2641
2596
  let {
2642
2597
  fileId,
2643
2598
  onDownloadProgress,
2644
2599
  progressDecrypt,
2645
2600
  signal
2646
- } = _ref33;
2601
+ } = _ref32;
2647
2602
  const {
2648
2603
  fileContent
2649
2604
  } = await this.client("query", {
@@ -2814,10 +2769,10 @@ export class SecrecyClient extends BaseClient {
2814
2769
  };
2815
2770
  }
2816
2771
 
2817
- async readMail(_ref34) {
2772
+ async readMail(_ref33) {
2818
2773
  let {
2819
2774
  mailId
2820
- } = _ref34;
2775
+ } = _ref33;
2821
2776
  const {
2822
2777
  readMail
2823
2778
  } = await this.client("mutation")({
@@ -2869,10 +2824,10 @@ export class SecrecyClient extends BaseClient {
2869
2824
  };
2870
2825
  }
2871
2826
 
2872
- async unreadMail(_ref35) {
2827
+ async unreadMail(_ref34) {
2873
2828
  let {
2874
2829
  mailId
2875
- } = _ref35;
2830
+ } = _ref34;
2876
2831
  const {
2877
2832
  unreadMail
2878
2833
  } = await this.client("mutation")({
@@ -2967,6 +2922,54 @@ export class SecrecyClient extends BaseClient {
2967
2922
  };
2968
2923
  }
2969
2924
 
2925
+ async getJwt() {
2926
+ if (this.jwtDecoded.exp && this.jwtDecoded.exp * 1000 < Date.now()) {
2927
+ return this.jwt;
2928
+ }
2929
+
2930
+ const {
2931
+ getJwt
2932
+ } = await this.client("query")({
2933
+ getJwt: [{
2934
+ includeEmail: !!this.jwtDecoded.email
2935
+ }, {
2936
+ "...on ErrorAccessDenied": {
2937
+ __typename: true,
2938
+ message: true
2939
+ },
2940
+ "...on JwtResponse": {
2941
+ __typename: true,
2942
+ jwt: true
2943
+ }
2944
+ }]
2945
+ });
2946
+
2947
+ if (!getJwt) {
2948
+ return this.jwt;
2949
+ }
2950
+
2951
+ if (getJwt.__typename === "ErrorAccessDenied") {
2952
+ throw new Error(getJwt.message);
2953
+ }
2954
+
2955
+ this.jwt = getJwt.jwt;
2956
+ this.jwtDecoded = decode(getJwt.jwt);
2957
+ const sessionStorage = getStorage(true);
2958
+ const localStorage = getStorage(false);
2959
+ const sessionJwt = sessionStorage.jwt.load();
2960
+ const localJwt = localStorage.jwt.load();
2961
+
2962
+ if (sessionJwt) {
2963
+ sessionStorage.jwt.save(getJwt.jwt);
2964
+ }
2965
+
2966
+ if (localJwt) {
2967
+ localStorage.jwt.save(getJwt.jwt);
2968
+ }
2969
+
2970
+ return getJwt.jwt;
2971
+ }
2972
+
2970
2973
  async updateAppSettings(settings) {
2971
2974
  const {
2972
2975
  updateAppSettings
@@ -3203,4 +3206,4 @@ export class SecrecyClient extends BaseClient {
3203
3206
  }
3204
3207
 
3205
3208
  }
3206
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJreSIsImF4aW9zIiwiQmFzZUNsaWVudCIsIm5vZGVzQ2FjaGUiLCJmaWxlc0NhY2hlIiwidXNlcnNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImVuY3J5cHRTZWNyZXRzdHJlYW0iLCJjb21wcmVzcyIsInVuY29tcHJlc3MiLCJncWxOb2RlRnVsbFRvSW50ZXJuYWxGdWxsIiwiZ3FsTm9kZVRvRXh0ZXJuYWwiLCJncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsIiwiaW50ZXJuYWxOb2RlVG9Ob2RlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImZpbGVTZWxlY3RvciIsIm1haWxTZWxlY3RvciIsIm5vZGVGdWxsU2VsZWN0b3IiLCJub2RlU2VsZWN0b3IiLCJjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCIsImRlY29kZSIsInNlcmlhbGl6ZSIsImVuY3J5cHROYW1lIiwibmFtZSIsIm5hbWVLZXkiLCJkYXRhIiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsIm5hbWVFbmNyeXB0ZWQiLCJ0b19oZXgiLCJTZWNyZWN5Q2xpZW50IiwiY29uc3RydWN0b3IiLCJ1YVNlc3Npb24iLCJ1YUtleXMiLCJ1YUp3dCIsImVudiIsInBlck5vZGUiLCJub2RlSWQiLCJwdWJsaWNLZXkiLCJub2RlIiwiZ2V0IiwiaWQiLCJhY2Nlc3MiLCJwcml2YXRlS2V5IiwiZmlsZXMiLCJoaXN0b3J5IiwibWFwIiwiZiIsImtleSIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwicmVxIiwidXNlciIsInVzZXJJZCIsIndpdGhQdWJsaWNLZXkiLCJfX3R5cGVuYW1lIiwiRXJyb3IiLCJyZWNpcGllbnRzRmlsZXMiLCJBcnJheSIsImZpbGVJbkhpc3RvcnkiLCJmaWxlIiwicHVzaCIsImZpbGVLZXkiLCJyZWNpcGllbnRJZCIsImp3dCIsImp3dERlY29kZWQiLCJhcHBVc2VySWQiLCJzdWIiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibWVzc2FnZSIsImZpbmQiLCJ1c2VycyIsImZpbHRlciIsImlucHV0Iiwic2hhcmVGaWxlSW5IaXN0b3J5IiwicmVzdWx0IiwidXBsb2FkRmlsZSIsImVuY3J5cHRQcm9ncmVzcyIsInVwbG9hZFByb2dyZXNzIiwic2lnbmFsIiwiZmlsZUJ1ZmZlciIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5Iiwic2NhbGFycyIsIkpzb24iLCJlbmNvZGUiLCJlIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcnNlIiwiRGF0ZVRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJCaWdJbnQiLCJ0b1N0cmluZyIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJpbmRleCIsImNodW5rIiwiTnVtYmVyIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwidmFsdWUiLCJlbnRyaWVzIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkRmlsZUluQ2xvdWQiLCJzYXZlSW5DbG91ZCIsImxvZ291dCIsInNlc3Npb25JZCIsImNsZWFyIiwiY3JlYXRlRm9sZGVyIiwicGFyZW50Rm9sZGVySWQiLCJlbmNyeXB0ZWROYW1lIiwiZW5jcnlwdGVkS2V5IiwiZm9sZGVyIiwicGFyZW50IiwiUHJvbWlzZSIsImFsbCIsInJpZ2h0cyIsInNoYXJlTm9kZSIsImRlbGV0ZWQiLCJtYWlsIiwiZGVsZXRlZE5vZGVzIiwibm9kZXMiLCJzaGFyZWROb2RlcyIsIm5vZGVzU2hhcmVkV2l0aE1lIiwidHlwZSIsImRlbGV0ZU5vZGVTaGFyaW5nIiwiZHVwbGljYXRlTm9kZSIsImZvbGRlcklkIiwiY3VzdG9tTmFtZSIsImRlbGV0ZU5vZGVDbG91ZFRyYXNoIiwiaWRzIiwic2hhcmVOb2RlcyIsInNoYXJlTm9kZUZpbmlzaCIsInVwZGF0ZU5vZGUiLCJpc0Zhdm9yaXRlIiwiZGVsZXRlZEF0IiwiZGVsZXRlZE1haWxzIiwibWFpbFR5cGUiLCJtYWlscyIsIm0iLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiYXBwTm90aWZpY2F0aW9ucyIsImNyZWF0ZU1haWwiLCJjdXN0b21NZXNzYWdlIiwiY3JlYXRlRHJhZnRNYWlsIiwic2VuZERyYWZ0TWFpbCIsIm1haWxJbnRlZ3JpdHlJZCIsIndhaXRpbmdSZWNlaXZlZE1haWxzIiwiZGF0ZSIsImF0dGFjaG1lbnRzQ291bnQiLCJzZW5kZXIiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImVtYWlsIiwicmVjaXBpZW50cyIsInRlbXBvcmFyeVJlY2lwaWVudHMiLCJ1cGRhdGVEcmFmdE1haWwiLCJkcmFmdElkIiwicmVjaXBpZW50c0lkcyIsInJlcGx5VG8iLCJkcmFmdHMiLCJkcmFmdE1haWxzIiwiZHJhZnQiLCJkIiwiaGFzaEtleSIsImhhc2giLCJyYW5kb21ieXRlc19idWYiLCJjcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMiLCJjcnlwdG9fZ2VuZXJpY2hhc2giLCJjcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMiLCJzZW5kZXJGaWxlcyIsImRlbGV0ZURyYWZ0TWFpbCIsImRlbGV0ZU1haWxUcmFzaCIsImVtcHR5TWFpbFRyYXNoIiwiZW1wdHlDbG91ZFRyYXNoIiwicmVjb3Zlck5vZGUiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVOb2RlIiwibW92ZU5vZGVzIiwibm9kZUlkcyIsInBhcmVudE5vZGVJZCIsImZvbGRlclNpemUiLCJzaXplIiwic2l6ZUJlZm9yZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRiR2V0IiwiZmllbGQiLCJqc29uIiwicmVzIiwiZGJTZXQiLCJkYlNlYXJjaCIsInNlYXJjaCIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJCeXRlcyIsImNvbnNvbGUiLCJsb2ciLCJmcm9tIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsImNvbnRlbnQiLCJtYXliZVBhcnRzIiwibWF5YmVDb250ZW50Iiwic2VuZGVyUHVibGljS2V5IiwidHJhbnNmZXJyZWRCeXRlcyIsInRvdGFsQnl0ZXMiLCJlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzIiwiZmlsZVBhcnRzIiwiYnVmIiwidGltZW91dCIsInByIiwibWQ1UGFydCIsInNvcnQiLCJhIiwiYiIsImZpbmFsaXplIiwiZW5jcnlwdGVkQ29udGVudCIsInNyYyIsIm1kNUNvbnRlbnQiLCJyZWFkTWFpbCIsInVucmVhZE1haWwiLCJhcHBTZXR0aW5ncyIsImNsb3VkRmlsZURheXNGb3JEZWxldGUiLCJjbG91ZEZvbGRlckRheXNGb3JEZWxldGUiLCJoaXN0b3J5RmlsZURheXNGb3JEZWxldGUiLCJoaXN0b3J5TWF4RmlsZUNvdW50IiwidXBkYXRlQXBwU2V0dGluZ3MiLCJzZXR0aW5ncyIsInVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCIsImNvdW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgTWFpbFR5cGUsIE5vZGVUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgdHlwZSB7IEZvbGRlclNpemUsIFN1Y2Nlc3NSZXNwb25zZSwgVXNlckRhdGEgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9CYXNlQ2xpZW50LmpzXCI7XG5pbXBvcnQgeyBub2Rlc0NhY2hlLCBmaWxlc0NhY2hlLCB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4uL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBzZWNyZXRzdHJlYW1LZXlnZW4sIGVuY3J5cHRTZWNyZXRzdHJlYW0gfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IGNvbXByZXNzLCB1bmNvbXByZXNzIH0gZnJvbSBcIi4uL21pbmlmeS9pbmRleC5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCxcbiAgZ3FsTm9kZVRvRXh0ZXJuYWwsXG4gIGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwsXG4gIGludGVybmFsTm9kZVRvTm9kZVxufSBmcm9tIFwiLi9jb252ZXJ0L25vZGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgTm9kZSxcbiAgTm9kZUZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGVNZXRhZGF0YSBhcyBTZWNyZWN5RmlsZSxcbiAgV2FpdGluZ1JlY2VpdmVkTWFpbCxcbiAgRHJhZnRNYWlsLFxuICBNYWlsUmVjaXBpZW50SW5wdXQsXG4gIFNoYXJlTm9kZXNJbnB1dCxcbiAgTmFtZUtleUlucHV0LFxuICBNYWlsLFxuICBTaGFyZUZpbGVJbkhpc3RvcnlJbnB1dCxcbiAgRmlsZVBhcnRSZXNwb25zZSxcbiAgRmlsZUNvbnRlbnRQYXJ0XG59IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBncWxGaWxlVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvZmlsZS5qc1wiO1xuaW1wb3J0IHsgc29kaXVtIH0gZnJvbSBcIi4uL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVjcnlwdENyeXB0b0JveCwgZW5jcnlwdENyeXB0b0JveCB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNob3J0aWRcIjtcbmltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvbWQ1LmpzXCI7XG5pbXBvcnQgeyBlbmNyeXB0LCBkZWNyeXB0IH0gZnJvbSBcIi4uL3dvcmtlci9zb2RpdW0uanNcIjtcbmltcG9ydCB7XG4gIGNodW5rcyxcbiAgY29uY2F0ZW5hdGUsXG4gIGVudW1lcmF0ZSxcbiAgcHJvbWlzZUFsbExpbWl0XG59IGZyb20gXCIuLi91dGlscy91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZmlsZVNlbGVjdG9yLFxuICBtYWlsU2VsZWN0b3IsXG4gIG5vZGVGdWxsU2VsZWN0b3IsXG4gIG5vZGVTZWxlY3RvclxufSBmcm9tIFwiLi90eXBlcy9zZWxlY3RvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEp3dFBheWxvYWQgfSBmcm9tIFwianNvbndlYnRva2VuXCI7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tIFwianNvbndlYnRva2VuXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvckJhc2ljLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxpbWl0XG59IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSBcImJzb25cIjtcblxuZXhwb3J0IHR5cGUgTmV3TWFpbCA9IHtcbiAgYm9keTogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W107XG4gIHJlY2lwaWVudHNJZHM6IHN0cmluZ1tdO1xuICByZXBseVRvPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBQcm9ncmVzcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuY29uc3QgZW5jcnlwdE5hbWUgPSBhc3luYyAobmFtZTogc3RyaW5nLCBuYW1lS2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGVuY3J5cHRTZWNyZXRzdHJlYW0oXG4gICAgc29kaXVtLmZyb21faGV4KG5hbWVLZXkpLFxuICAgIHNvZGl1bS5mcm9tX3N0cmluZyhuYW1lKVxuICApO1xuICBjb25zdCBuYW1lRW5jcnlwdGVkID0gc29kaXVtLnRvX2hleChkYXRhKTtcbiAgcmV0dXJuIG5hbWVFbmNyeXB0ZWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgU2VjcmVjeUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQge1xuICBqd3Q6IHN0cmluZztcblxuICBqd3REZWNvZGVkOiBKd3RQYXlsb2FkO1xuXG4gICNrZXlzOiBLZXlQYWlyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVhU2Vzc2lvbjogc3RyaW5nLFxuICAgIHVhS2V5czogS2V5UGFpcixcbiAgICB1YUp3dDogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudlxuICApIHtcbiAgICBzdXBlcih1YVNlc3Npb24sIGVudik7XG4gICAgdGhpcy5qd3QgPSB1YUp3dDtcbiAgICB0aGlzLmp3dERlY29kZWQgPSBkZWNvZGUodWFKd3QpIGFzIEp3dFBheWxvYWQ7XG4gICAgdGhpcy4ja2V5cyA9IHVhS2V5cztcbiAgfVxuXG4gIGdldCBwdWJsaWNLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4ja2V5cy5wdWJsaWNLZXk7XG4gIH1cblxuICBnZXQgYXBwVXNlcklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuand0RGVjb2RlZC5zdWIgPz8gXCJcIjtcbiAgfVxuXG4gIGFzeW5jIGFkZEZpbGVUb0hpc3Rvcnkoe1xuICAgIGZpbGVJZCxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYWRkRmlsZVRvSGlzdG9yeSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBhZGRGaWxlVG9IaXN0b3J5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgbm9kZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQWRkRmlsZVRvSGlzdG9yeVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBhZGRGaWxlVG9IaXN0b3J5OiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWFkZEZpbGVUb0hpc3RvcnkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhZGRGaWxlVG9IaXN0b3J5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGFkZEZpbGVUb0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgaWYgKGFkZEZpbGVUb0hpc3RvcnkuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBhZGRGaWxlVG9IaXN0b3J5O1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBncWxOb2RlRnVsbFRvSW50ZXJuYWxGdWxsKFxuICAgICAgYWRkRmlsZVRvSGlzdG9yeS5hZGRGaWxlVG9IaXN0b3J5LFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG4gICAgY29uc3QgZmlsZSA9IG5vZGUuaGlzdG9yeS5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgdXNlcnMgPSBub2RlLnVzZXJzLmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXQ6IFNoYXJlRmlsZUluSGlzdG9yeUlucHV0ID0ge1xuICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIHVzZXJzOiB1c2Vycy5tYXAoKFt1XSkgPT4gKHtcbiAgICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KSlcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICBzaGFyZUZpbGVJbkhpc3Rvcnk6IFtcbiAgICAgICAgICB7IGlucHV0LCBub2RlSWQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIFNoYXJlRmlsZUluSGlzdG9yeVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gaW50ZXJuYWxOb2RlVG9Ob2RlKG5vZGUpO1xuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEZpbGUoe1xuICAgIGZpbGUsXG4gICAgZW5jcnlwdFByb2dyZXNzLFxuICAgIHVwbG9hZFByb2dyZXNzLFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG5cbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiBlbmNyeXB0ZWRGaWxlLFxuICAgICAgbWQ1OiBtZDVGaWxlLFxuICAgICAgbWQ1RW5jcnlwdGVkXG4gICAgfSA9IGF3YWl0IGVuY3J5cHQoZmlsZUtleSwgY29tcHJlc3NlZCwgZW5jcnlwdFByb2dyZXNzLCBzaWduYWwpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkRmlsZUtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBmaWxlS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3QgeyB1cGxvYWRGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwbG9hZEZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBsb2FkRmlsZToge1xuICAgICAgICAgICAgICBmaWxlSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVQYXJ0U2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBsb2FkRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICBjdXJyZW50OiAwLFxuICAgICAgcGVyY2VudDogMFxuICAgIH0pO1xuXG4gICAgaWYgKHVwbG9hZEZpbGUudXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHVwbG9hZFBhcnRFbmRlZCA9IGFzeW5jIChcbiAgICAgIG1kNTogc3RyaW5nLFxuICAgICAgb3JkZXI6IG51bWJlclxuICAgICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZVBhcnRFbmQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICB1cGxvYWRGaWxlUGFydEVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVJZCxcbiAgICAgICAgICAgIG1kNSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gVXBsb2FkRmlsZVBhcnRFbmRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1cGxvYWRGaWxlUGFydEVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwbG9hZEZpbGVQYXJ0RW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVBhcnRFbmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHVwbG9hZEZpbGVQYXJ0RW5kLnVwbG9hZEZpbGVQYXJ0RW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB1cGxvYWRFbmRlZCA9IGFzeW5jICgpOiBQcm9taXNlPFxuICAgICAgU3VjY2Vzc1Jlc3BvbnNlPHN0cmluZz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gICAgPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZUVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gVXBsb2FkRmlsZUVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZUVuZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghdXBsb2FkRmlsZUVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwbG9hZEZpbGVFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlRW5kO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZUVuZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1cGxvYWRGaWxlRW5kLnVwbG9hZEZpbGVFbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHVwbG9hZEZpbGVFbmQudXBsb2FkRmlsZUVuZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2h1bmtQYXJ0cyA9IG5ldyBBcnJheTx7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgZGF0YTogVWludDhBcnJheTtcbiAgICAgIG1kNTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGVudW1lcmF0ZShcbiAgICAgIGNodW5rcyhlbmNyeXB0ZWRGaWxlLCBOdW1iZXIodXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVQYXJ0U2l6ZSkpXG4gICAgKSkge1xuICAgICAgY2h1bmtQYXJ0cy5wdXNoKHtcbiAgICAgICAgb3JkZXI6IGluZGV4ICsgMSxcbiAgICAgICAgZGF0YTogY2h1bmssXG4gICAgICAgIG1kNTogYXdhaXQgbWQ1KGNodW5rKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgUHJvZ3Jlc3NFdmVudD4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKHBhcnQ6IG51bWJlciwgcHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLmxvYWRlZCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiBjdXJyZW50IC8gZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVQYXJ0UmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rUGFydHMuZmluZChwID0+IHAub3JkZXIgPT09IHBhcnQub3JkZXIpO1xuICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJ0LmZpZWxkcykpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICBcImZpbGVcIixcbiAgICAgICAgbmV3IEJsb2IoW2NodW5rLmRhdGFdKSxcbiAgICAgICAgYCR7dXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVJZH0tJHtjaHVuay5vcmRlcn1gXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBheGlvcy5wb3N0KHBhcnQudXJsLCBmb3JtRGF0YSwge1xuICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBwcm9ncmVzc0V2ZW50ID0+XG4gICAgICAgICAgb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwcm9ncmVzc0V2ZW50KSxcbiAgICAgICAgc2lnbmFsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdXBsb2FkUGFydEVuZGVkKGNodW5rLm1kNSwgY2h1bmsub3JkZXIpO1xuICAgICAgLy8gaWYgKChlIGFzIGFueSkucmVzcG9uc2Uuc3RhdHVzID09PSAwKSB7XG4gICAgICAvLyAgIC8vIFRPRE8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9reS9pc3N1ZXMvMzA1XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aHJvdyBlO1xuICAgICAgLy8gfVxuICAgIH07XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgMyxcbiAgICAgIHVwbG9hZEZpbGUudXBsb2FkRmlsZS5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVwbG9hZEVuZGVkKCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEZpbGVJbkNsb3VkKHtcbiAgICBmaWxlLFxuICAgIG5hbWUsXG4gICAgbm9kZUlkLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5vZGVJZD86IHN0cmluZztcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBmaWxlSWQgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoe1xuICAgICAgZmlsZSxcbiAgICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICAgIHVwbG9hZFByb2dyZXNzLFxuICAgICAgc2lnbmFsXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVJZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVJZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVJZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2F2ZUluQ2xvdWQoe1xuICAgICAgZmlsZUlkOiBmaWxlSWQuZGF0YSxcbiAgICAgIG5hbWUsXG4gICAgICBub2RlSWRcbiAgICB9KTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBub2Rlc0NhY2hlLmNsZWFyKCk7XG4gICAgZmlsZXNDYWNoZS5jbGVhcigpO1xuICAgIGF3YWl0IHN1cGVyLmxvZ291dChzZXNzaW9uSWQpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRm9sZGVyKHtcbiAgICBuYW1lLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50Rm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBrZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChrZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAga2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuICAgIGNvbnN0IHsgY3JlYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIENyZWF0ZUZvbGRlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVGb2xkZXI6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgLy90aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBmb2xkZXJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLmNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudD8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZm9sZGVyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vZGUoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBub2RlOiBbXG4gICAgICAgIHsgZGVsZXRlZCwgaWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2RlOiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBpZiAoIW5vZGUubm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbChub2RlLm5vZGUsIHRoaXMuI2tleXMpO1xuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZpbGUoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8U2VjcmVjeUZpbGU+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVRdWVyeVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWxlOiBmaWxlU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCFmaWxlLmZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGdxbEZpbGVUb0V4dGVybmFsKGZpbGUuZmlsZSwgdGhpcy4ja2V5cyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBtYWlsKHtcbiAgICBpZFxuICB9OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE1haWw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgbWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUXVlcnlNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1haWw6IG1haWxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtYWlsO1xuICAgIH1cblxuICAgIGlmICghbWFpbC5tYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtYWlsLm1haWwsIHRoaXMuI2tleXMpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWROb2RlcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRlbGV0ZWROb2Rlczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBEZWxldGVkTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBkZWxldGVkTm9kZXM6IG5vZGVTZWxlY3RvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZWROb2Rlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZWROb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVkTm9kZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBkZWxldGVkTm9kZXMuZGVsZXRlZE5vZGVzKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKG5vZGUsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlZE5vZGVzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBzaGFyZWROb2RlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBzaGFyZWROb2Rlczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBTaGFyZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHNoYXJlZE5vZGVzOiBub2RlU2VsZWN0b3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZWROb2Rlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlZE5vZGVzO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5PE5vZGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBzaGFyZWROb2Rlcy5zaGFyZWROb2Rlcykge1xuICAgICAgbm9kZXMucHVzaChhd2FpdCBncWxOb2RlVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vZGVzU2hhcmVkV2l0aE1lKFxuICAgIHR5cGU/OiBOb2RlVHlwZSB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbm9kZXNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTm9kZXNTaGFyZWRXaXRoTWVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IG5vZGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVzU2hhcmVkV2l0aE1lLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGVzU2hhcmVkV2l0aE1lO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5PE5vZGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBub2Rlc1NoYXJlZFdpdGhNZS5ub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgbm9kZXMucHVzaChhd2FpdCBncWxOb2RlVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGVTaGFyaW5nKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVOb2RlU2hhcmluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVOb2RlU2hhcmluZ1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlU2hhcmluZzogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlU2hhcmluZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU5vZGVTaGFyaW5nLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGVTaGFyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZVNoYXJpbmcuZGVsZXRlTm9kZVNoYXJpbmdcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlTm9kZSh7XG4gICAgbm9kZUlkLFxuICAgIGZvbGRlcklkLFxuICAgIGN1c3RvbU5hbWVcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIGZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBjdXN0b21OYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlICgke25vZGVJZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW5vZGUuYWNjZXNzPy5uYW1lS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGhhdmUgYWNjZXNzIHRvIG5vZGUgJHtub2RlSWR9YCk7XG4gICAgfVxuICAgIGN1c3RvbU5hbWUgPSBjdXN0b21OYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGN1c3RvbU5hbWUsIG5vZGUuYWNjZXNzLm5hbWVLZXkpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IGR1cGxpY2F0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZHVwbGljYXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIGN1c3RvbU5hbWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEdXBsaWNhdGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGR1cGxpY2F0ZU5vZGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZHVwbGljYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGR1cGxpY2F0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZHVwbGljYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAoZHVwbGljYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGR1cGxpY2F0ZU5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkdXBsaWNhdGVOb2RlLmR1cGxpY2F0ZU5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZUNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU5vZGVDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZUNsb3VkVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTm9kZUNsb3VkVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlQ2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVOb2RlQ2xvdWRUcmFzaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZU5vZGVDbG91ZFRyYXNoLmRlbGV0ZU5vZGVDbG91ZFRyYXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlTm9kZSh7XG4gICAgbm9kZUlkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZU5vZGU6IFtcbiAgICAgICAgeyBub2RlSWQsIHVzZXJJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNoYXJlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2RlczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVOb2RlczogU2hhcmVOb2Rlc0lucHV0ID0ge1xuICAgICAgbm9kZXM6IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVOb2RlLm5vZGVzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJOb2RlKGlkLCB1c2VyLmRhdGEucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlTm9kZXMubm9kZXMucHVzaChuYW1lS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlTm9kZUZpbmlzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZU5vZGVGaW5pc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgc2hhcmVOb2Rlc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNoYXJlTm9kZUZpbmlzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzaGFyZU5vZGVGaW5pc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2hhcmVOb2RlRmluaXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlRmluaXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZUZpbmlzaDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlRmluaXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2hhcmVOb2RlRmluaXNoLnNoYXJlTm9kZUZpbmlzaCA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdGhyb3cgYENhbid0IGZpbmQgTm9kZSAke25vZGVJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZVxuICAgICAgPyBub2RlLmFjY2Vzcz8ubmFtZUtleVxuICAgICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIG5vZGUuYWNjZXNzLm5hbWVLZXkpXG4gICAgICAgIDogbmFtZVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGlzRmF2b3JpdGUsXG4gICAgICAgICAgZGVsZXRlZEF0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVOb2RlOiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVOb2RlO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlTm9kZS51cGRhdGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgdXBkYXRlTm9kZS51cGRhdGVOb2RlLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVkTWFpbHMoe1xuICAgIG1haWxUeXBlXG4gIH06IHtcbiAgICBtYWlsVHlwZTogTWFpbFR5cGU7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxNYWlsW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTWFpbHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkZWxldGVkTWFpbHM6IFtcbiAgICAgICAgeyBtYWlsVHlwZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVkTWFpbHNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZE1haWxzOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE1haWxzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE1haWxzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWRNYWlscztcbiAgICB9XG5cbiAgICBjb25zdCBtYWlscyA9IG5ldyBBcnJheTxNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIGRlbGV0ZWRNYWlscy5kZWxldGVkTWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIG1haWxzLnB1c2gobWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtYWlsc1xuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBOb3RpZmljYXRpb25zKFxuICAgIG5vdGlmaWNhdGlvbnM6IFBhcnRpYWw8VXNlckFwcE5vdGlmaWNhdGlvbnM+XG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXJBcHBOb3RpZmljYXRpb25zPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM6IFtcbiAgICAgICAgbm90aWZpY2F0aW9ucyxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlQXBwTm90aWZpY2F0aW9uc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVBcHBOb3RpZmljYXRpb25zOiB7XG4gICAgICAgICAgICAgIGVuYWJsZUFsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgICAgICAgIGRpc2FibGVBbGxVbnRpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlQXBwTm90aWZpY2F0aW9ucy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBcHBOb3RpZmljYXRpb25zO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlQXBwTm90aWZpY2F0aW9ucy51cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMudXBkYXRlQXBwTm90aWZpY2F0aW9uc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBhcHBOb3RpZmljYXRpb25zKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcE5vdGlmaWNhdGlvbnM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGFwcE5vdGlmaWNhdGlvbnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBhcHBOb3RpZmljYXRpb25zOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFVzZXJBcHBOb3RpZmljYXRpb25zXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGVuYWJsZUFsbDogdHJ1ZSxcbiAgICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICAgIGNsb3VkOiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVBbGxVbnRpbDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKGFwcE5vdGlmaWNhdGlvbnMuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBhcHBOb3RpZmljYXRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYXBwTm90aWZpY2F0aW9uc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVNYWlsKFxuICAgIGRhdGE6IE5ld01haWwsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckJhc2ljIHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgbWFpbCA9IGF3YWl0IHRoaXMuY3JlYXRlRHJhZnRNYWlsKGRhdGEpO1xuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBtYWlsO1xuICAgIH1cblxuICAgIGlmIChtYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kRHJhZnRNYWlsKFxuICAgICAgbWFpbC5kYXRhLm1haWxJbnRlZ3JpdHlJZCxcbiAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICApO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyB3YWl0aW5nUmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxXYWl0aW5nUmVjZWl2ZWRNYWlsW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHdhaXRpbmdSZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50c0NvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjoge1xuICAgICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdXNlci51c2VyLndhaXRpbmdSZWNlaXZlZE1haWxzLm1hcChtID0+ICh7XG4gICAgICBpZDogZ2VuZXJhdGUoKSxcbiAgICAgIC4uLm0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZShtLmRhdGUgYXMgc3RyaW5nKVxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8RHJhZnRNYWlsPlxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG4gICAgaWYgKCFkcmFmdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkcmFmdHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgcmV0dXJuIGRyYWZ0cztcbiAgICB9XG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZGF0YS5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkcmFmdCAke2RyYWZ0SWR9YCk7XG4gICAgfVxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGJvZHkgfHwgc3ViamVjdCkge1xuICAgICAgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgICBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9CWVRFUyxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgICBoYXNoS2V5LFxuICAgICAgICBcImhleFwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZW5kZXJGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuICAgIGlmIChmaWxlcykge1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZW5kZXJGaWxlcy5wdXNoKHtcbiAgICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IHtcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnBhcnNlKGUgYXMgc3RyaW5nKVxuICAgICAgICB9LFxuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIEJpZ0ludDoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgYmlnaW50KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1cGRhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWQsXG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlRHJhZnRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZURyYWZ0TWFpbDogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZURyYWZ0TWFpbC51cGRhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgdXBkYXRlRHJhZnRNYWlsLnVwZGF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlRHJhZnRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZURyYWZ0TWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVEcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlRHJhZnRNYWlsLmRlbGV0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVEcmFmdE1haWwuZGVsZXRlRHJhZnRNYWlsID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWxUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU1haWxUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU1haWxUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVNYWlsVHJhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTWFpbFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTWFpbFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgICB9XG5cbiAgICBpZiAoIWRlbGV0ZU1haWxUcmFzaC5kZWxldGVNYWlsVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTWFpbFRyYXNoLmRlbGV0ZU1haWxUcmFzaFxuICAgIH07XG4gIH1cblxuICBhc3luYyBlbXB0eU1haWxUcmFzaCgpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGVtcHR5TWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVtcHR5TWFpbFRyYXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgZW1wdHlNYWlsVHJhc2g6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFlbXB0eU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVtcHR5TWFpbFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGVtcHR5TWFpbFRyYXNoO1xuICAgIH1cblxuICAgIGlmICghZW1wdHlNYWlsVHJhc2guZW1wdHlNYWlsVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZW1wdHlNYWlsVHJhc2guZW1wdHlNYWlsVHJhc2hcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZW1wdHlDbG91ZFRyYXNoKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZW1wdHlDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFbXB0eUNsb3VkVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBlbXB0eUNsb3VkVHJhc2g6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFlbXB0eUNsb3VkVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChlbXB0eUNsb3VkVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZW1wdHlDbG91ZFRyYXNoO1xuICAgIH1cblxuICAgIGlmICghZW1wdHlDbG91ZFRyYXNoLmVtcHR5Q2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBlbXB0eUNsb3VkVHJhc2guZW1wdHlDbG91ZFRyYXNoXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJOb2RlKFxuICAgIGlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck5vZGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcmVjb3Zlck5vZGU6IFtcbiAgICAgICAgeyBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFJlY292ZXJOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlY292ZXJOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlY292ZXJOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVjb3Zlck5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gcmVjb3Zlck5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZWNvdmVyTm9kZS5yZWNvdmVyTm9kZSA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWNvdmVyTWFpbCh7XG4gICAgbWFpbElkXG4gIH06IHtcbiAgICBtYWlsSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHJlY292ZXJNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbXG4gICAgICAgIHsgbWFpbElkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVjb3Zlck1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVjb3Zlck1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVjb3Zlck1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlY292ZXJNYWlsLnJlY292ZXJNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgbm9kZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlRmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVGaWxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZUZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVGaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZpbGU7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVGaWxlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlRmlsZS5kZWxldGVGaWxlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGUoe1xuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogbm9kZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVOb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZS5kZWxldGVOb2RlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG1vdmVOb2Rlcyh7XG4gICAgbm9kZUlkcyxcbiAgICBwYXJlbnROb2RlSWRcbiAgfToge1xuICAgIG5vZGVJZHM6IHN0cmluZ1tdO1xuICAgIHBhcmVudE5vZGVJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZU5vZGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVOb2RlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkcyxcbiAgICAgICAgICBwYXJlbnROb2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTW92ZU5vZGVzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1vdmVOb2RlczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtb3ZlTm9kZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtb3ZlTm9kZXMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbW92ZU5vZGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbW92ZU5vZGVzLm1vdmVOb2RlcyA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBmb2xkZXJTaXplKHtcbiAgICBmb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Rm9sZGVyU2l6ZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlclNpemUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZm9sZGVyU2l6ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRm9sZGVyU2l6ZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzaXplOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZUJlZm9yZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmb2xkZXJTaXplKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZm9sZGVyU2l6ZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmb2xkZXJTaXplO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBzaXplOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplKSxcbiAgICAgICAgc2l6ZUJlZm9yZTogQmlnSW50KGZvbGRlclNpemUuc2l6ZUJlZm9yZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbCh7XG4gICAgbWFpbElkXG4gIH06IHtcbiAgICBtYWlsSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1haWxJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTWFpbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZU1haWwuZGVsZXRlTWFpbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzYXZlSW5DbG91ZCh7XG4gICAgZmlsZUlkLFxuICAgIG5hbWUsXG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbm9kZUlkPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGlmIChub2RlSWQgJiYgIW5vZGVzQ2FjaGUuaGFzKG5vZGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBpZiAoIW5vZGVzQ2FjaGUuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICBtZXNzYWdlOiBgVGhlIG5vZGUgJHtub2RlSWR9IGRvZXMgbm90IGV4aXN0c2BcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5ID0gXCJcIjtcblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZmlsZUlkIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCkgPz8gbnVsbDtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICBjb25zdCByZWNlaXZlZE1haWxzID0gYXdhaXQgdGhpcy5yZWNlaXZlZE1haWxzKCk7XG4gICAgICAgIGlmICghcmVjZWl2ZWRNYWlscykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWNlaXZlZE1haWxzLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5kYXRhLmZpbmQobSA9PlxuICAgICAgICAgIG0uZmlsZXMuc29tZShmID0+IGYuaWQgPT09IGZpbGVJZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1haWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2FuJ3QgZmluZCBtYWlsIHdpdGggdGhlIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlTWFpbCA9IG1haWwuZmlsZXMuZmluZChmID0+IGYuaWQgPT09IGZpbGVJZCk7XG5cbiAgICAgICAgaWYgKCFmaWxlTWFpbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5ID0gZmlsZS5rZXk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IGZpbGUua2V5O1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICBtZXNzYWdlOiBcIlVuZXhwZWN0ZWQgZXJyb3IgM1wiXG4gICAgICB9O1xuICAgIH1cblxuICAgIGtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgobmFtZUtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWVLZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChuYW1lS2V5LCB0aGlzLiNrZXlzLnB1YmxpY0tleSwgdGhpcy4ja2V5cy5wcml2YXRlS2V5KVxuICAgICk7XG5cbiAgICBjb25zdCB7IHNhdmVJbkNsb3VkIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNhdmVJbkNsb3VkOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBmaWxlbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBuYW1lS2V5OiBlbmNyeXB0ZWROYW1lS2V5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2F2ZUluQ2xvdWRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2F2ZUluQ2xvdWQ6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2F2ZUluQ2xvdWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKCFzYXZlSW5DbG91ZC5zYXZlSW5DbG91ZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICBzYXZlSW5DbG91ZC5zYXZlSW5DbG91ZCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgbWUgPSBub2RlLnBhcmVudD8udXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9XG4gICAgICAgIG5vZGUucGFyZW50Py51c2Vycy5maWx0ZXIoXG4gICAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICAgICkgPz8gW107XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvdGhlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlTm9kZSh7XG4gICAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkYkdldDxVPih7XG4gICAgZmllbGQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFU+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRiR2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiR2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJHZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IChkYkdldC5qc29uIGFzIHsgcmVzOiBVIH0pLnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdmFsdWU6IFU7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiU2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYlNldDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmICghZGJTZXQuZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogKGRiU2V0LmRiU2V0IGFzIHsgcmVzOiBUIH0pLnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZGJTZWFyY2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvbiBhcyB1bmtub3duIGFzIFRbXVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzZW5kRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGw+IHtcbiAgICBjb25zdCBkcmFmdHMgPSBhd2FpdCB0aGlzLmRyYWZ0TWFpbHMoKTtcblxuICAgIGlmICghZHJhZnRzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRyYWZ0cy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5kYXRhLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBuZXcgQXJyYXk8TWFpbFJlY2lwaWVudElucHV0PigpO1xuXG4gICAgY29uc3QgdGVtcG9yYXJ5UmVjaXBpZW50cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBkcmFmdC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGVtYWlsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChlbWFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgeyBpZCB9IG9mIGRyYWZ0LnJlY2lwaWVudHMpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBpZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNlbmREcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2VuZERyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGRyYWZ0TWFpbElkOiBkcmFmdC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNlbmREcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2VuZERyYWZ0TWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzZW5kRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZERyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzZW5kRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmIChzZW5kRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gc2VuZERyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbmREcmFmdE1haWwuc2VuZERyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW5kRHJhZnRNYWlsLnNlbmREcmFmdE1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VuZFdhaXRpbmdFbWFpbHMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIC8vIFRPRE8gb3B0aSB0aGlzXG4gICAgY29uc3QgbWFpbHMgPSBhd2FpdCB0aGlzLnNlbnRNYWlscygpO1xuXG4gICAgaWYgKCFtYWlscykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtYWlscy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWQgPSBtYWlscy5kYXRhLmZpbHRlcihtID0+IG0udGVtcG9yYXJ5UmVjaXBpZW50cy5sZW5ndGggPiAwKTtcblxuICAgIGZvciAoY29uc3QgbWFpbCBvZiBmaWx0ZXJlZCkge1xuICAgICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgbWFpbC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgICAgICBtYWlsLmZpbGVzLFxuICAgICAgICAgICAgbWFpbC5zdWJqZWN0LFxuICAgICAgICAgICAgbWFpbC5ib2R5LFxuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICAgICAgc2VuZE9uZU1haWw6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1haWxJbnRlZ3JpdHlJZDogbWFpbC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiBpbnB1dFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIi4uLm9uIFJlY292ZXJOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHJlY292ZXJOb2RlOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRHJhZnRNYWlsKHtcbiAgICBib2R5LFxuICAgIHN1YmplY3QsXG4gICAgZmlsZXMsXG4gICAgcmVjaXBpZW50c0lkcyxcbiAgICByZXBseVRvXG4gIH06IE5ld01haWwpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxEcmFmdE1haWw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICBcImhleFwiXG4gICAgKTtcbiAgICBjb25zdCBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICBoYXNoS2V5LFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUua2V5KSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIENyZWF0ZURyYWZ0TWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVEcmFmdE1haWw6IG1haWxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFjcmVhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVEcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVEcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGVEcmFmdE1haWwuY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbC5jcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IERvd25sb2FkUHJvZ3Jlc3MpID0+IHZvaWQ7XG4gICAgcHJvZ3Jlc3NEZWNyeXB0PzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVpbnQ4QXJyYXk+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGZpbGVDb250ZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgQnl0ZXM6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlLCB0eXBlb2YgZSk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFsxLCAyLCAzXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBVaW50OEFycmF5KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBmaWxlQ29udGVudDogW1xuICAgICAgICB7IGZpbGVJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudExpdGVcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF5YmVQYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXliZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50U2VudE1haWxcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF5YmVQYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXliZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBmaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZUNvbnRlbnQuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIERvd25sb2FkUHJvZ3Jlc3M+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChcbiAgICAgIHBhcnQ6IG51bWJlcixcbiAgICAgIHByb2dyZXNzRXZlbnQ6IERvd25sb2FkUHJvZ3Jlc3NcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgdHJhbnNmZXJyZWRCeXRlcyA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci50cmFuc2ZlcnJlZEJ5dGVzLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgY29uc3QgdG90YWxCeXRlcyA9IE51bWJlcihmaWxlLnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyA9IGFzeW5jIChcbiAgICAgIGZpbGVQYXJ0czogRmlsZUNvbnRlbnRQYXJ0W11cbiAgICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbmV3IEFycmF5PHsgZGF0YTogVWludDhBcnJheTsgb3JkZXI6IG51bWJlciB9PigpO1xuXG4gICAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgIGF3YWl0IGt5XG4gICAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgICB0aW1lb3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXJyYXlCdWZmZXIoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBtZDVQYXJ0ID0gYXdhaXQgbWQ1KGJ1Zik7XG4gICAgICAgIGlmIChtZDVQYXJ0ICE9PSBwYXJ0Lm1kNSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG1kNSBmb3IgcGFydCAke3BhcnQub3JkZXJ9IG9mIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICAgIG9yZGVyOiBwYXJ0Lm9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgICAzLFxuICAgICAgICBmaWxlUGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNvbmNhdGVuYXRlKFxuICAgICAgICAuLi5wYXJ0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKHAgPT4gcC5kYXRhKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluYWxpemUgPSBhc3luYyAoXG4gICAgICBlbmNyeXB0ZWRDb250ZW50OiBVaW50OEFycmF5XG4gICAgKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICAvLyBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2YoZW5jcnlwdGVkQ29udGVudCkpKTtcbiAgICAgIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IG1kNShlbmNyeXB0ZWRDb250ZW50KTtcblxuICAgICAgaWYgKG1kNUVuY3J5cHRlZCAhPT0gZmlsZS5tZDVFbmNyeXB0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNyeXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS5rZXkpLFxuICAgICAgICBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIlxuICAgICAgICAgID8gZmlsZS5zZW5kZXJQdWJsaWNLZXlcbiAgICAgICAgICA6IGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgICA/IGZpbGUucHVibGljS2V5XG4gICAgICAgICAgOiB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApO1xuXG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0LCBzaWduYWwpO1xuXG4gICAgICAvLyBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKHNyYykpKTtcbiAgICAgIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBtZDUoc3JjKTtcblxuICAgICAgaWYgKG1kNUNvbnRlbnQgIT09IGZpbGUubWQ1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5jb21wcmVzcyhzcmMpO1xuICAgIH07XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50ID1cbiAgICAgIGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudExpdGVcIlxuICAgICAgICA/IGZpbGUuY29udGVudFxuICAgICAgICA6IGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzKGZpbGUucGFydHMpXG4gICAgICAgIDogZmlsZS5tYXliZUNvbnRlbnRcbiAgICAgICAgPyBmaWxlLm1heWJlQ29udGVudFxuICAgICAgICA6IGZpbGUubWF5YmVQYXJ0c1xuICAgICAgICA/IGF3YWl0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMoZmlsZS5tYXliZVBhcnRzKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBpZiAoIWVuY3J5cHRlZENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYXdhaXQgZmluYWxpemUoZW5jcnlwdGVkQ29udGVudClcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoe1xuICAgIG1haWxJZFxuICB9OiB7XG4gICAgbWFpbElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHJlYWRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlYWRNYWlsOiBbXG4gICAgICAgIHsgbWFpbElkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBSZWFkTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICByZWFkTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZWFkTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmIChyZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmIChyZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmICghcmVhZE1haWwucmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVhZE1haWwucmVhZE1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdW5yZWFkTWFpbCh7XG4gICAgbWFpbElkXG4gIH06IHtcbiAgICBtYWlsSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1bnJlYWRNYWlsOiBbXG4gICAgICAgIHsgbWFpbElkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVbnJlYWRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVucmVhZE1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdW5yZWFkTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdW5yZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAodW5yZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHVucmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmICghdW5yZWFkTWFpbC51bnJlYWRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVucmVhZE1haWwudW5yZWFkTWFpbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBhcHBTZXR0aW5ncygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwU2V0dGluZ3M+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIGFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyLnVzZXI/LmFwcFNldHRpbmdzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVzZXIudXNlci5hcHBTZXR0aW5nc1xuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXJBcHBTZXR0aW5ncz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwU2V0dGluZ3MgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlQXBwU2V0dGluZ3M6IFtcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlQXBwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlQXBwU2V0dGluZ3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBTZXR0aW5ncy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBcHBTZXR0aW5ncztcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlQXBwU2V0dGluZ3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBcHBTZXR0aW5ncztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVwZGF0ZUFwcFNldHRpbmdzLnVwZGF0ZUFwcFNldHRpbmdzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8UmVjZWl2ZWRNYWlsW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgcmVjZWl2ZWRNYWlsczogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IHJlY2VpdmVkTWFpbHMgPSBuZXcgQXJyYXk8UmVjZWl2ZWRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIHVzZXIudXNlci5yZWNlaXZlZE1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICByZWNlaXZlZE1haWxzLnB1c2gobWFpbCBhcyBSZWNlaXZlZE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVjZWl2ZWRNYWlsc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBzZW50TWFpbHMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VudE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBzZW50TWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBzZW50TWFpbHMgPSBuZXcgQXJyYXk8U2VudE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgdXNlci51c2VyLnNlbnRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgc2VudE1haWxzLnB1c2gobWFpbCBhcyBTZW50TWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW50TWFpbHNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxEcmFmdE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBkcmFmdE1haWxzOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgZHJhZnRNYWlscyA9IG5ldyBBcnJheTxEcmFmdE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgdXNlci51c2VyLmRyYWZ0TWFpbHMpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cykgYXMgRHJhZnRNYWlsO1xuICAgICAgaWYgKGRyYWZ0KSB7XG4gICAgICAgIGRyYWZ0TWFpbHMucHVzaChkcmFmdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkcmFmdE1haWxzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyTm9kZSA9IGFzeW5jIChcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG5cbiAgICBpZiAoIW5vZGUgfHwgIShcImNoaWxkcmVuXCIgaW4gbm9kZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcblxuICAgICAgaWYgKCFub2RlIHx8ICEoXCJjaGlsZHJlblwiIGluIG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWVLZXkgPSBub2RlLmFjY2Vzcz8ubmFtZUtleTtcblxuICAgIGlmICghbmFtZUtleSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6IG5vZGUuaGlzdG9yeS5tYXAoZiA9PiAoe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZi5rZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KSlcbiAgICB9O1xuICB9O1xuXG4gIGFzeW5jIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCgpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxudW1iZXI+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudDoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBVbnJlYWRSZWNlaXZlZE1haWxzQ291bnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjb3VudDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQuY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZWFjaFVzZXIgPSBhc3luYyAoXG4gICAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSxcbiAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGlkT3JNYWlsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNYWlsUmVjaXBpZW50SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IHUgPSB1c2Vyc0NhY2hlLmdldChpZE9yTWFpbCk7XG5cbiAgICBpZiAoIXUgfHwgIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXEgPSBhd2FpdCB0aGlzLnVzZXIoe1xuICAgICAgICAgIHVzZXJJZDogaWRPck1haWwsXG4gICAgICAgICAgd2l0aFB1YmxpY0tleTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXEpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB1ID0gcmVxLmRhdGE7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZXIgJHtpZE9yTWFpbH0gaGF2ZSBubyBwdWJsaWMga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBpZW50c0ZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGZpbGVJbkhpc3Rvcnkua2V5O1xuICAgICAgcmVjaXBpZW50c0ZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudElkOiB1LmlkLFxuICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiByZWNpcGllbnRzRmlsZXNcbiAgICB9O1xuICB9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
3209
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJreSIsImF4aW9zIiwiQmFzZUNsaWVudCIsIm5vZGVzQ2FjaGUiLCJmaWxlc0NhY2hlIiwidXNlcnNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImVuY3J5cHRTZWNyZXRzdHJlYW0iLCJjb21wcmVzcyIsInVuY29tcHJlc3MiLCJncWxOb2RlRnVsbFRvSW50ZXJuYWxGdWxsIiwiZ3FsTm9kZVRvRXh0ZXJuYWwiLCJncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsIiwiaW50ZXJuYWxOb2RlVG9Ob2RlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImZpbGVTZWxlY3RvciIsIm1haWxTZWxlY3RvciIsIm5vZGVGdWxsU2VsZWN0b3IiLCJub2RlU2VsZWN0b3IiLCJjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCIsImRlY29kZSIsInNlcmlhbGl6ZSIsImdldFN0b3JhZ2UiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZGF0YSIsImZyb21faGV4IiwiZnJvbV9zdHJpbmciLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsImNvbnN0cnVjdG9yIiwidWFTZXNzaW9uIiwidWFLZXlzIiwidWFKd3QiLCJlbnYiLCJwZXJOb2RlIiwibm9kZUlkIiwicHVibGljS2V5Iiwibm9kZSIsImdldCIsImlkIiwiYWNjZXNzIiwicHJpdmF0ZUtleSIsImZpbGVzIiwiaGlzdG9yeSIsIm1hcCIsImYiLCJrZXkiLCJfZWFjaFVzZXIiLCJzdWJqZWN0IiwiYm9keSIsImlkT3JNYWlsIiwidSIsInJlcSIsInVzZXIiLCJ1c2VySWQiLCJ3aXRoUHVibGljS2V5IiwiX190eXBlbmFtZSIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJqd3QiLCJqd3REZWNvZGVkIiwiYXBwVXNlcklkIiwic3ViIiwiYWRkRmlsZVRvSGlzdG9yeSIsImZpbGVJZCIsImNsaWVudCIsIm1lc3NhZ2UiLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInJlc3VsdCIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsInNpZ25hbCIsImZpbGVCdWZmZXIiLCJGaWxlIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiY29tcHJlc3NlZCIsImVuY3J5cHRlZEZpbGUiLCJtZDVGaWxlIiwibWQ1RW5jcnlwdGVkIiwiZW5jcnlwdGVkRmlsZUtleSIsInNjYWxhcnMiLCJKc29uIiwiZW5jb2RlIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJzZSIsIkRhdGVUaW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQmlnSW50IiwidG9TdHJpbmciLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlU2l6ZUJlZm9yZSIsImZpbGVQYXJ0U2l6ZSIsInBhcnRzIiwiZmllbGRzIiwib3JkZXIiLCJ1cmwiLCJ0b3RhbCIsImN1cnJlbnQiLCJwZXJjZW50IiwibGVuZ3RoIiwidXBsb2FkUGFydEVuZGVkIiwidXBsb2FkRmlsZVBhcnRFbmQiLCJ1cGxvYWRFbmRlZCIsInVwbG9hZEZpbGVFbmQiLCJjaHVua1BhcnRzIiwiaW5kZXgiLCJjaHVuayIsIk51bWJlciIsInByb2dyZXNzUGFydHMiLCJvblByb2dyZXNzIiwicGFydCIsInByb2dyZXNzRXZlbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJwcnYiLCJjdXIiLCJsb2FkZWQiLCJieVBhcnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwicCIsInZhbHVlIiwiZW50cmllcyIsImFwcGVuZCIsIkJsb2IiLCJwb3N0Iiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsImZvbGRlciIsInBhcmVudCIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZU5vZGUiLCJkZWxldGVkIiwibWFpbCIsImRlbGV0ZWROb2RlcyIsIm5vZGVzIiwic2hhcmVkTm9kZXMiLCJub2Rlc1NoYXJlZFdpdGhNZSIsInR5cGUiLCJkZWxldGVOb2RlU2hhcmluZyIsImR1cGxpY2F0ZU5vZGUiLCJmb2xkZXJJZCIsImN1c3RvbU5hbWUiLCJkZWxldGVOb2RlQ2xvdWRUcmFzaCIsImlkcyIsInNoYXJlTm9kZXMiLCJzaGFyZU5vZGVGaW5pc2giLCJ1cGRhdGVOb2RlIiwiaXNGYXZvcml0ZSIsImRlbGV0ZWRBdCIsImRlbGV0ZWRNYWlscyIsIm1haWxUeXBlIiwibWFpbHMiLCJtIiwidXBkYXRlQXBwTm90aWZpY2F0aW9ucyIsIm5vdGlmaWNhdGlvbnMiLCJlbmFibGVBbGwiLCJjbG91ZCIsImRpc2FibGVBbGxVbnRpbCIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRzIiwiZHJhZnRNYWlscyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwic2VuZGVyRmlsZXMiLCJkZWxldGVEcmFmdE1haWwiLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJOb2RlIiwicmVjb3Zlck1haWwiLCJtYWlsSWQiLCJkZWxldGVGaWxlIiwiZGVsZXRlTm9kZSIsIm1vdmVOb2RlcyIsIm5vZGVJZHMiLCJwYXJlbnROb2RlSWQiLCJkZWxldGVNYWlsIiwiaGFzIiwicmVjZWl2ZWRNYWlscyIsInNvbWUiLCJmaWxlTWFpbCIsImVuY3J5cHRlZE5hbWVLZXkiLCJmaWxlbmFtZSIsIm1lIiwiaW5jbHVkZXMiLCJvdGhlcnMiLCJkYkdldCIsImZpZWxkIiwianNvbiIsInJlcyIsImRiU2V0IiwiZGJTZWFyY2giLCJzZWFyY2giLCJkcmFmdE1haWxJZCIsInNlbmRXYWl0aW5nRW1haWxzIiwic2VudE1haWxzIiwiZmlsdGVyZWQiLCJzZW5kT25lTWFpbCIsInJlY2lwaWVudCIsImZpbGVDb250ZW50Iiwib25Eb3dubG9hZFByb2dyZXNzIiwicHJvZ3Jlc3NEZWNyeXB0IiwiQnl0ZXMiLCJjb25zb2xlIiwibG9nIiwiZnJvbSIsImNvbnRlbnRVcmwiLCJ0b3RhbFNpemUiLCJjb250ZW50IiwibWF5YmVQYXJ0cyIsIm1heWJlQ29udGVudCIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwiZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyIsImZpbGVQYXJ0cyIsImJ1ZiIsInRpbWVvdXQiLCJwciIsIm1kNVBhcnQiLCJzb3J0IiwiYSIsImIiLCJmaW5hbGl6ZSIsImVuY3J5cHRlZENvbnRlbnQiLCJzcmMiLCJtZDVDb250ZW50IiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJjbG91ZEZpbGVEYXlzRm9yRGVsZXRlIiwiY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeU1heEZpbGVDb3VudCIsImdldEp3dCIsImV4cCIsIm5vdyIsImluY2x1ZGVFbWFpbCIsInNlc3Npb25TdG9yYWdlIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvbkp3dCIsImxvYWQiLCJsb2NhbEp3dCIsInNhdmUiLCJ1cGRhdGVBcHBTZXR0aW5ncyIsInNldHRpbmdzIiwidW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50IiwiY291bnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBNYWlsVHlwZSwgTm9kZVR5cGUgfSBmcm9tIFwiLi8uLi96ZXVzL2luZGV4XCI7XG5pbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2Vzc1Jlc3BvbnNlLCBVc2VyRGF0YSB9IGZyb20gXCIuLi9CYXNlQ2xpZW50LmpzXCI7XG5pbXBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IG5vZGVzQ2FjaGUsIGZpbGVzQ2FjaGUsIHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiwgZW5jcnlwdFNlY3JldHN0cmVhbSB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBncWxOb2RlRnVsbFRvSW50ZXJuYWxGdWxsLFxuICBncWxOb2RlVG9FeHRlcm5hbCxcbiAgZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbCxcbiAgaW50ZXJuYWxOb2RlVG9Ob2RlXG59IGZyb20gXCIuL2NvbnZlcnQvbm9kZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBNYWlsRmlsZUlucHV0LFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBOb2RlLFxuICBOb2RlRnVsbCxcbiAgVXNlckFwcFNldHRpbmdzLFxuICBVc2VyQXBwTm90aWZpY2F0aW9ucyxcbiAgRmlsZU1ldGFkYXRhIGFzIFNlY3JlY3lGaWxlLFxuICBXYWl0aW5nUmVjZWl2ZWRNYWlsLFxuICBEcmFmdE1haWwsXG4gIE1haWxSZWNpcGllbnRJbnB1dCxcbiAgU2hhcmVOb2Rlc0lucHV0LFxuICBOYW1lS2V5SW5wdXQsXG4gIE1haWwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBGaWxlUGFydFJlc3BvbnNlLFxuICBGaWxlQ29udGVudFBhcnRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGdxbEZpbGVUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9maWxlLmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleVBhaXIgfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0Q3J5cHRvQm94LCBlbmNyeXB0Q3J5cHRvQm94IH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2hvcnRpZFwiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9tZDUuanNcIjtcbmltcG9ydCB7IGVuY3J5cHQsIGRlY3J5cHQgfSBmcm9tIFwiLi4vd29ya2VyL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHtcbiAgY2h1bmtzLFxuICBjb25jYXRlbmF0ZSxcbiAgZW51bWVyYXRlLFxuICBwcm9taXNlQWxsTGltaXRcbn0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICBmaWxlU2VsZWN0b3IsXG4gIG1haWxTZWxlY3RvcixcbiAgbm9kZUZ1bGxTZWxlY3RvcixcbiAgbm9kZVNlbGVjdG9yXG59IGZyb20gXCIuL3R5cGVzL3NlbGVjdG9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSaWdodHMgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L21haWwuanNcIjtcbmltcG9ydCB0eXBlIHsgSnd0UGF5bG9hZCB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbi8vIGltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvaW5kZXguanNcIjtcbi8vIGltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yQmFzaWMsXG4gIEVycm9yTm90RXhpc3QsXG4gIEVycm9yTGltaXRcbn0gZnJvbSBcIi4uL2Vycm9yLmpzXCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50IH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IHNlcmlhbGl6ZSB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBlbmNyeXB0TmFtZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIG5hbWVLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZW5jcnlwdFNlY3JldHN0cmVhbShcbiAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgc29kaXVtLmZyb21fc3RyaW5nKG5hbWUpXG4gICk7XG4gIGNvbnN0IG5hbWVFbmNyeXB0ZWQgPSBzb2RpdW0udG9faGV4KGRhdGEpO1xuICByZXR1cm4gbmFtZUVuY3J5cHRlZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5Q2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XG4gIGp3dDogc3RyaW5nO1xuXG4gIGp3dERlY29kZWQ6IEp3dFBheWxvYWQ7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuand0RGVjb2RlZCA9IGRlY29kZSh1YUp3dCkgYXMgSnd0UGF5bG9hZDtcbiAgICB0aGlzLiNrZXlzID0gdWFLZXlzO1xuICB9XG5cbiAgZ2V0IHB1YmxpY0tleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNrZXlzLnB1YmxpY0tleTtcbiAgfVxuXG4gIGdldCBhcHBVc2VySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5qd3REZWNvZGVkLnN1YiA/PyBcIlwiO1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBhZGRGaWxlVG9IaXN0b3J5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBBZGRGaWxlVG9IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYWRkRmlsZVRvSGlzdG9yeSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFkZEZpbGVUb0hpc3RvcnkuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYWRkRmlsZVRvSGlzdG9yeTtcbiAgICB9XG5cbiAgICBpZiAoYWRkRmlsZVRvSGlzdG9yeS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGFkZEZpbGVUb0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdxbE5vZGVGdWxsVG9JbnRlcm5hbEZ1bGwoXG4gICAgICBhZGRGaWxlVG9IaXN0b3J5LmFkZEZpbGVUb0hpc3RvcnksXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IG5vZGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW1xuICAgICAgICAgIHsgaW5wdXQsIG5vZGVJZCB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gU2hhcmVGaWxlSW5IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBzaGFyZUZpbGVJbkhpc3Rvcnk6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbE5vZGVUb05vZGUobm9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxzdHJpbmc+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZmlsZUJ1ZmZlciA9XG4gICAgICBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSkgOiBmaWxlO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSBjb21wcmVzcyhmaWxlQnVmZmVyKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MsIHNpZ25hbCk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBsb2FkRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZVNpemU6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlU2l6ZUJlZm9yZTogZmlsZUJ1ZmZlci5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkRmlsZUtleSksXG4gICAgICAgICAgbWQ1RW5jcnlwdGVkLFxuICAgICAgICAgIG1kNTogbWQ1RmlsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBsb2FkRmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGxvYWRGaWxlOiB7XG4gICAgICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVBhcnRTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1cmw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICh1cGxvYWRGaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnQ6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgcGVyY2VudDogMVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlUGFydEVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlUGFydEVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVQYXJ0RW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZVBhcnRFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZVBhcnRFbmQudXBsb2FkRmlsZVBhcnRFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgICA+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgdXBsb2FkRmlsZUVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlRW5kUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRGaWxlRW5kOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1cGxvYWRGaWxlRW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZUVuZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxvYWRGaWxlRW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlRW5kO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVFbmQudXBsb2FkRmlsZUVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZUVuZC51cGxvYWRGaWxlRW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZVBhcnRTaXplKSlcbiAgICApKSB7XG4gICAgICBjaHVua1BhcnRzLnB1c2goe1xuICAgICAgICBvcmRlcjogaW5kZXggKyAxLFxuICAgICAgICBkYXRhOiBjaHVuayxcbiAgICAgICAgbWQ1OiBhd2FpdCBtZDUoY2h1bmspXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBQcm9ncmVzc0V2ZW50PiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAocGFydDogbnVtYmVyLCBwcm9ncmVzc0V2ZW50OiBQcm9ncmVzc0V2ZW50KTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIubG9hZGVkLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IGN1cnJlbnQgLyBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZVBhcnRSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtQYXJ0cy5maW5kKHAgPT4gcC5vcmRlciA9PT0gcGFydC5vcmRlcik7XG4gICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnQuZmllbGRzKSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgIFwiZmlsZVwiLFxuICAgICAgICBuZXcgQmxvYihbY2h1bmsuZGF0YV0pLFxuICAgICAgICBgJHt1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHByb2dyZXNzRXZlbnQgPT5cbiAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICAvLyBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIC8vICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRocm93IGU7XG4gICAgICAvLyB9XG4gICAgfTtcblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkRW5kZWQoKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBub2RlSWQsXG4gICAgZW5jcnlwdFByb2dyZXNzLFxuICAgIHVwbG9hZFByb2dyZXNzLFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbm9kZUlkPzogc3RyaW5nO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGZpbGVJZCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh7XG4gICAgICBmaWxlLFxuICAgICAgZW5jcnlwdFByb2dyZXNzLFxuICAgICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgICBzaWduYWxcbiAgICB9KTtcblxuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlSW5DbG91ZCh7XG4gICAgICBmaWxlSWQ6IGZpbGVJZC5kYXRhLFxuICAgICAgbmFtZSxcbiAgICAgIG5vZGVJZFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIG5vZGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KGtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBrZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG4gICAgY29uc3QgeyBjcmVhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQ3JlYXRlRm9sZGVyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUZvbGRlcjogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghY3JlYXRlRm9sZGVyKSB7XG4gICAgICAvL3Rocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZUZvbGRlci5jcmVhdGVGb2xkZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICBjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Py51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlTm9kZSh7XG4gICAgICAgICAgICBub2RlSWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmb2xkZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZSh7XG4gICAgaWQsXG4gICAgZGVsZXRlZFxuICB9OiB7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIG5vZGU6IFtcbiAgICAgICAgeyBkZWxldGVkLCBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmICghbm9kZS5ub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKG5vZGUubm9kZSwgdGhpcy4ja2V5cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxTZWNyZWN5RmlsZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZVF1ZXJ5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IGZpbGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUuZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZS5maWxlLCB0aGlzLiNrZXlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG1haWwoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8TWFpbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBtYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBRdWVyeU1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWFpbDogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFtYWlsLm1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG1haWwubWFpbCwgdGhpcy4ja2V5cyk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE5vZGVzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIERlbGV0ZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRlbGV0ZWROb2Rlcy5kZWxldGVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwobm9kZSwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkTm9kZXMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNoYXJlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHNoYXJlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFNoYXJlZE5vZGVzUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgc2hhcmVkTm9kZXM6IG5vZGVTZWxlY3RvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVkTm9kZXMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVkTm9kZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIHNoYXJlZE5vZGVzLnNoYXJlZE5vZGVzKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZXNTaGFyZWRXaXRoTWUoXG4gICAgdHlwZT86IE5vZGVUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2Rlc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBub2Rlc1NoYXJlZFdpdGhNZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2Rlc1NoYXJlZFdpdGhNZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2Rlc1NoYXJlZFdpdGhNZTogbm9kZVNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZXNTaGFyZWRXaXRoTWUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbm9kZXNTaGFyZWRXaXRoTWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIG5vZGVzU2hhcmVkV2l0aE1lLm5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZVNoYXJpbmcoe1xuICAgIG5vZGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU5vZGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVTaGFyaW5nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGVTaGFyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZVNoYXJpbmcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZVNoYXJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlU2hhcmluZy5kZWxldGVOb2RlU2hhcmluZ1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgKCR7bm9kZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkdXBsaWNhdGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIER1cGxpY2F0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZHVwbGljYXRlTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkdXBsaWNhdGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZHVwbGljYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkdXBsaWNhdGVOb2RlO1xuICAgIH1cblxuICAgIGlmIChkdXBsaWNhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZHVwbGljYXRlTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGR1cGxpY2F0ZU5vZGUuZHVwbGljYXRlTm9kZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVOb2RlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTm9kZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVOb2RlQ2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlQ2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlQ2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU5vZGVDbG91ZFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGVDbG91ZFRyYXNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZUNsb3VkVHJhc2guZGVsZXRlTm9kZUNsb3VkVHJhc2ggPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZTogW1xuICAgICAgICB7IG5vZGVJZCwgdXNlcklkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZU5vZGVzOiBTaGFyZU5vZGVzSW5wdXQgPSB7XG4gICAgICBub2RlczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZU5vZGUubm9kZXMpIHtcbiAgICAgIGNvbnN0IG5hbWVLZXkgPSBhd2FpdCB0aGlzLnBlck5vZGUoaWQsIHVzZXIuZGF0YS5wdWJsaWNLZXkpO1xuICAgICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgICAgc2hhcmVOb2Rlcy5ub2Rlcy5wdXNoKG5hbWVLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlRmluaXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZUZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZU5vZGVzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlRmluaXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNoYXJlTm9kZUZpbmlzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGVGaW5pc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGVGaW5pc2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzaGFyZU5vZGVGaW5pc2guc2hhcmVOb2RlRmluaXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5vZGUoe1xuICAgIG5vZGVJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBOb2RlICR7bm9kZUlkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmFjY2Vzcz8ubmFtZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYXZlIGFjY2VzcyB0byBub2RlICR7bm9kZUlkfWApO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IG5vZGUuYWNjZXNzPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZU5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVOb2RlLnVwZGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICB1cGRhdGVOb2RlLnVwZGF0ZU5vZGUsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRNYWlscyh7XG4gICAgbWFpbFR5cGVcbiAgfToge1xuICAgIG1haWxUeXBlOiBNYWlsVHlwZTtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE1haWxbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRNYWlscyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRlbGV0ZWRNYWlsczogW1xuICAgICAgICB7IG1haWxUeXBlIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZWRNYWlsc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkTWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVkTWFpbHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVkTWFpbHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlZE1haWxzO1xuICAgIH1cblxuICAgIGNvbnN0IG1haWxzID0gbmV3IEFycmF5PE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVsZXRlZE1haWxzLmRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMoXG4gICAgbm90aWZpY2F0aW9uczogUGFydGlhbDxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlckFwcE5vdGlmaWNhdGlvbnM+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBkYXRlQXBwTm90aWZpY2F0aW9uczogW1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBOb3RpZmljYXRpb25zUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zLnVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy51cGRhdGVBcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlckFwcE5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFwcE5vdGlmaWNhdGlvbnMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYXBwTm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoYXBwTm90aWZpY2F0aW9ucy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBhcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQmFzaWMgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKG1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbWFpbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmREcmFmdE1haWwoXG4gICAgICBtYWlsLmRhdGEubWFpbEludGVncml0eUlkLFxuICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFdhaXRpbmdSZWNlaXZlZE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgd2FpdGluZ1JlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB1c2VyLnVzZXIud2FpdGluZ1JlY2VpdmVkTWFpbHMubWFwKG0gPT4gKHtcbiAgICAgIGlkOiBnZW5lcmF0ZSgpLFxuICAgICAgLi4ubSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKG0uZGF0ZSBhcyBzdHJpbmcpXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICB7IGJvZHksIHN1YmplY3QsIGZpbGVzLCByZWNpcGllbnRzSWRzLCByZXBseVRvIH06IFBhcnRpYWw8TmV3TWFpbD5cbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxEcmFmdE1haWw+XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBkcmFmdHMgPSBhd2FpdCB0aGlzLmRyYWZ0TWFpbHMoKTtcbiAgICBpZiAoIWRyYWZ0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRyYWZ0cy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICByZXR1cm4gZHJhZnRzO1xuICAgIH1cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5kYXRhLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdXBkYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzSWRzLFxuICAgICAgICAgIHJlcGx5VG8sXG4gICAgICAgICAgYm9keTogYm9keVxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3RcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlRHJhZnRNYWlsOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsLnVwZGF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwudXBkYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRHJhZnRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVEcmFmdE1haWwuZGVsZXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZURyYWZ0TWFpbC5kZWxldGVEcmFmdE1haWwgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTWFpbFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTWFpbFRyYXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVNYWlsVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTWFpbFRyYXNoO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlTWFpbFRyYXNoLmRlbGV0ZU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVNYWlsVHJhc2guZGVsZXRlTWFpbFRyYXNoXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlNYWlsVHJhc2g6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRW1wdHlNYWlsVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5TWFpbFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZW1wdHlNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaFxuICAgIH07XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlDbG91ZFRyYXNoOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVtcHR5Q2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5Q2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVtcHR5Q2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBlbXB0eUNsb3VkVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eUNsb3VkVHJhc2guZW1wdHlDbG91ZFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGVtcHR5Q2xvdWRUcmFzaC5lbXB0eUNsb3VkVHJhc2hcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck5vZGUoXG4gICAgaWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWNvdmVyTm9kZTogW1xuICAgICAgICB7IGlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVjb3Zlck5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVjb3Zlck5vZGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVjb3Zlck5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlY292ZXJOb2RlLnJlY292ZXJOb2RlID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcmVjb3Zlck1haWw6IFtcbiAgICAgICAgeyBtYWlsSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICByZWNvdmVyTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZWNvdmVyTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVjb3Zlck1haWwucmVjb3Zlck1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGaWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZpbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVGaWxlLmRlbGV0ZUZpbGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZSh7XG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlLmRlbGV0ZU5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZU5vZGVzKHtcbiAgICBub2RlSWRzLFxuICAgIHBhcmVudE5vZGVJZFxuICB9OiB7XG4gICAgbm9kZUlkczogc3RyaW5nW107XG4gICAgcGFyZW50Tm9kZUlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZU5vZGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWRzLFxuICAgICAgICAgIHBhcmVudE5vZGVJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZU5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVOb2Rlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVOb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlTm9kZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlTm9kZXMubW92ZU5vZGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWwoe1xuICAgIG1haWxJZFxuICB9OiB7XG4gICAgbWFpbElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU1haWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVNYWlsLmRlbGV0ZU1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5vZGVJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBpZiAobm9kZUlkICYmICFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgaWYgKCFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFRoZSBub2RlICR7bm9kZUlkfSBkb2VzIG5vdCBleGlzdHNgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBpZiAoIXJlY2VpdmVkTWFpbHMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjZWl2ZWRNYWlscy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFpbCA9IHJlY2VpdmVkTWFpbHMuZGF0YS5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU1haWwgPSBtYWlsLmZpbGVzLmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuXG4gICAgICAgIGlmICghZmlsZU1haWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2FuJ3QgZmluZCBtYWlsIHdpdGggdGhlIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlS2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZU1haWwua2V5KSxcbiAgICAgICAgICBtYWlsLnNlbmRlci5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICk7XG5cbiAgICAgICAga2V5ID0gc29kaXVtLnRvX2hleChmaWxlS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IGZpbGUua2V5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBmaWxlLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgbWVzc2FnZTogXCJVbmV4cGVjdGVkIGVycm9yIDNcIlxuICAgICAgfTtcbiAgICB9XG5cbiAgICBrZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbmFtZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KG5hbWVLZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3gobmFtZUtleSwgdGhpcy4ja2V5cy5wdWJsaWNLZXksIHRoaXMuI2tleXMucHJpdmF0ZUtleSlcbiAgICApO1xuXG4gICAgY29uc3QgeyBzYXZlSW5DbG91ZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzYXZlSW5DbG91ZDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGltaXRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNhdmVJbkNsb3VkUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVJbkNsb3VkOiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNhdmVJbkNsb3VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmICghc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIGNvbnN0IG1lID0gbm9kZS5wYXJlbnQ/LnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPVxuICAgICAgICBub2RlLnBhcmVudD8udXNlcnMuZmlsdGVyKFxuICAgICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgICApID8/IFtdO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3RoZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJHZXQ8VT4oe1xuICAgIGZpZWxkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkdldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYkdldDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkdldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiR2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJHZXQuanNvbiBhcyB7IHJlczogVSB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IChkYlNldC5kYlNldCBhcyB7IHJlczogVCB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZWFyY2g8VD4oe1xuICAgIHNlYXJjaCxcbiAgICBmaWVsZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFRbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiU2VhcmNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRiU2VhcmNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgZmllbGRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2VhcmNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZWFyY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2VhcmNoLmpzb24gYXMgdW5rbm93biBhcyBUW11cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBpZiAoIWRyYWZ0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcmFmdHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZGF0YS5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZWNpcGllbnRzID0gbmV3IEFycmF5PE1haWxSZWNpcGllbnRJbnB1dD4oKTtcblxuICAgIGNvbnN0IHRlbXBvcmFyeVJlY2lwaWVudHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgZHJhZnQudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBlbWFpbFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goZW1haWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHsgaWQgfSBvZiBkcmFmdC5yZWNpcGllbnRzKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzZW5kRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNlbmREcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBkcmFmdE1haWxJZDogZHJhZnQubWFpbEludGVncml0eUlkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTZW5kRHJhZnRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmREcmFmdE1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2VuZERyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNlbmREcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZERyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZERyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHNlbmREcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFzZW5kRHJhZnRNYWlsLnNlbmREcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2VuZERyYWZ0TWFpbC5zZW5kRHJhZnRNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRXYWl0aW5nRW1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICAvLyBUT0RPIG9wdGkgdGhpc1xuICAgIGNvbnN0IG1haWxzID0gYXdhaXQgdGhpcy5zZW50TWFpbHMoKTtcblxuICAgIGlmICghbWFpbHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobWFpbHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcmVkID0gbWFpbHMuZGF0YS5maWx0ZXIobSA9PiBtLnRlbXBvcmFyeVJlY2lwaWVudHMubGVuZ3RoID4gMCk7XG5cbiAgICBmb3IgKGNvbnN0IG1haWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIG1haWwudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICAgICAgbWFpbC5maWxlcyxcbiAgICAgICAgICAgIG1haWwuc3ViamVjdCxcbiAgICAgICAgICAgIG1haWwuYm9keSxcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICByZWNvdmVyTm9kZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8RHJhZnRNYWlsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZW5kZXJGaWxlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLmtleSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBjcmVhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBDcmVhdGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlRHJhZnRNYWlsOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsLmNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwuY3JlYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgb25Eb3dubG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuICAgIHByb2dyZXNzRGVjcnlwdD86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVaW50OEFycmF5PiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBmaWxlQ29udGVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEJ5dGVzOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSwgdHlwZW9mIGUpO1xuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMSwgMiwgM10pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgVWludDhBcnJheSkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRDbG91ZFwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRMaXRlXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXJQdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVDb250ZW50LmZpbGU7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBEb3dubG9hZFByb2dyZXNzPiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXG4gICAgICBwYXJ0OiBudW1iZXIsXG4gICAgICBwcm9ncmVzc0V2ZW50OiBEb3dubG9hZFByb2dyZXNzXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IHRyYW5zZmVycmVkQnl0ZXMgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIudHJhbnNmZXJyZWRCeXRlcyxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIoZmlsZS50b3RhbFNpemUpO1xuICAgICAgb25Eb3dubG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcyxcbiAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgdHJhbnNmZXJyZWRCeXRlc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMgPSBhc3luYyAoXG4gICAgICBmaWxlUGFydHM6IEZpbGVDb250ZW50UGFydFtdXG4gICAgKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTx7IGRhdGE6IFVpbnQ4QXJyYXk7IG9yZGVyOiBudW1iZXIgfT4oKTtcblxuICAgICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVDb250ZW50UGFydCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICBhd2FpdCBreVxuICAgICAgICAgICAgLmdldChwYXJ0LmNvbnRlbnRVcmwsIHtcbiAgICAgICAgICAgICAgdGltZW91dDogZmFsc2UsXG4gICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcHIgPT4gb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwciksXG4gICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgICAgMyxcbiAgICAgICAgZmlsZVBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb25jYXRlbmF0ZShcbiAgICAgICAgLi4ucGFydHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChwID0+IHAuZGF0YSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKFxuICAgICAgZW5jcnlwdGVkQ29udGVudDogVWludDhBcnJheVxuICAgICk6IFByb21pc2U8VWludDhBcnJheT4gPT4ge1xuICAgICAgLy8gY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKGVuY3J5cHRlZENvbnRlbnQpKSk7XG4gICAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGUubWQ1RW5jcnlwdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGUua2V5KSxcbiAgICAgICAgZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgICA/IGZpbGUuc2VuZGVyUHVibGljS2V5XG4gICAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgICAgPyBmaWxlLnB1YmxpY0tleVxuICAgICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgZGVjcnlwdChrZXksIGVuY3J5cHRlZENvbnRlbnQsIHByb2dyZXNzRGVjcnlwdCwgc2lnbmFsKTtcblxuICAgICAgLy8gY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihzcmMpKSk7XG4gICAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlLm1kNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuY29tcHJlc3Moc3JjKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudCA9XG4gICAgICBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRMaXRlXCJcbiAgICAgICAgPyBmaWxlLmNvbnRlbnRcbiAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gYXdhaXQgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyhmaWxlLnBhcnRzKVxuICAgICAgICA6IGZpbGUubWF5YmVDb250ZW50XG4gICAgICAgID8gZmlsZS5tYXliZUNvbnRlbnRcbiAgICAgICAgOiBmaWxlLm1heWJlUGFydHNcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzKGZpbGUubWF5YmVQYXJ0cylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgaWYgKCFlbmNyeXB0ZWRDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGF3YWl0IGZpbmFsaXplKGVuY3J5cHRlZENvbnRlbnQpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWFkTWFpbDogW1xuICAgICAgICB7IG1haWxJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVhZE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVhZE1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAocmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAocmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXJlYWRNYWlsLnJlYWRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlYWRNYWlsLnJlYWRNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVucmVhZE1haWwoe1xuICAgIG1haWxJZFxuICB9OiB7XG4gICAgbWFpbElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVucmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdW5yZWFkTWFpbDogW1xuICAgICAgICB7IG1haWxJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVW5yZWFkTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1bnJlYWRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVucmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1bnJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVucmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmICh1bnJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdW5yZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXVucmVhZE1haWwudW5yZWFkTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1bnJlYWRNYWlsLnVucmVhZE1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYXBwU2V0dGluZ3MoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyPy5hcHBTZXR0aW5ncykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1c2VyLnVzZXIuYXBwU2V0dGluZ3NcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0Snd0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuand0RGVjb2RlZC5leHAgJiYgdGhpcy5qd3REZWNvZGVkLmV4cCAqIDEwMDAgPCBEYXRlLm5vdygpKSB7XG4gICAgICByZXR1cm4gdGhpcy5qd3Q7XG4gICAgfVxuXG4gICAgY29uc3QgeyBnZXRKd3QgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZ2V0Snd0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbmNsdWRlRW1haWw6ICEhdGhpcy5qd3REZWNvZGVkLmVtYWlsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEp3dFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqd3Q6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZ2V0Snd0KSB7XG4gICAgICByZXR1cm4gdGhpcy5qd3Q7XG4gICAgfVxuXG4gICAgaWYgKGdldEp3dC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihnZXRKd3QubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdGhpcy5qd3QgPSBnZXRKd3Quand0O1xuICAgIHRoaXMuand0RGVjb2RlZCA9IGRlY29kZShnZXRKd3Quand0KSBhcyBKd3RQYXlsb2FkO1xuXG4gICAgY29uc3Qgc2Vzc2lvblN0b3JhZ2UgPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZSA9IGdldFN0b3JhZ2UoZmFsc2UpO1xuXG4gICAgY29uc3Qgc2Vzc2lvbkp3dCA9IHNlc3Npb25TdG9yYWdlLmp3dC5sb2FkKCk7XG4gICAgY29uc3QgbG9jYWxKd3QgPSBsb2NhbFN0b3JhZ2Uuand0LmxvYWQoKTtcblxuICAgIGlmIChzZXNzaW9uSnd0KSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5qd3Quc2F2ZShnZXRKd3Quand0KTtcbiAgICB9XG5cbiAgICBpZiAobG9jYWxKd3QpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5qd3Quc2F2ZShnZXRKd3Quand0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0Snd0Lmp3dDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcFNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBTZXR0aW5nc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVBcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBjbG91ZEZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGlzdG9yeU1heEZpbGVDb3VudDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBTZXR0aW5ncykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZUFwcFNldHRpbmdzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBTZXR0aW5ncy5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwU2V0dGluZ3MudXBkYXRlQXBwU2V0dGluZ3NcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxSZWNlaXZlZE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICByZWNlaXZlZE1haWxzOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IG5ldyBBcnJheTxSZWNlaXZlZE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgdXNlci51c2VyLnJlY2VpdmVkTWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHJlY2VpdmVkTWFpbHMucHVzaChtYWlsIGFzIFJlY2VpdmVkTWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZWNlaXZlZE1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbnRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxTZW50TWFpbFtdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHNlbnRNYWlsczogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IHNlbnRNYWlscyA9IG5ldyBBcnJheTxTZW50TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiB1c2VyLnVzZXIuc2VudE1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbnRNYWlsc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkcmFmdE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPERyYWZ0TWFpbFtdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIGRyYWZ0TWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBkcmFmdE1haWxzID0gbmV3IEFycmF5PERyYWZ0TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiB1c2VyLnVzZXIuZHJhZnRNYWlscykge1xuICAgICAgY29uc3QgZHJhZnQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKSBhcyBEcmFmdE1haWw7XG4gICAgICBpZiAoZHJhZnQpIHtcbiAgICAgICAgZHJhZnRNYWlscy5wdXNoKGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRyYWZ0TWFpbHNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJOb2RlID0gYXN5bmMgKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5ub2RlKHsgaWQ6IG5vZGVJZCB9KTtcbiAgICAgIG5vZGUgPSBub2Rlc0NhY2hlLmdldChub2RlSWQpO1xuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUtleSA9IG5vZGUuYWNjZXNzPy5uYW1lS2V5O1xuXG4gICAgaWYgKCFuYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczpcbiAgICAgICAgXCJoaXN0b3J5XCIgaW4gbm9kZVxuICAgICAgICAgID8gbm9kZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBmLmlkLFxuICAgICAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLmtleSksXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogW11cbiAgICB9O1xuICB9O1xuXG4gIGFzeW5jIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCgpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxudW1iZXI+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudDoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBVbnJlYWRSZWNlaXZlZE1haWxzQ291bnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjb3VudDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQuY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZWFjaFVzZXIgPSBhc3luYyAoXG4gICAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSxcbiAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGlkT3JNYWlsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNYWlsUmVjaXBpZW50SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IHUgPSB1c2Vyc0NhY2hlLmdldChpZE9yTWFpbCk7XG5cbiAgICBpZiAoIXUgfHwgIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXEgPSBhd2FpdCB0aGlzLnVzZXIoe1xuICAgICAgICAgIHVzZXJJZDogaWRPck1haWwsXG4gICAgICAgICAgd2l0aFB1YmxpY0tleTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXEpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB1ID0gcmVxLmRhdGE7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZXIgJHtpZE9yTWFpbH0gaGF2ZSBubyBwdWJsaWMga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBpZW50c0ZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGZpbGVJbkhpc3Rvcnkua2V5O1xuICAgICAgcmVjaXBpZW50c0ZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudElkOiB1LmlkLFxuICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiByZWNpcGllbnRzRmlsZXNcbiAgICB9O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBR0EsT0FBT0EsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLE9BQWxCO0FBRUEsU0FBU0MsVUFBVCxRQUEyQixrQkFBM0I7QUFDQSxTQUFTQyxVQUFULEVBQXFCQyxVQUFyQixFQUFpQ0MsVUFBakMsUUFBbUQsYUFBbkQ7QUFFQSxTQUFTQyxrQkFBVCxFQUE2QkMsbUJBQTdCLFFBQXdELG1CQUF4RDtBQUNBLFNBQVNDLFFBQVQsRUFBbUJDLFVBQW5CLFFBQXFDLG9CQUFyQztBQUNBLFNBQ0VDLHlCQURGLEVBRUVDLGlCQUZGLEVBR0VDLHlCQUhGLEVBSUVDLGtCQUpGLFFBS08sbUJBTFA7QUF5QkEsU0FBU0MsaUJBQVQsUUFBa0MsbUJBQWxDO0FBQ0EsU0FBU0MsTUFBVCxRQUF1QixjQUF2QjtBQUVBLFNBQVNDLGdCQUFULEVBQTJCQyxnQkFBM0IsUUFBbUQsb0JBQW5EO0FBRUEsU0FBU0MsUUFBVCxRQUF5QixTQUF6QjtBQUNBLFNBQVNDLEdBQVQsUUFBb0Isa0JBQXBCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsT0FBbEIsUUFBaUMscUJBQWpDO0FBQ0EsU0FDRUMsTUFERixFQUVFQyxXQUZGLEVBR0VDLFNBSEYsRUFJRUMsZUFKRixRQUtPLG1CQUxQO0FBTUEsU0FDRUMsWUFERixFQUVFQyxZQUZGLEVBR0VD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