angular-odata 0.99.0 → 0.100.0

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 (89) hide show
  1. package/README.md +31 -25
  2. package/esm2020/lib/api.mjs +2 -2
  3. package/esm2020/lib/cache/cache.mjs +2 -2
  4. package/esm2020/lib/client.mjs +3 -3
  5. package/esm2020/lib/models/collection.mjs +53 -48
  6. package/esm2020/lib/models/model.mjs +33 -37
  7. package/esm2020/lib/models/options.mjs +35 -14
  8. package/esm2020/lib/module.mjs +4 -4
  9. package/esm2020/lib/options.mjs +4 -3
  10. package/esm2020/lib/resources/query/builder.mjs +4 -6
  11. package/esm2020/lib/resources/query/expressions/base.mjs +1 -1
  12. package/esm2020/lib/resources/query/expressions/compute.mjs +13 -6
  13. package/esm2020/lib/resources/query/expressions/expand.mjs +77 -13
  14. package/esm2020/lib/resources/query/expressions/filter.mjs +11 -5
  15. package/esm2020/lib/resources/query/expressions/orderby.mjs +11 -3
  16. package/esm2020/lib/resources/query/expressions/search.mjs +15 -3
  17. package/esm2020/lib/resources/query/expressions/select.mjs +10 -5
  18. package/esm2020/lib/resources/query/expressions/syntax.mjs +42 -9
  19. package/esm2020/lib/resources/query/handlers.mjs +13 -13
  20. package/esm2020/lib/resources/query/options.mjs +33 -36
  21. package/esm2020/lib/resources/resource.mjs +27 -74
  22. package/esm2020/lib/resources/responses/options.mjs +1 -2
  23. package/esm2020/lib/resources/types/action.mjs +4 -1
  24. package/esm2020/lib/resources/types/batch.mjs +6 -1
  25. package/esm2020/lib/resources/types/count.mjs +4 -1
  26. package/esm2020/lib/resources/types/entity-set.mjs +4 -1
  27. package/esm2020/lib/resources/types/entity.mjs +6 -3
  28. package/esm2020/lib/resources/types/function.mjs +11 -1
  29. package/esm2020/lib/resources/types/media.mjs +4 -1
  30. package/esm2020/lib/resources/types/metadata.mjs +4 -1
  31. package/esm2020/lib/resources/types/navigation-property.mjs +4 -1
  32. package/esm2020/lib/resources/types/property.mjs +4 -1
  33. package/esm2020/lib/resources/types/reference.mjs +4 -1
  34. package/esm2020/lib/resources/types/singleton.mjs +4 -1
  35. package/esm2020/lib/resources/types/value.mjs +4 -1
  36. package/esm2020/lib/schema/callable.mjs +6 -2
  37. package/esm2020/lib/schema/element.mjs +12 -2
  38. package/esm2020/lib/schema/enum-type.mjs +10 -2
  39. package/esm2020/lib/schema/parsers/callable.mjs +3 -2
  40. package/esm2020/lib/schema/parsers/enum-type.mjs +6 -5
  41. package/esm2020/lib/schema/parsers/structured-type.mjs +1 -1
  42. package/esm2020/lib/schema/structured-type.mjs +11 -2
  43. package/esm2020/lib/services/entity-set.mjs +6 -6
  44. package/esm2020/lib/services/factory.mjs +3 -3
  45. package/esm2020/lib/types.mjs +2 -1
  46. package/esm2020/lib/utils/objects.mjs +5 -1
  47. package/fesm2015/angular-odata.mjs +494 -305
  48. package/fesm2015/angular-odata.mjs.map +1 -1
  49. package/fesm2020/angular-odata.mjs +493 -309
  50. package/fesm2020/angular-odata.mjs.map +1 -1
  51. package/lib/models/collection.d.ts +4 -2
  52. package/lib/models/model.d.ts +1 -1
  53. package/lib/models/options.d.ts +16 -14
  54. package/lib/options.d.ts +4 -4
  55. package/lib/resources/query/builder.d.ts +1 -0
  56. package/lib/resources/query/expressions/base.d.ts +1 -0
  57. package/lib/resources/query/expressions/compute.d.ts +3 -2
  58. package/lib/resources/query/expressions/expand.d.ts +40 -12
  59. package/lib/resources/query/expressions/filter.d.ts +22 -21
  60. package/lib/resources/query/expressions/orderby.d.ts +4 -2
  61. package/lib/resources/query/expressions/search.d.ts +5 -2
  62. package/lib/resources/query/expressions/select.d.ts +3 -2
  63. package/lib/resources/query/expressions/syntax.d.ts +12 -2
  64. package/lib/resources/query/handlers.d.ts +12 -12
  65. package/lib/resources/query/options.d.ts +10 -8
  66. package/lib/resources/resource.d.ts +3 -1
  67. package/lib/resources/responses/options.d.ts +2 -3
  68. package/lib/resources/types/action.d.ts +1 -0
  69. package/lib/resources/types/batch.d.ts +1 -0
  70. package/lib/resources/types/count.d.ts +1 -0
  71. package/lib/resources/types/entity-set.d.ts +2 -1
  72. package/lib/resources/types/entity.d.ts +1 -0
  73. package/lib/resources/types/function.d.ts +4 -0
  74. package/lib/resources/types/media.d.ts +1 -0
  75. package/lib/resources/types/metadata.d.ts +1 -0
  76. package/lib/resources/types/navigation-property.d.ts +1 -0
  77. package/lib/resources/types/property.d.ts +1 -0
  78. package/lib/resources/types/reference.d.ts +1 -0
  79. package/lib/resources/types/singleton.d.ts +1 -0
  80. package/lib/resources/types/value.d.ts +1 -0
  81. package/lib/schema/callable.d.ts +4 -4
  82. package/lib/schema/element.d.ts +7 -1
  83. package/lib/schema/enum-type.d.ts +10 -4
  84. package/lib/schema/parsers/callable.d.ts +9 -7
  85. package/lib/schema/parsers/enum-type.d.ts +7 -5
  86. package/lib/schema/parsers/structured-type.d.ts +7 -7
  87. package/lib/schema/structured-type.d.ts +11 -5
  88. package/lib/types.d.ts +6 -5
  89. package/package.json +1 -1
@@ -150,6 +150,10 @@ export const Objects = {
150
150
  if (typeof target != 'object' || target == null) {
151
151
  return target;
152
152
  }
153
+ if (Types.isObject(target) && 'clone' in target) {
154
+ // target is a cloneable object
155
+ return target.clone();
156
+ }
153
157
  const type = Types.rawType(target);
154
158
  let cloneTarget = null;
155
159
  if (map.get(target)) {
@@ -192,4 +196,4 @@ export const Objects = {
192
196
  return cloneTarget;
193
197
  },
194
198
  };
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi91dGlscy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsU0FBUyxPQUFPLENBQUMsS0FBWSxFQUFFLFFBQTZDO0lBQzFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QixPQUFPLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRTtRQUN2QixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDdkMseUZBQXlGO1FBQ3pGLE1BQU0sU0FBUyxHQUFHLENBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FDOUMsQ0FBQztRQUVYLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNqRCxPQUFPLEdBQUcsQ0FB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SUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEdBQVEsRUFBRSxFQUFFO2dCQUN0QyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFFRCxjQUFjO1FBQ2QsSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFO1lBQ25CLFdBQVcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUNwQixXQUFXLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXk6IGFueVtdLCBpdGVyYXRlZTogKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHZvaWQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4KTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBjb25zdCBPYmplY3RzID0ge1xuICBzZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge307XG4gICAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcbiAgfSxcblxuICBnZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBwYXRoIGlzIHN0cmluZyBvciBhcnJheS4gUmVnZXggOiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSAnLicgYW5kIGJyYWNrZXRzLlxuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICApIGFzIGFueVtdO1xuICAgIC8vIEZpbmQgdmFsdWUgaWYgZXhpc3QgcmV0dXJuIG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkIHZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqLCBrZXkpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopIHx8IGRlZlxuICAgICk7XG4gIH0sXG5cbiAgdW5zZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgICAgaWYgKGkgPT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSBkZWxldGUgYWNjW2tleV07XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcbiAgfSxcblxuICBoYXMob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICByZXR1cm4gISFwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqLCBrZXkpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopO1xuICB9LFxuXG4gIG1lcmdlKHRhcmdldDogT2JqZWN0LCBzb3VyY2U6IE9iamVjdCkge1xuICAgIGNvbnN0IG1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gICAgICBmb3IgKGxldCBhdHRyIGluIHNvdXJjZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2VbYXR0cl07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBUeXBlcy5pc1BsYWluT2JqZWN0KHZhbHVlKSAmJiBhdHRyIGluIHRhcmdldCkge1xuICAgICAgICAgIG1lcmdlKHRhcmdldFthdHRyXSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFthdHRyXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICB0YXJnZXRbYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sXG5cbiAgZXF1YWwob2JqZWN0MTogeyBbYXR0cjogc3RyaW5nXTogYW55IH0sIG9iamVjdDI6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmplY3QxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iamVjdDIpO1xuXG4gICAgaWYgKGtleXMxLmxlbmd0aCAhPT0ga2V5czIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5czEpIHtcbiAgICAgIGNvbnN0IHZhbDEgPSBvYmplY3QxW2tleV07XG4gICAgICBjb25zdCB2YWwyID0gb2JqZWN0MltrZXldO1xuICAgICAgY29uc3QgYXJlT2JqZWN0cyA9IFR5cGVzLmlzUGxhaW5PYmplY3QodmFsMSkgJiYgVHlwZXMuaXNQbGFpbk9iamVjdCh2YWwyKTtcbiAgICAgIGlmIChcbiAgICAgICAgKGFyZU9iamVjdHMgJiYgIU9iamVjdHMuZXF1YWwodmFsMSwgdmFsMikpIHx8XG4gICAgICAgICghYXJlT2JqZWN0cyAmJiB2YWwxICE9PSB2YWwyKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgZGlmZmVyZW5jZShcbiAgICBvYmplY3QxOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfSxcbiAgICBvYmplY3QyOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfVxuICApIHtcbiAgICBpZiAoIW9iamVjdDIgfHwgIVR5cGVzLmlzUGxhaW5PYmplY3Qob2JqZWN0MikpIHtcbiAgICAgIHJldHVybiBvYmplY3QxO1xuICAgIH1cbiAgICB2YXIgZGlmZnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdmFyIGtleTtcbiAgICB2YXIgYXJyYXlzTWF0Y2ggPSBmdW5jdGlvbiAoYXJyMTogYW55W10sIGFycjI6IGFueVtdKSB7XG4gICAgICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIGNvbXBhcmUgPSBmdW5jdGlvbiAoaXRlbTE6IGFueSwgaXRlbTI6IGFueSB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpIHtcbiAgICAgIGlmIChpdGVtMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRpZmZzW2tleV0gPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlbTEgIT09IHR5cGVvZiBpdGVtMikge1xuICAgICAgICBkaWZmc1trZXldID0gaXRlbTI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFR5cGVzLmlzUGxhaW5PYmplY3QoaXRlbTEpKSB7XG4gICAgICAgIHZhciBvYmpEaWZmID0gT2JqZWN0cy5kaWZmZXJlbmNlKGl0ZW0xLCBpdGVtMik7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmpEaWZmKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IG9iakRpZmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtMSkpIHtcbiAgICAgICAgaWYgKCFhcnJheXNNYXRjaChpdGVtMSwgaXRlbTIpKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IGl0ZW0yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0xICE9PSBpdGVtMikge1xuICAgICAgICBkaWZmc1trZXldID0gaXRlbTI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoa2V5IGluIG9iamVjdDEpIHtcbiAgICAgIGlmIChvYmplY3QxLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29tcGFyZShvYmplY3QxW2tleV0sIG9iamVjdDJba2V5XSwga2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBvYmplY3QyKSB7XG4gICAgICBpZiAob2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmICghb2JqZWN0MVtrZXldICYmIG9iamVjdDFba2V5XSAhPT0gb2JqZWN0MltrZXldKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IG9iamVjdDJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlmZnM7XG4gIH0sXG5cbiAgcmVzb2x2ZUtleShrZXk6IGFueSwgeyBzaW5nbGUgPSB0cnVlIH06IHsgc2luZ2xlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoWydudW1iZXInLCAnc3RyaW5nJ10uaW5kZXhPZih0eXBlb2Yga2V5KSAhPT0gLTEpIHJldHVybiBrZXk7XG4gICAgaWYgKCFUeXBlcy5pc1BsYWluT2JqZWN0KGtleSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoa2V5KTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBzaW5nbGUpIHtcbiAgICAgIC8vIFNpbmdsZSBwcmltaXRpdmUga2V5IHZhbHVlXG4gICAgICBrZXkgPSB2YWx1ZXNbMF07XG4gICAgfSBlbHNlIGlmICh2YWx1ZXMuc29tZSgodikgPT4gdiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgLy8gQ29tcG9zZSBrZXksIG5lZWRzIGFsbCB2YWx1ZXNcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShrZXkpID8ga2V5IDogdW5kZWZpbmVkO1xuICB9LFxuXG4gIGNsb25lKHRhcmdldDogYW55LCBtYXA/OiBXZWFrTWFwPG9iamVjdCwgYW55Pikge1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkgbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAvLyBjbG9uZSBwcmltaXRpdmUgdHlwZXNcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAnb2JqZWN0JyB8fCB0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gVHlwZXMucmF3VHlwZSh0YXJnZXQpO1xuICAgIGxldCBjbG9uZVRhcmdldDogYW55ID0gbnVsbDtcblxuICAgIGlmIChtYXAuZ2V0KHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBtYXAuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIG1hcC5zZXQodGFyZ2V0LCBjbG9uZVRhcmdldCk7XG5cbiAgICBpZiAodHlwZSAhPSAnU2V0JyAmJiB0eXBlICE9ICdNYXAnICYmIHR5cGUgIT0gJ0FycmF5JyAmJiB0eXBlICE9ICdPYmplY3QnKSB7XG4gICAgICByZXR1cm4gVHlwZXMuY2xvbmUodGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvLyBjbG9uZSBTZXRcbiAgICBpZiAodHlwZSA9PSAnU2V0Jykge1xuICAgICAgY2xvbmVUYXJnZXQgPSBuZXcgU2V0KCk7XG4gICAgICB0YXJnZXQuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBjbG9uZVRhcmdldC5hZGQodGhpcy5jbG9uZSh2YWx1ZSwgbWFwKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbG9uZVRhcmdldDtcbiAgICB9XG5cbiAgICAvLyBjbG9uZSBNYXBcbiAgICBpZiAodHlwZSA9PSAnTWFwJykge1xuICAgICAgY2xvbmVUYXJnZXQgPSBuZXcgTWFwKCk7XG4gICAgICB0YXJnZXQuZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcbiAgICAgICAgY2xvbmVUYXJnZXQuc2V0KGtleSwgdGhpcy5jbG9uZSh2YWx1ZSwgbWFwKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbG9uZVRhcmdldDtcbiAgICB9XG5cbiAgICAvLyBjbG9uZSBBcnJheVxuICAgIGlmICh0eXBlID09ICdBcnJheScpIHtcbiAgICAgIGNsb25lVGFyZ2V0ID0gbmV3IEFycmF5KCk7XG4gICAgICBmb3JFYWNoKHRhcmdldCwgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjbG9uZVRhcmdldFtpbmRleF0gPSB0aGlzLmNsb25lKHZhbHVlLCBtYXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2xvbmUgbm9ybWFsIE9iamVjdFxuICAgIGlmICh0eXBlID09ICdPYmplY3QnKSB7XG4gICAgICBjbG9uZVRhcmdldCA9IG5ldyBPYmplY3QoKTtcbiAgICAgIGZvckVhY2goT2JqZWN0LmtleXModGFyZ2V0KSwgKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgY2xvbmVUYXJnZXRba2V5XSA9IHRoaXMuY2xvbmUodGFyZ2V0W2tleV0sIG1hcCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVUYXJnZXQ7XG4gIH0sXG59O1xuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi91dGlscy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsU0FBUyxPQUFPLENBQUMsS0FBWSxFQUFFLFFBQTZDO0lBQzFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QixPQUFPLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRTtRQUN2QixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDdkMseUZBQXlGO1FBQ3pGLE1BQU0sU0FBUyxHQUFHLENBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FDOUMsQ0FBQztRQUVYLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNqRCxPQUFPLEdBQUcsQ0FB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IjpbImltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXk6IGFueVtdLCBpdGVyYXRlZTogKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHZvaWQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4KTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBjb25zdCBPYmplY3RzID0ge1xuICBzZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge307XG4gICAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcbiAgfSxcblxuICBnZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBwYXRoIGlzIHN0cmluZyBvciBhcnJheS4gUmVnZXggOiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSAnLicgYW5kIGJyYWNrZXRzLlxuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICApIGFzIGFueVtdO1xuICAgIC8vIEZpbmQgdmFsdWUgaWYgZXhpc3QgcmV0dXJuIG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkIHZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqLCBrZXkpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopIHx8IGRlZlxuICAgICk7XG4gIH0sXG5cbiAgdW5zZXQob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICBwYXRoQXJyYXkucmVkdWNlKChhY2MsIGtleSwgaSkgPT4ge1xuICAgICAgaWYgKGkgPT09IHBhdGhBcnJheS5sZW5ndGggLSAxKSBkZWxldGUgYWNjW2tleV07XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcbiAgfSxcblxuICBoYXMob2JqOiBPYmplY3QsIHBhdGg6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHBhdGggaXMgc3RyaW5nIG9yIGFycmF5LiBSZWdleCA6IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBoYXZlICcuJyBhbmQgYnJhY2tldHMuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgVHlwZXMuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG5cbiAgICByZXR1cm4gISFwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqLCBrZXkpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopO1xuICB9LFxuXG4gIG1lcmdlKHRhcmdldDogT2JqZWN0LCBzb3VyY2U6IE9iamVjdCkge1xuICAgIGNvbnN0IG1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gICAgICBmb3IgKGxldCBhdHRyIGluIHNvdXJjZSkge1xuICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2VbYXR0cl07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBUeXBlcy5pc1BsYWluT2JqZWN0KHZhbHVlKSAmJiBhdHRyIGluIHRhcmdldCkge1xuICAgICAgICAgIG1lcmdlKHRhcmdldFthdHRyXSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFthdHRyXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICB0YXJnZXRbYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sXG5cbiAgZXF1YWwob2JqZWN0MTogeyBbYXR0cjogc3RyaW5nXTogYW55IH0sIG9iamVjdDI6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmplY3QxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iamVjdDIpO1xuXG4gICAgaWYgKGtleXMxLmxlbmd0aCAhPT0ga2V5czIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5czEpIHtcbiAgICAgIGNvbnN0IHZhbDEgPSBvYmplY3QxW2tleV07XG4gICAgICBjb25zdCB2YWwyID0gb2JqZWN0MltrZXldO1xuICAgICAgY29uc3QgYXJlT2JqZWN0cyA9IFR5cGVzLmlzUGxhaW5PYmplY3QodmFsMSkgJiYgVHlwZXMuaXNQbGFpbk9iamVjdCh2YWwyKTtcbiAgICAgIGlmIChcbiAgICAgICAgKGFyZU9iamVjdHMgJiYgIU9iamVjdHMuZXF1YWwodmFsMSwgdmFsMikpIHx8XG4gICAgICAgICghYXJlT2JqZWN0cyAmJiB2YWwxICE9PSB2YWwyKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgZGlmZmVyZW5jZShcbiAgICBvYmplY3QxOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfSxcbiAgICBvYmplY3QyOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfVxuICApIHtcbiAgICBpZiAoIW9iamVjdDIgfHwgIVR5cGVzLmlzUGxhaW5PYmplY3Qob2JqZWN0MikpIHtcbiAgICAgIHJldHVybiBvYmplY3QxO1xuICAgIH1cbiAgICB2YXIgZGlmZnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdmFyIGtleTtcbiAgICB2YXIgYXJyYXlzTWF0Y2ggPSBmdW5jdGlvbiAoYXJyMTogYW55W10sIGFycjI6IGFueVtdKSB7XG4gICAgICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIGNvbXBhcmUgPSBmdW5jdGlvbiAoaXRlbTE6IGFueSwgaXRlbTI6IGFueSB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpIHtcbiAgICAgIGlmIChpdGVtMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRpZmZzW2tleV0gPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlbTEgIT09IHR5cGVvZiBpdGVtMikge1xuICAgICAgICBkaWZmc1trZXldID0gaXRlbTI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFR5cGVzLmlzUGxhaW5PYmplY3QoaXRlbTEpKSB7XG4gICAgICAgIHZhciBvYmpEaWZmID0gT2JqZWN0cy5kaWZmZXJlbmNlKGl0ZW0xLCBpdGVtMik7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmpEaWZmKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IG9iakRpZmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtMSkpIHtcbiAgICAgICAgaWYgKCFhcnJheXNNYXRjaChpdGVtMSwgaXRlbTIpKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IGl0ZW0yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0xICE9PSBpdGVtMikge1xuICAgICAgICBkaWZmc1trZXldID0gaXRlbTI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoa2V5IGluIG9iamVjdDEpIHtcbiAgICAgIGlmIChvYmplY3QxLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29tcGFyZShvYmplY3QxW2tleV0sIG9iamVjdDJba2V5XSwga2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBvYmplY3QyKSB7XG4gICAgICBpZiAob2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmICghb2JqZWN0MVtrZXldICYmIG9iamVjdDFba2V5XSAhPT0gb2JqZWN0MltrZXldKSB7XG4gICAgICAgICAgZGlmZnNba2V5XSA9IG9iamVjdDJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlmZnM7XG4gIH0sXG5cbiAgcmVzb2x2ZUtleShrZXk6IGFueSwgeyBzaW5nbGUgPSB0cnVlIH06IHsgc2luZ2xlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoWydudW1iZXInLCAnc3RyaW5nJ10uaW5kZXhPZih0eXBlb2Yga2V5KSAhPT0gLTEpIHJldHVybiBrZXk7XG4gICAgaWYgKCFUeXBlcy5pc1BsYWluT2JqZWN0KGtleSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoa2V5KTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBzaW5nbGUpIHtcbiAgICAgIC8vIFNpbmdsZSBwcmltaXRpdmUga2V5IHZhbHVlXG4gICAgICBrZXkgPSB2YWx1ZXNbMF07XG4gICAgfSBlbHNlIGlmICh2YWx1ZXMuc29tZSgodikgPT4gdiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgLy8gQ29tcG9zZSBrZXksIG5lZWRzIGFsbCB2YWx1ZXNcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShrZXkpID8ga2V5IDogdW5kZWZpbmVkO1xuICB9LFxuXG4gIGNsb25lKHRhcmdldDogYW55LCBtYXA/OiBXZWFrTWFwPG9iamVjdCwgYW55Pikge1xuICAgIGlmIChtYXAgPT09IHVuZGVmaW5lZCkgbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAvLyBjbG9uZSBwcmltaXRpdmUgdHlwZXNcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAnb2JqZWN0JyB8fCB0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoVHlwZXMuaXNPYmplY3QodGFyZ2V0KSAmJiAnY2xvbmUnIGluIHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgY2xvbmVhYmxlIG9iamVjdFxuICAgICAgcmV0dXJuIHRhcmdldC5jbG9uZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSBUeXBlcy5yYXdUeXBlKHRhcmdldCk7XG4gICAgbGV0IGNsb25lVGFyZ2V0OiBhbnkgPSBudWxsO1xuXG4gICAgaWYgKG1hcC5nZXQodGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIG1hcC5nZXQodGFyZ2V0KTtcbiAgICB9XG4gICAgbWFwLnNldCh0YXJnZXQsIGNsb25lVGFyZ2V0KTtcblxuICAgIGlmICh0eXBlICE9ICdTZXQnICYmIHR5cGUgIT0gJ01hcCcgJiYgdHlwZSAhPSAnQXJyYXknICYmIHR5cGUgIT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBUeXBlcy5jbG9uZSh0YXJnZXQpO1xuICAgIH1cblxuICAgIC8vIGNsb25lIFNldFxuICAgIGlmICh0eXBlID09ICdTZXQnKSB7XG4gICAgICBjbG9uZVRhcmdldCA9IG5ldyBTZXQoKTtcbiAgICAgIHRhcmdldC5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGNsb25lVGFyZ2V0LmFkZCh0aGlzLmNsb25lKHZhbHVlLCBtYXApKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsb25lVGFyZ2V0O1xuICAgIH1cblxuICAgIC8vIGNsb25lIE1hcFxuICAgIGlmICh0eXBlID09ICdNYXAnKSB7XG4gICAgICBjbG9uZVRhcmdldCA9IG5ldyBNYXAoKTtcbiAgICAgIHRhcmdldC5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuICAgICAgICBjbG9uZVRhcmdldC5zZXQoa2V5LCB0aGlzLmNsb25lKHZhbHVlLCBtYXApKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsb25lVGFyZ2V0O1xuICAgIH1cblxuICAgIC8vIGNsb25lIEFycmF5XG4gICAgaWYgKHR5cGUgPT0gJ0FycmF5Jykge1xuICAgICAgY2xvbmVUYXJnZXQgPSBuZXcgQXJyYXkoKTtcbiAgICAgIGZvckVhY2godGFyZ2V0LCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNsb25lVGFyZ2V0W2luZGV4XSA9IHRoaXMuY2xvbmUodmFsdWUsIG1hcCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBjbG9uZSBub3JtYWwgT2JqZWN0XG4gICAgaWYgKHR5cGUgPT0gJ09iamVjdCcpIHtcbiAgICAgIGNsb25lVGFyZ2V0ID0gbmV3IE9iamVjdCgpO1xuICAgICAgZm9yRWFjaChPYmplY3Qua2V5cyh0YXJnZXQpLCAoa2V5LCBpbmRleCkgPT4ge1xuICAgICAgICBjbG9uZVRhcmdldFtrZXldID0gdGhpcy5jbG9uZSh0YXJnZXRba2V5XSwgbWFwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZVRhcmdldDtcbiAgfSxcbn07XG4iXX0=