semantifold 0.10.0 → 0.12.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 (56) hide show
  1. package/README.md +2 -2
  2. package/build/src/backends/c.d.ts +2 -1
  3. package/build/src/backends/c.d.ts.map +1 -1
  4. package/build/src/backends/c.js +26 -5
  5. package/build/src/backends/cpp.js +3 -1
  6. package/build/src/backends/kotlin.d.ts +1 -1
  7. package/build/src/backends/kotlin.js +2 -2
  8. package/build/src/backends/ordered-expressions.d.ts +19 -7
  9. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  10. package/build/src/backends/ordered-expressions.js +46 -11
  11. package/build/src/backends/shared.d.ts.map +1 -1
  12. package/build/src/backends/shared.js +30 -2
  13. package/build/src/frontends/c.d.ts +34 -1
  14. package/build/src/frontends/c.d.ts.map +1 -1
  15. package/build/src/frontends/c.js +128 -21
  16. package/build/src/frontends/java.d.ts.map +1 -1
  17. package/build/src/frontends/java.js +23 -1
  18. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  19. package/build/src/frontends/javascript-typescript.js +45 -4
  20. package/build/src/frontends/php.d.ts.map +1 -1
  21. package/build/src/frontends/php.js +54 -3
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +55 -5
  24. package/build/src/language-registry.d.ts.map +1 -1
  25. package/build/src/language-registry.js +33 -6
  26. package/build/src/semantic/effects.js +3 -1
  27. package/build/src/semantic/provenance.d.ts.map +1 -1
  28. package/build/src/semantic/provenance.js +11 -1
  29. package/build/src/semantic/types.d.ts +52 -2
  30. package/build/src/semantic/types.d.ts.map +1 -1
  31. package/build/src/semantic/types.js +14 -2
  32. package/build/src/semantic/validate.js +19 -2
  33. package/build/src/toolchains.js +3 -3
  34. package/docs/adr-expression-breadth.md +186 -0
  35. package/docs/c.md +1 -1
  36. package/docs/kotlin.md +2 -2
  37. package/docs/language-support.md +14 -5
  38. package/docs/parser-qualification.md +1 -1
  39. package/docs/testing.md +5 -4
  40. package/package.json +1 -1
  41. package/src/backends/c.js +23 -4
  42. package/src/backends/cpp.js +1 -0
  43. package/src/backends/kotlin.js +1 -1
  44. package/src/backends/ordered-expressions.js +46 -10
  45. package/src/backends/shared.js +31 -1
  46. package/src/frontends/c.js +135 -19
  47. package/src/frontends/java.js +24 -0
  48. package/src/frontends/javascript-typescript.js +49 -2
  49. package/src/frontends/php.js +61 -2
  50. package/src/frontends/ruby.js +62 -2
  51. package/src/language-registry.js +32 -5
  52. package/src/semantic/effects.js +1 -0
  53. package/src/semantic/provenance.js +8 -0
  54. package/src/semantic/types.js +14 -1
  55. package/src/semantic/validate.js +27 -1
  56. package/src/toolchains.js +2 -2
@@ -1,11 +1,11 @@
1
1
  // @ts-check
2
- import { AndNode, ArrayNode, AssocNode, BlockNode, BlockParametersNode, BeginNode, BreakNode, CallNode, ClassNode, ConstantPathNode, ConstantReadNode, DefNode, ElseNode, FalseNode, HashNode, IfNode, IntegerNode, InstanceVariableWriteNode, InstanceVariableReadNode, InterpolatedStringNode, LocalVariableReadNode, LocalVariableTargetNode, LocalVariableWriteNode, ModuleNode, NextNode, NilNode, OrNode, ParenthesesNode, ProgramNode, RequiredParameterNode, RedoNode, RescueNode, ReturnNode, RetryNode, SelfNode, StatementsNode, StringNode, SymbolNode, TrueNode, UnlessNode, WhileNode, loadPrism } from "@ruby/prism";
2
+ import { AndNode, ArrayNode, AssocNode, BlockNode, BlockParametersNode, BeginNode, BreakNode, CallNode, ClassNode, ConstantPathNode, ConstantReadNode, DefNode, ElseNode, EmbeddedStatementsNode, FalseNode, HashNode, IfNode, IntegerNode, InstanceVariableWriteNode, InstanceVariableReadNode, InterpolatedStringNode, LocalVariableReadNode, LocalVariableTargetNode, LocalVariableWriteNode, ModuleNode, NextNode, NilNode, OrNode, ParenthesesNode, ProgramNode, RequiredParameterNode, RedoNode, RescueNode, ReturnNode, RetryNode, SelfNode, StatementsNode, StringNode, SymbolNode, TrueNode, UnlessNode, WhileNode, loadPrism } from "@ruby/prism";
3
3
  import { missingType, SemantifoldDiagnostic, unsupportedSyntax } from "../diagnostic.js";
4
4
  import { blockReferencesProtectedEntry } from "../semantic/effects.js";
5
5
  import { locationFromOffsets, moduleLocation, utf8ByteOffsetToUtf16Offset } from "../semantic/location.js";
6
6
  import { withAdaptedOperation } from "../semantic/operators.js";
7
7
  import { withParserRanges } from "../semantic/provenance.js";
8
- import { hasOnlyUnicodeScalars } from "../semantic/scalars.js";
8
+ import { hasOnlyUnicodeScalars, scalarType } from "../semantic/scalars.js";
9
9
  import { isTask034ResourceProbe } from "../semantic/capabilities.js";
10
10
  import { hasExactEffectSupport } from "../backends/effects.js";
11
11
  import { requireSourceReturnType } from "./scalars.js";
@@ -132,8 +132,56 @@ function convertExpression(node, filename, source, context, expectedType, preser
132
132
  }
133
133
  return withParserRanges({ kind: /** @type {const} */ ("StringLiteral"), location, value: decoded.value }, { literal: location });
134
134
  }
135
- if (node instanceof InterpolatedStringNode)
136
- return unsupportedSyntax("ruby", "interpolated string", location);
135
+ if (node instanceof InterpolatedStringNode) {
136
+ if (node.openingLoc && slicePrismSource(source, node.openingLoc.startOffset, node.openingLoc.startOffset + node.openingLoc.length).startsWith("<<")) {
137
+ return unsupportedSyntax("ruby", "heredoc string", location);
138
+ }
139
+ const parts = node.parts.map((part) => {
140
+ if (part instanceof StringNode)
141
+ return convertExpression(part, filename, source, context, scalarType("string"));
142
+ if (part instanceof EmbeddedStatementsNode) {
143
+ const statements = part.statements;
144
+ if (!statements || statements.body.length != 1)
145
+ return unsupportedSyntax("ruby", "interpolated statement", nodeLocation(part, filename, source));
146
+ return convertExpression(statements.body[0], filename, source, context, scalarType("string"));
147
+ }
148
+ return unsupportedSyntax("ruby", part.constructor.name, nodeLocation(part, filename, source));
149
+ });
150
+ if (parts.length == 0)
151
+ return withParserRanges({ kind: /** @type {const} */ ("StringLiteral"), location, value: "" }, { literal: location });
152
+ let lowered = parts[0];
153
+ for (const part of parts.slice(1)) {
154
+ const semantic = withAdaptedOperation({
155
+ kind: /** @type {const} */ ("BinaryExpression"),
156
+ left: lowered,
157
+ location,
158
+ right: part
159
+ }, /** @type {import("../semantic/operators.js").AdaptedOperation} */ ("StringConcat"));
160
+ lowered = /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(semantic));
161
+ }
162
+ return withParserRanges(lowered, { literal: location });
163
+ }
164
+ if (node instanceof IfNode && !node.ifKeywordLoc) {
165
+ const elseClause = node.subsequent;
166
+ const consequentStatements = node.statements;
167
+ const consequentArm = consequentStatements && consequentStatements.body.length == 1 ? consequentStatements.body[0] : undefined;
168
+ if (!(elseClause instanceof ElseNode) || !elseClause.statements || elseClause.statements.body.length != 1 || !consequentArm || !node.thenKeywordLoc) {
169
+ return unsupportedSyntax("ruby", "ternary without alternate", location);
170
+ }
171
+ return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(withParserRanges({
172
+ alternate: convertExpression(elseClause.statements.body[0], filename, source, context),
173
+ condition: convertExpression(node.predicate, filename, source, context),
174
+ consequent: convertExpression(consequentArm, filename, source, context),
175
+ kind: /** @type {const} */ ("ConditionalExpression"),
176
+ location
177
+ }, {
178
+ alternate: nodeLocation(elseClause.statements.body[0], filename, source),
179
+ colon: prismLocation(elseClause.elseKeywordLoc ?? elseClause.location, filename, source),
180
+ condition: nodeLocation(node.predicate, filename, source),
181
+ consequent: nodeLocation(consequentArm, filename, source),
182
+ operator: prismLocation(node.thenKeywordLoc, filename, source)
183
+ })));
184
+ }
137
185
  if (node instanceof OrNode && node.left instanceof LocalVariableReadNode &&
138
186
  context.bindings.get(node.left.name)?.kind == "OptionalType") {
139
187
  return unsupportedSyntax("ruby", "optional default with ||", prismLocation(node.operatorLoc, filename, source));
@@ -699,6 +747,8 @@ function convertStatement(node, comments, context, filename, source) {
699
747
  return unsupportedSyntax("ruby", "nonlocal return from each block", nodeLocation(node, filename, source));
700
748
  return convertReturn(node, filename, source, context);
701
749
  }
750
+ if (node instanceof IfNode && !node.ifKeywordLoc)
751
+ return unsupportedSyntax("ruby", "ternary statement", nodeLocation(node, filename, source));
702
752
  if (node instanceof IfNode || node instanceof UnlessNode)
703
753
  return convertIf(node, comments, context, filename, source);
704
754
  if (node instanceof WhileNode)
@@ -1857,4 +1907,4 @@ function constantPathName(node) {
1857
1907
  }
1858
1908
  return `${constantPathName(node.parent)}::${node.name}`;
1859
1909
  }
1860
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVieS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcnVieS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLGVBQWUsRUFDZixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBQyxXQUFXLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLDJCQUEyQixFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDeEcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFD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QVUsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRXJILE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ2pFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSztLQUNwRCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLElBQUk7SUFDNUIsSUFBSSxJQUFJLFlBQVksZ0JBQWdCO1FBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ3RELElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVE7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDbkcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDN0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7XG4gIEFuZE5vZGUsXG4gIEFycmF5Tm9kZSxcbiAgQXNzb2NOb2RlLFxuICBCbG9ja05vZGUsXG4gIEJsb2NrUGFyYW1ldGVyc05vZGUsXG4gIEJlZ2luTm9kZSxcbiAgQnJlYWtOb2RlLFxuICBDYWxsTm9kZSxcbiAgQ2xhc3NOb2RlLFxuICBDb25zdGFudFBhdGhOb2RlLFxuICBDb25zdGFudFJlYWROb2RlLFxuICBEZWZOb2RlLFxuICBFbHNlTm9kZSxcbiAgRmFsc2VOb2RlLFxuICBIYXNoTm9kZSxcbiAgSWZOb2RlLFxuICBJbnRlZ2VyTm9kZSxcbiAgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSxcbiAgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlLFxuICBJbnRlcnBvbGF0ZWRTdHJpbmdOb2RlLFxuICBMb2NhbFZhcmlhYmxlUmVhZE5vZGUsXG4gIExvY2FsVmFyaWFibGVUYXJnZXROb2RlLFxuICBMb2NhbFZhcmlhYmxlV3JpdGVOb2RlLFxuICBNb2R1bGVOb2RlLFxuICBOZXh0Tm9kZSxcbiAgTmlsTm9kZSxcbiAgT3JOb2RlLFxuICBQYXJlbnRoZXNlc05vZGUsXG4gIFByb2dyYW1Ob2RlLFxuICBSZXF1aXJlZFBhcmFtZXRlck5vZGUsXG4gIFJlZG9Ob2RlLFxuICBSZXNjdWVOb2RlLFxuICBSZXR1cm5Ob2RlLFxuICBSZXRyeU5vZGUsXG4gIFNlbGZOb2RlLFxuICBTdGF0ZW1lbnRzTm9kZSxcbiAgU3RyaW5nTm9kZSxcbiAgU3ltYm9sTm9kZSxcbiAgVHJ1ZU5vZGUsXG4gIFVubGVzc05vZGUsXG4gIFdoaWxlTm9kZSxcbiAgbG9hZFByaXNtXG59IGZyb20gXCJAcnVieS9wcmlzbVwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2Jsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5fSBmcm9tIFwiLi4vc2VtYW50aWMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9uLCB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXR9IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7d2l0aFBhcnNlclJhbmdlc30gZnJvbSBcIi4uL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7aXNUYXNrMDM0UmVzb3VyY2VQcm9iZX0gZnJvbSBcIi4uL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5pbXBvcnQge2hhc0V4YWN0RWZmZWN0U3VwcG9ydH0gZnJvbSBcIi4uL2JhY2tlbmRzL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlUmV0dXJuVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2NhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMsIGRvY3VtZW50ZWRWYWx1ZVR5cGUsIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUsIGl0ZXJhdGlvbk9wZXJhbmRUeXBlLCBrbm93bkNhbGxSZXR1cm5UeXBlLCBvcmRlcmVkTWFwVHlwZUZyb21NYXAsIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCBzYW1lVmFsdWVUeXBlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5jb25zdCBwYXJzZVByaXNtID0gYXdhaXQgbG9hZFByaXNtKClcbmNvbnN0IHJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19zZW5kX19cIiwgXCJleHRlbmRcIiwgXCJmZXRjaFwiLCBcImluc3RhbmNlX2V2YWxcIiwgXCJpbnN0YW5jZV9leGVjXCIsIFwibWV0aG9kXCIsIFwibWV0aG9kX21pc3NpbmdcIiwgXCJwdWJsaWNfc2VuZFwiLFxuICBcInJlc3BvbmRfdG9fbWlzc2luZz9cIiwgXCJzZW5kXCIsIFwic2luZ2xldG9uX2NsYXNzXCIsIFwic2l6ZVwiXG5dKVxuLyoqIEB0eXBlZGVmIHt7bmFtZTogc3RyaW5nLCBuYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXJhbWV0ZXJzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXSwgcmV0dXJuVHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259fSBSdWJ5RnVuY3Rpb25TaWduYXR1cmUgKi9cbi8qKiBAdHlwZWRlZiB7e2JpbmRpbmdzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmRpbmdUeXBlPiwgY2xhc3NlczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGN1cnJlbnRDbGFzcz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24sIGVycm9yTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIFJ1YnlGdW5jdGlvblNpZ25hdHVyZT4sIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM/OiBTZXQ8b2JqZWN0PiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZWNvcmROYW1lczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj4sIGxvb3BEZXB0aD86IG51bWJlciwgcmV0dXJuVHlwZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fX0gUnVieUNvbnZlcnNpb25Db250ZXh0ICovXG5jb25zdCBydWJ5QmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT1cIiwgXCJFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJOb3RFcXVhbFwiXSxcbiAgW1wiPFwiLCBcIkxlc3NUaGFuXCJdLFxuICBbXCI8PVwiLCBcIkxlc3NUaGFuT3JFcXVhbFwiXSxcbiAgW1wiPlwiLCBcIkdyZWF0ZXJUaGFuXCJdLFxuICBbXCI+PVwiLCBcIkdyZWF0ZXJUaGFuT3JFcXVhbFwiXVxuXSlcblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBQcmlzbSBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBwcmlzbUxvY2F0aW9uKG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQcmlzbSBsb2NhdGlvbiBpbnRvIGEgbm9ybWFsaXplZCBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufSBsb2NhdGlvbiAtIFByaXNtIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBwcmlzbUxvY2F0aW9uKGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBsb2NhdGlvbi5zdGFydE9mZnNldCksXG4gICAgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQgKyBsb2NhdGlvbi5sZW5ndGgpXG4gIClcbn1cblxuLyoqXG4gKiBTbGljZXMgSmF2YVNjcmlwdCBzb3VyY2UgdXNpbmcgUHJpc20ncyBVVEYtOCBieXRlIG9mZnNldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIFByaXNtIGJ5dGUgb2Zmc2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBQcmlzbSBieXRlIG9mZnNldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSB0ZXh0IGluIHRoZSBieXRlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkge1xuICByZXR1cm4gc291cmNlLnNsaWNlKFxuICAgIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIHN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbmRPZmZzZXQpXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBQcmlzbSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLCBwcmVzZXJ2ZU9wdGlvbmFsID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE5pbE5vZGUpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge2Fic2VuY2U6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSlcbiAgICB9LCB7c29tZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOaWxOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibmlsIG91dHNpZGUgYW4gZXhwbGljaXQgb3B0aW9uYWwgY29udGV4dFwiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuYmxvY2spIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBub2RlTG9jYXRpb24obm9kZS5ibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIHNsaWNlUHJpc21Tb3VyY2UoXG4gICAgc291cmNlLFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0LFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0ICsgbm9kZS5jYWxsT3BlcmF0b3JMb2MubGVuZ3RoXG4gICkgPT0gXCImLlwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbClcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcblxuICAgIGlmICghcHJlc2VydmVPcHRpb25hbCAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmQ6IGlkZW50aWZpZXJ9LCB7dW53cmFwOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXJcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgU2VsZk5vZGUpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic2VsZiBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcz8uZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYEAke2NhbmRpZGF0ZS5uYW1lfWAgPT0gbm9kZS5uYW1lKVxuXG4gICAgaWYgKCFmaWVsZCB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGluc3RhbmNlIGZpZWxkIG91dHNpZGUgaXRzIGRlY2xhcmluZyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2ZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLCByZWNlaXZlcn0sIHttZW1iZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW50ZWdlck5vZGUpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5vZGUudmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgRmFsc2VOb2RlKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFN0cmluZ05vZGUpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gbm9kZS51bmVzY2FwZWRcblxuICAgIGlmICghZGVjb2RlZC52YWxpZEVuY29kaW5nIHx8IGRlY29kZWQuZW5jb2RpbmcgIT0gXCJ1dGYtOFwiIHx8IG5vZGUuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpIHx8XG4gICAgICAhaGFzT25seVVuaWNvZGVTY2FsYXJzKGRlY29kZWQudmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZWQudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZWRTdHJpbmdOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW50ZXJwb2xhdGVkIHN0cmluZ1wiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIE9yTm9kZSAmJiBub2RlLmxlZnQgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLmxlZnQubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvcHRpb25hbCBkZWZhdWx0IHdpdGggfHxcIiwgcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChleGFjdE5pbFRlc3Qobm9kZSwgc291cmNlKSkge1xuICAgIGNvbnN0IGNhbGwgPSAvKiogQHR5cGUge0NhbGxOb2RlfSAqLyAobm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IC8qKiBAdHlwZSB7TG9jYWxWYXJpYWJsZVJlYWROb2RlfSAqLyAoY2FsbC5yZWNlaXZlcilcbiAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG4gICAgY29uc3QgcHJlc2VudCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgIG9wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKGNhbGwubWVzc2FnZUxvYyA/PyBjYWxsLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IHByZXNlbnRcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oY2FsbC5tZXNzYWdlTG9jID8/IGNhbGwubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSksIFwiTm90XCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICBpZiAoIW5vZGUub3BlbmluZ0xvYyB8fCAhbm9kZS5jbG9zaW5nTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic3BlY2lhbCBhcnJheSBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChub2RlLmlzQ29udGFpbnNTcGxhdCgpKSB7XG4gICAgICBjb25zdCBzcGxhdCA9IG5vZGUuZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5jb25zdHJ1Y3Rvci5uYW1lID09IFwiU3BsYXROb2RlXCIpXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJhcnJheSBzcGxhdFwiLCBzcGxhdCA/IG5vZGVMb2NhdGlvbihzcGxhdCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBleHBlY3RlZFR5cGUuZWxlbWVudFR5cGUgOiB1bmRlZmluZWRcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZWxlbWVudFR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBjbG9zZTogcHJpc21Mb2NhdGlvbihub2RlLmNsb3NpbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlbjogcHJpc21Mb2NhdGlvbihub2RlLm9wZW5pbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSGFzaE5vZGUpIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZW50cmllcyA9IG5vZGUuZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgQXNzb2NOb2RlKSB8fCAhZWxlbWVudC5vcGVyYXRvckxvYyB8fFxuICAgICAgICBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCArIGVsZW1lbnQub3BlcmF0b3JMb2MubGVuZ3RoKSAhPSBcIj0+XCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImhhc2ggZW50cnlcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKCEoZWxlbWVudC5rZXkgaW5zdGFuY2VvZiBTdHJpbmdOb2RlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoa2V5KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihlbGVtZW50LnZhbHVlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oZWxlbWVudC5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgY2xvc2U6IHByaXNtTG9jYXRpb24obm9kZS5jbG9zaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZW46IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIChub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSB8fCBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IHJlY29yZE5hbWUgPSBjb25zdGFudFBhdGhOYW1lKG5vZGUucmVjZWl2ZXIpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZE5hbWVzLmdldChyZWNvcmROYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImNvbnN0cnVjdGlvbiBvZiBhIG5vbi1yZWNvcmQgY2xhc3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpfSxcbiAgICAgIHtjbGFzczogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvd25lZCByZXNvdXJjZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkXG4gICAgICA/IGV4cGVjdGVkVHlwZS5hcmd1bWVudHNcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIiFcIikge1xuICAgIGNvbnN0IG9wZXJhdG9yTG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKG5vZGUuY2FsbE9wZXJhdG9yTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicXVhbGlmaWVkIGJvb2xlYW4gbm90XCIsIG9wZXJhdG9yTG9jYXRpb24pXG4gICAgaWYgKG5vZGUubWVzc2FnZUxvYz8ubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcmVjZWRlbmNlLXNlbnNpdGl2ZSBib29sZWFuIG5vdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYm9vbGVhbiBub3QgYXJndW1lbnQgbGlzdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuXG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3BlcmFuZC5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgb3BlcmFuZC5vcGVyYW5kLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiKSB7XG4gICAgICByZXR1cm4gb3BlcmFuZC5vcGVyYW5kXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufSksIFwiTm90XCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIi1AXCIpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChub2RlLmNhbGxPcGVyYXRvckxvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInF1YWxpZmllZCBpbnRlZ2VyIG5lZ2F0aW9uXCIsIG9wZXJhdG9yTG9jYXRpb24pXG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImludGVnZXIgbmVnYXRpb24gYXJndW1lbnQgbGlzdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufSksIFwiTmVnYXRlXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBbmROb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBPck5vZGUpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHNvdXJjZU9wZXJhdG9yID0gc291cmNlLnNsaWNlKG9wZXJhdG9yTG9jYXRpb24uc3RhcnQub2Zmc2V0LCBvcGVyYXRvckxvY2F0aW9uLmVuZC5vZmZzZXQpXG5cbiAgICBpZiAoc291cmNlT3BlcmF0b3IgIT0gXCImJlwiICYmIHNvdXJjZU9wZXJhdG9yICE9IFwifHxcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgcHJlY2VkZW5jZS1zZW5zaXRpdmUgYm9vbGVhbiAke3NvdXJjZU9wZXJhdG9yfWAsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBub2RlIGluc3RhbmNlb2YgQW5kTm9kZSA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIHJ1YnlCaW5hcnlPcGVyYXRpb25zLmhhcyhub2RlLm5hbWUpICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmXG4gICAgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgXCJydWJ5XCIsXG4gICAgICBgcXVhbGlmaWVkIGJpbmFyeSBvcGVyYXRvciAke25vZGUubmFtZX1gLFxuICAgICAgcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgcnVieUJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUubmFtZSkgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChydWJ5QmluYXJ5T3BlcmF0aW9ucy5nZXQobm9kZS5uYW1lKSkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIltdXCIgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgIW5vZGUuY2FsbE9wZXJhdG9yTG9jICYmICFub2RlLmJsb2NrKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgIH0sIHtvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZW5pbmdMb2MgPz8gbm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiZmV0Y2hcIiAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiZcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2V5OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZmFpbC1vbi1hYnNlbmNlXCIpXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IGNhbGxlZSA9IGAke25vZGUucmVjZWl2ZXIubmFtZX0uJHtub2RlLm5hbWV9YFxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChjYWxsZWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGFyZ3VtZW50czogKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZS5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSxcbiAgICAgICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKSksXG4gICAgICAgIGNhbGxlZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7Y2FsbGVlOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJzaXplXCIgJiYgIW5vZGUuYXJndW1lbnRzXyAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBmaWVsZDogbm9kZS5uYW1lLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwibWVzc2FnZVwiICYmXG4gICAgIW5vZGUuYXJndW1lbnRzXyAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jayAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLnJlY2VpdmVyLm5hbWUpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvck1lc3NhZ2VSZWFkXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLnJlY2VpdmVyLm5hbWV9LCB7XG4gICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgIH0pXG4gICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jayAmJlxuICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVmZXJlbmNlVHlwZX0gKi8gKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KSlcbiAgICBjb25zdCBtZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGUubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLm5hbWUsXG4gICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpfSxcbiAgICB7bWVtYmVyOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmICFub2RlLmFyZ3VtZW50c18gJiYgIW5vZGUuYmxvY2spIHtcbiAgICBpZiAoW1wic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIiwgXCJpbnN0YW5jZV92YXJpYWJsZV9nZXRcIiwgXCJtZXRob2RcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR5bmFtaWMgb3IgcmVmbGVjdGl2ZSBtZW1iZXIgYWNjZXNzXCIsIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBmaWVsZDogbm9kZS5uYW1lLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlcikge1xuICAgIGlmIChbXCJzZW5kXCIsIFwicHVibGljX3NlbmRcIiwgXCJfX3NlbmRfX1wiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHluYW1pYyBjYWxsXCIsIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZS5uYW1lKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgICAgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2Uoc2lnbmF0dXJlLCBpbmRleCkpKSxcbiAgICAgIGNhbGxlZTogbm9kZS5uYW1lLFxuICAgICAga2luZDogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7Y2FsbGVlOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRMb2NhdGlvbiA9ICFub2RlLmNhbGxPcGVyYXRvckxvYyAmJiBub2RlLm1lc3NhZ2VMb2MgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxXG4gICAgICA/IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCB1bnN1cHBvcnRlZExvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFJlc29sdmVzIG9ubHkgcmVzdWx0IHR5cGVzIGVzdGFibGlzaGVkIGJ5IGV4cGxpY2l0IHNpZ25hdHVyZXMgYW5kIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyLW93bmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yVHlwZSB8IHVuZGVmaW5lZH0gS25vd24gcmVzdWx0IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFBhcmVudGhlc2VzTm9kZSAmJiBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSAmJiBub2RlLmJvZHkuYm9keS5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUuYm9keS5ib2R5WzBdLCBjb250ZXh0KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUubmFtZSlcblxuICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCkgPT5cbiAgICAgIGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQpKSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KGAke25vZGUucmVjZWl2ZXIubmFtZX0uJHtub2RlLm5hbWV9YClcblxuICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCkgPT5cbiAgICAgIGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQpKSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiW11cIikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiZmV0Y2hcIikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUudmFsdWVUeXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAobm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgfHwgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpICYmIG5vZGUubmFtZSA9PSBcIm5ld1wiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZE5hbWVzLmdldChjb25zdGFudFBhdGhOYW1lKG5vZGUucmVjZWl2ZXIpKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkgcmV0dXJuIGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCJcbiAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIDoge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlY29yZFR5cGVcIn1cbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFNlbGZOb2RlICYmIGNvbnRleHQuY3VycmVudENsYXNzPy5pZCkgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gYEAke2ZpZWxkLm5hbWV9YCA9PSBub2RlLm5hbWUpPy50eXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dClcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBub2RlLm5hbWUpPy5yZXR1cm5UeXBlXG4gICAgfVxuICAgIGlmIChub2RlLmFyZ3VtZW50c18pIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBpbmRleCA9IGRlY2xhcmF0aW9uPy5maWVsZHMuZmluZEluZGV4KChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBub2RlLm5hbWUpID8/IC0xXG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb24gPyBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHJlY2VpdmVyLmFyZ3VtZW50cywgaW5kZXgpIDogdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHZhbHVlIHR5cGUgcHJvZHVjZWQgYnkgdGhlIGZyb250ZW5kJ3MgaW1wbGljaXQgb3B0aW9uYWwtYmluZGluZyB1bndyYXAuXG4gKiBTZW1hbnRpYyB2YWxpZGF0aW9uIHNlcGFyYXRlbHkgcHJvdmVzIHRoYXQgdGhlIHVud3JhcCBvY2N1cnMgb25seSBvbiBhIHByZXNlbnQgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IENvbnZlcnRlZCB2YWx1ZSB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFBhcmVudGhlc2VzTm9kZSAmJiBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSAmJiBub2RlLmJvZHkuYm9keS5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5ib2R5LmJvZHlbMF0sIGNvbnRleHQpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dClcblxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJiB0eXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyB0eXBlLnZhbHVlVHlwZSA6IHR5cGVcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIG9ubHkgdGhlIHBhcnNlci1iYWNrZWQgYGlkZW50aWZpZXIubmlsP2Agc3BlbGxpbmcgdXNlZCBieSBUYXNrIDAwNy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBQcmlzbSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgb25lIGV4YWN0IG5pbCB0ZXN0LlxuICovXG5mdW5jdGlvbiBleGFjdE5pbFRlc3Qobm9kZSwgc291cmNlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIShub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB8fFxuICAgIG5vZGUubmFtZSAhPSBcIm5pbD9cIiB8fCAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgfHwgbm9kZS5hcmd1bWVudHNfIHx8IG5vZGUuYmxvY2spIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBzbGljZVByaXNtU291cmNlKFxuICAgIHNvdXJjZSxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCArIG5vZGUuY2FsbE9wZXJhdG9yTG9jLmxlbmd0aFxuICApID09IFwiLlwiXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IFJ1YnkgcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSkgfHwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4obm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfWzBdID8ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKFxuICAgICAgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBQcmlzbS1vd25lZCBSQlMtc3R5bGUgdHlwZSBjb21tZW50cyBkaXJlY3RseSBwcmVjZWRpbmcgYSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIENvbW1lbnQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gRGVjbGFyZWQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVDb21tZW50cyhjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkge1xuICBjb25zdCBwcmVjZWRpbmcgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9IHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgcmV0dXJuVHlwZVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX0gKi9cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBbXVxuXG4gIGZvciAoY29uc3QgY29tbWVudCBvZiBwcmVjZWRpbmcpIHtcbiAgICBjb25zdCB3b3JkcyA9IGNvbW1lbnRUb2tlbnMoY29tbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICh3b3Jkc1swXT8udGV4dCA9PSBcIkBwYXJhbVwiICYmIHdvcmRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICBpZiAocGFyYW1ldGVyVHlwZXMuaGFzKHdvcmRzWzFdLnRleHQpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJkdXBsaWNhdGUgcGFyYW1ldGVyIGFubm90YXRpb25cIiwgd29yZHNbMV0ubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBwYXJhbWV0ZXJUeXBlcy5zZXQod29yZHNbMV0udGV4dCwgam9pbmVkQ29tbWVudFRva2VuKHdvcmRzLCAyLCBzb3VyY2UpKVxuICAgIH0gZWxzZSBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAcmV0dXJuXCIgJiYgd29yZHMubGVuZ3RoID49IDIpIHtcbiAgICAgIGlmIChyZXR1cm5UeXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHVwbGljYXRlIHJldHVybiBhbm5vdGF0aW9uXCIsIHdvcmRzWzFdLmxvY2F0aW9uKVxuICAgICAgcmV0dXJuVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih3b3JkcywgMSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAdGVtcGxhdGVcIiAmJiB3b3Jkcy5sZW5ndGggPT0gMiAmJiBvd25lcklkICYmXG4gICAgICAvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdCh3b3Jkc1sxXS50ZXh0KSkge1xuICAgICAgdHlwZVBhcmFtZXRlcnMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgaWQ6IGAke293bmVySWR9OnR5cGU6JHt0eXBlUGFyYW1ldGVycy5sZW5ndGh9YCxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSxcbiAgICAgICAgbG9jYXRpb246IHdvcmRzWzFdLmxvY2F0aW9uLFxuICAgICAgICBuYW1lOiB3b3Jkc1sxXS50ZXh0XG4gICAgICB9LCB7bmFtZTogd29yZHNbMV0ubG9jYXRpb259KSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHRlbXBsYXRlXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCB2YXJpYW50LCBvciBtYWxmb3JtZWQgdHlwZSBwYXJhbWV0ZXJcIiwgd29yZHNbMV0/LmxvY2F0aW9uID8/IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHBhcmFtXCIpIHx8IHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHJldHVyblwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1hbGZvcm1lZCBmdW5jdGlvbiB0eXBlIGFubm90YXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7cGFyYW1ldGVyczogcGFyYW1ldGVyVHlwZXMsIHJldHVyblR5cGUsIC4uLih0eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KX1cbn1cblxuLyoqXG4gKiBSZWpvaW5zIGEgYm91bmRlZCBtZXRhZGF0YSBzdWZmaXggd2hpbGUgcmV0YWluaW5nIGl0cyBwYXJzZXItb3duZWQgcmFuZ2UuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHRleHQ6IHN0cmluZ31bXX0gdG9rZW5zIC0gQ29tbWVudCB0b2tlbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBGaXJzdCBzdWZmaXggdG9rZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ319IEpvaW5lZCB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gam9pbmVkQ29tbWVudFRva2VuKHRva2Vucywgc3RhcnQsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHRva2Vuc1tzdGFydF1cbiAgY29uc3QgbGFzdCA9IHRva2Vucy5hdCgtMSlcblxuICBpZiAoIWZpcnN0IHx8ICFsYXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJSdWJ5IG1ldGFkYXRhIHN1ZmZpeCB1bmV4cGVjdGVkbHkgZGlzYXBwZWFyZWQuXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaXJzdC5sb2NhdGlvbi5maWxlbmFtZSwgc291cmNlLCBmaXJzdC5sb2NhdGlvbi5zdGFydC5vZmZzZXQsIGxhc3QubG9jYXRpb24uZW5kLm9mZnNldClcblxuICByZXR1cm4ge2xvY2F0aW9uLCBzb3VyY2VUeXBlOiBzb3VyY2Uuc2xpY2UobG9jYXRpb24uc3RhcnQub2Zmc2V0LCBsb2NhdGlvbi5lbmQub2Zmc2V0KX1cbn1cblxuLyoqXG4gKiBMZXhlcyB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBtZXRhZGF0YSB0b2tlbnMgaW5zaWRlIGEgUHJpc20tb3duZWQgUnVieSBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudH0gY29tbWVudCAtIFByaXNtIGNvbW1lbnQgdG9rZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHRleHQ6IHN0cmluZ31bXX0gTWV0YWRhdGEgdG9rZW5zLlxuICovXG5mdW5jdGlvbiBjb21tZW50VG9rZW5zKGNvbW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3Qgc3RhcnQgPSB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KVxuICBjb25zdCBlbmQgPSB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgY29tbWVudC5sb2NhdGlvbi5sZW5ndGgpXG4gIGNvbnN0IHRva2VucyA9IFtdXG4gIGxldCBvZmZzZXQgPSBzdGFydCArIDFcblxuICB3aGlsZSAob2Zmc2V0IDwgZW5kKSB7XG4gICAgd2hpbGUgKG9mZnNldCA8IGVuZCAmJiBpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2Uoc291cmNlW29mZnNldF0pKSBvZmZzZXQrK1xuICAgIGNvbnN0IHRva2VuU3RhcnQgPSBvZmZzZXRcblxuICAgIHdoaWxlIChvZmZzZXQgPCBlbmQgJiYgIWlzUnVieU1ldGFkYXRhV2hpdGVzcGFjZShzb3VyY2Vbb2Zmc2V0XSkpIG9mZnNldCsrXG4gICAgaWYgKHRva2VuU3RhcnQgPCBvZmZzZXQpIHtcbiAgICAgIHRva2Vucy5wdXNoKHtsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlblN0YXJ0LCBvZmZzZXQpLCB0ZXh0OiBzb3VyY2Uuc2xpY2UodG9rZW5TdGFydCwgb2Zmc2V0KX0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgUnVieSBtZXRhZGF0YSBzZXBhcmF0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyIC0gU291cmNlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGl0IHNlcGFyYXRlcyBtZXRhZGF0YSB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uIGlzUnVieU1ldGFkYXRhV2hpdGVzcGFjZShjaGFyYWN0ZXIpIHtcbiAgcmV0dXJuIGNoYXJhY3RlciA9PSBcIiBcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXHRcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXHJcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXG5cIlxufVxuXG4vKipcbiAqIFNlbGVjdHMgb25seSB0aGUgY29udGlndW91cyBjb21tZW50IGJsb2NrIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGRlZmluaXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjogaW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTG9jYXRpb259fSBub2RlIC0gQ29tbWVudCBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gQXNzb2NpYXRlZCBjb21tZW50cy5cbiAqL1xuZnVuY3Rpb24gYXNzb2NpYXRlZENvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBzb3VyY2UpIHtcbiAgY29uc3QgcHJlY2VkaW5nID0gY29tbWVudHMuZmlsdGVyKChjb21tZW50KSA9PiBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0IDwgbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYXRpb24uc3RhcnRPZmZzZXQgLSByaWdodC5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgY29uc3QgYXNzb2NpYXRlZCA9IFtdXG4gIGxldCBib3VuZGFyeSA9IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXRcblxuICBmb3IgKGxldCBpbmRleCA9IHByZWNlZGluZy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgY29tbWVudCA9IHByZWNlZGluZ1tpbmRleF1cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgY29tbWVudC5sb2NhdGlvbi5sZW5ndGhcbiAgICBjb25zdCBnYXAgPSBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgZW5kT2Zmc2V0LCBib3VuZGFyeSlcblxuICAgIGlmICghaXNJbW1lZGlhdGVDb21tZW50R2FwKGdhcCkpIGJyZWFrXG5cbiAgICBhc3NvY2lhdGVkLnVuc2hpZnQoY29tbWVudClcbiAgICBib3VuZGFyeSA9IGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXRcbiAgfVxuXG4gIHJldHVybiBhc3NvY2lhdGVkXG59XG5cbi8qKlxuICogUmVhZHMgb25lIGV4YWN0IFJ1YnkgbG9jYWwgdHlwZSBjYXJyaWVyIGFuZCBpbW11dGFiaWxpdHkgbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtMb2NhbFZhcmlhYmxlV3JpdGVOb2RlfSBub2RlIC0gTG9jYWwgd3JpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHt7aW1tdXRhYmxlOiBib29sZWFuLCB0eXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gfCB1bmRlZmluZWR9IE1ldGFkYXRhIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9jYWxNZXRhZGF0YShjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGFzc29jaWF0ZWQgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIHNvdXJjZSlcbiAgY29uc3QgbWV0YWRhdGEgPSBhc3NvY2lhdGVkLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgdHlwZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkB0eXBlXCIpXG4gIGNvbnN0IGltbXV0YWJsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkBzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcbiAgY29uc3QgcHJvZmlsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB7XG4gICAgcmV0dXJuIHRva2VuPy50ZXh0LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSB8fCB0b2tlbj8udGV4dC5zdGFydHNXaXRoKFwiQHNlbWFudGlmb2xkLWltbXV0YWJsZVwiKVxuICB9KVxuXG4gIGlmIChwcm9maWxlTWV0YWRhdGEubGVuZ3RoID09IDApIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHxcbiAgICBpbW11dGFibGVNZXRhZGF0YS5sZW5ndGggPiAxIHx8IGltbXV0YWJsZU1ldGFkYXRhLnNvbWUoKHRva2VucykgPT4gdG9rZW5zLmxlbmd0aCAhPSAxKSB8fFxuICAgIHByb2ZpbGVNZXRhZGF0YS5sZW5ndGggIT0gdHlwZU1ldGFkYXRhLmxlbmd0aCArIGltbXV0YWJsZU1ldGFkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYWxmb3JtZWQgbG9jYWwgdHlwZSBtZXRhZGF0YVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih0eXBlTWV0YWRhdGFbMF0sIDEsIHNvdXJjZSlcblxuICByZXR1cm4ge1xuICAgIGltbXV0YWJsZTogaW1tdXRhYmxlTWV0YWRhdGEubGVuZ3RoID09IDEsXG4gICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlLnNvdXJjZVR5cGUsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uLCBzb3VyY2UsIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIFJ1YnkgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcblxuICBjb25zdCBtZXRhZGF0YSA9IGxvY2FsTWV0YWRhdGEoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKG1ldGFkYXRhKSB7XG4gICAgbGV0IGRlY2xhcmVkVHlwZSA9IG1ldGFkYXRhLnR5cGVcblxuICAgIGlmIChtZXRhZGF0YS5pbW11dGFibGUgJiYgZGVjbGFyZWRUeXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgJiYgY29udGV4dC5vcmRlcmVkTWFwRGVjbGFyYXRpb25zPy5oYXMobm9kZSkgJiZcbiAgICAgIG5vZGUudmFsdWUgaW5zdGFuY2VvZiBIYXNoTm9kZSkge1xuICAgICAgZGVjbGFyZWRUeXBlID0gb3JkZXJlZE1hcFR5cGVGcm9tTWFwKGRlY2xhcmVkVHlwZSwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRUeXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6ICFtZXRhZGF0YS5pbW11dGFibGUsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgICB9LCB7bmFtZTogcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChub2RlLm5hbWUsIGRlY2xhcmVkVHlwZSlcbiAgICByZXR1cm4gc2VtYW50aWNcbiAgfVxuXG4gIGlmICghY29udGV4dC5iaW5kaW5ncy5oYXMobm9kZS5uYW1lKSkge1xuICAgIGlmIChub2RlLnZhbHVlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUudmFsdWUubmFtZSk/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3JkZXJlZCBtYXAgYWxpYXMgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm4gbWlzc2luZ1R5cGUoXCJydWJ5XCIsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgdGFyZ2V0TG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdGFyZ2V0ID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiB0YXJnZXRMb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge1xuICAgIG5hbWU6IHRhcmdldExvY2F0aW9uXG4gIH0pXG5cbiAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpXG4gIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvbixcbiAgICB0YXJnZXRcbiAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUub3BlcmF0b3JMb2MsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhoYXVzdGl2ZSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFJldHVybk5vZGUpIHtcbiAgICBpZiAoKGNvbnRleHQubG9vcERlcHRoID8/IDApID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZk5vZGUgfHwgbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUpIHJldHVybiBjb252ZXJ0SWYobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgV2hpbGVOb2RlKSByZXR1cm4gY29udmVydFdoaWxlKG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEJlZ2luTm9kZSkgcmV0dXJuIGNvbnZlcnRSdWJ5VHJ5KG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSkge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcz8uZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYEAke2NhbmRpZGF0ZS5uYW1lfWAgPT0gbm9kZS5uYW1lKVxuXG4gICAgaWYgKCFmaWVsZCB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGluc3RhbmNlIGZpZWxkIG91dHNpZGUgaXRzIGRlY2xhcmluZyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSwgbG9jYXRpb24sIHJlY2VpdmVyfSxcbiAgICB7bWVtYmVyOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBCcmVha05vZGUgfHwgbm9kZSBpbnN0YW5jZW9mIE5leHROb2RlKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgJHtub2RlIGluc3RhbmNlb2YgQnJlYWtOb2RlID8gXCJicmVha1wiIDogXCJuZXh0XCJ9IHZhbHVlYCwgbm9kZUxvY2F0aW9uKG5vZGUuYXJndW1lbnRzXywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgbG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUua2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7XCJCcmVha1N0YXRlbWVudFwiIHwgXCJDb250aW51ZVN0YXRlbWVudFwifSAqLyAobm9kZSBpbnN0YW5jZW9mIEJyZWFrTm9kZSA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgIGlmICghbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJyYWlzZVwiKSByZXR1cm4gY29udmVydFJ1YnlSYWlzZShub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGlmIChub2RlLmJsb2NrKSByZXR1cm4gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgaWYgKCFub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcInB1dHNcIiAmJiAhY29udGV4dC5mdW5jdGlvbnMuaGFzKFwicHV0c1wiKSkgcmV0dXJuIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4cHJlc3Npb246IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb259ICovIChjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSksXG4gICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIG5vZGUuY29uc3RydWN0b3IubmFtZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGByYWlzZSBEZWNsYXJlZEVycm9yLCBtZXNzYWdlYC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSByYWlzZSBjYWxsLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlSYWlzZShub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW11cbiAgY29uc3QgZXJyb3JOb2RlID0gYXJndW1lbnRzX1swXVxuXG4gIGlmIChub2RlLmJsb2NrIHx8IG5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDIgfHxcbiAgICAhKGVycm9yTm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpICYmICEoZXJyb3JOb2RlIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgfHxcbiAgICAhY29udGV4dC5lcnJvck5hbWVzLmhhcyhjb25zdGFudFBhdGhOYW1lKGVycm9yTm9kZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJhaXNlIG90aGVyIHRoYW4gZXhhY3QgZGVjbGFyZWQgZXJyb3IgYW5kIG1lc3NhZ2VcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gIGNvbnN0IHR5cGVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1lc3NhZ2U6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJhaXNlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkIHJlc2N1ZSB3aXRoIG5vIGVsc2UvZW5zdXJlLlxuICogQHBhcmFtIHtCZWdpbk5vZGV9IG5vZGUgLSBQcmlzbSBiZWdpbiBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFBhcnNlci1vd25lZCBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5VHJ5KG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGhhbmRsZXIgPSBub2RlLnJlc2N1ZUNsYXVzZVxuXG4gIGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBSZXNjdWVOb2RlKSB8fCBoYW5kbGVyLnN1YnNlcXVlbnQgfHwgbm9kZS5lbHNlQ2xhdXNlIHx8IG5vZGUuZW5zdXJlQ2xhdXNlIHx8XG4gICAgaGFuZGxlci5leGNlcHRpb25zLmxlbmd0aCAhPSAxIHx8XG4gICAgIShoYW5kbGVyLmV4Y2VwdGlvbnNbMF0gaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSAmJiAhKGhhbmRsZXIuZXhjZXB0aW9uc1swXSBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpIHx8XG4gICAgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoY29uc3RhbnRQYXRoTmFtZShoYW5kbGVyLmV4Y2VwdGlvbnNbMF0pKSB8fCAhKGhhbmRsZXIucmVmZXJlbmNlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJlZ2luIHdpdGhvdXQgb25lIGV4YWN0IHR5cGVkIHJlc2N1ZSBhbmQgYmluZGluZ1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBlcnJvck5vZGUgPSBoYW5kbGVyLmV4Y2VwdGlvbnNbMF1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gIGNvbnN0IGNhdWdodExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGVycm9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHtcbiAgICB0eXBlOiBjYXVnaHRMb2NhdGlvblxuICB9KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoaGFuZGxlci5yZWZlcmVuY2UubmFtZSwgY2F0Y2hUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaGFuZGxlci5yZWZlcmVuY2UsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGhhbmRsZXIucmVmZXJlbmNlLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGhhbmRsZXIucmVmZXJlbmNlLCBmaWxlbmFtZSwgc291cmNlKX0pLFxuICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGhhbmRsZXIuc3RhdGVtZW50cywgY29tbWVudHMsIGNhdGNoQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtjYXRjaDogbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCB0cnk6IGxvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCByZXNvbHZlZC1saXN0IGAuZWFjaCBkbyB8dmFsdWV8IC4uLiBlbmRgIHN5bnRheC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSBjYWxsIHdpdGggYSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmxvY2sgPSBub2RlLmJsb2NrXG5cbiAgaWYgKCEoYmxvY2sgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBibG9jayA/IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgaWYgKCFub2RlLnJlY2VpdmVyIHx8IG5vZGUubmFtZSAhPSBcImVhY2hcIiB8fCBub2RlLmFyZ3VtZW50c18gfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8ICFub2RlLm1lc3NhZ2VMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYXJiaXRyYXJ5IGNhbGwgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBibG9jay5vcGVuaW5nTG9jLmxlbmd0aCkgIT0gXCJkb1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbi1kbyBlYWNoIGJsb2NrXCIsIHByaXNtTG9jYXRpb24oYmxvY2sub3BlbmluZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhjbHVkZWQgPSBmaW5kUnVieURlc2NlbmRhbnQoYmxvY2suYm9keSwgKGNhbmRpZGF0ZSkgPT5cbiAgICBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZWRvTm9kZSB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZXRyeU5vZGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSlcblxuICBpZiAoZXhjbHVkZWQpIHtcbiAgICBjb25zdCBkZXRhaWwgPSBleGNsdWRlZCBpbnN0YW5jZW9mIFJldHVybk5vZGUgPyBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiA6XG4gICAgICBleGNsdWRlZCBpbnN0YW5jZW9mIFJlZG9Ob2RlID8gXCJyZWRvIGluIGVhY2ggYmxvY2tcIiA6IFwicmV0cnkgaW4gZWFjaCBibG9ja1wiXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGRldGFpbCwgbm9kZUxvY2F0aW9uKGV4Y2x1ZGVkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIShibG9jay5wYXJhbWV0ZXJzIGluc3RhbmNlb2YgQmxvY2tQYXJhbWV0ZXJzTm9kZSkgfHwgYmxvY2sucGFyYW1ldGVycy5sb2NhbHMubGVuZ3RoID4gMCB8fFxuICAgICFibG9jay5wYXJhbWV0ZXJzLnBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXJzXCIsIGJsb2NrLnBhcmFtZXRlcnNcbiAgICAgID8gbm9kZUxvY2F0aW9uKGJsb2NrLnBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICA6IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGJsb2NrLnBhcmFtZXRlcnMucGFyYW1ldGVyc1xuICBjb25zdCBzdXBwb3J0ZWRSZXF1aXJlZHMgPSBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMSB8fCBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMlxuICBjb25zdCB1bnN1cHBvcnRlZFBhcmFtZXRlciA9ICFzdXBwb3J0ZWRSZXF1aXJlZHNcbiAgICA/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzJdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzFdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdID8/IGJsb2NrLnBhcmFtZXRlcnNcbiAgICA6IHBhcmFtZXRlcnMucmVxdWlyZWRzLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkgJiZcbiAgICAgICAgcGFyYW1ldGVycy5vcHRpb25hbHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMucmVzdCAmJlxuICAgICAgICBwYXJhbWV0ZXJzLnBvc3RzLmxlbmd0aCA9PSAwICYmIHBhcmFtZXRlcnMua2V5d29yZHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMua2V5d29yZFJlc3QgJiYgIXBhcmFtZXRlcnMuYmxvY2tcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHBhcmFtZXRlcnMub3B0aW9uYWxzWzBdID8/IHBhcmFtZXRlcnMucmVzdCA/PyBwYXJhbWV0ZXJzLnBvc3RzWzBdID8/IHBhcmFtZXRlcnMua2V5d29yZHNbMF0gPz9cbiAgICAgICAgcGFyYW1ldGVycy5rZXl3b3JkUmVzdCA/PyBwYXJhbWV0ZXJzLmJsb2NrID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXIgYXJpdHkgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkUGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBpdGVyYXRpb25PcGVyYW5kVHlwZShrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpKVxuXG4gIGlmIChwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMikge1xuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVub3JkZXJlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicnVieVwiLCBcIk9yZGVyZWQgbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgW2tleVBhcmFtZXRlciwgdmFsdWVQYXJhbWV0ZXJdID0gLyoqIEB0eXBlIHtbUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLCBSZXF1aXJlZFBhcmFtZXRlck5vZGVdfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHMpXG4gICAgY29uc3Qga2V5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5UGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhbHVlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odmFsdWVQYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qga2V5VHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLmtleVR5cGUsIGtleUxvY2F0aW9uKVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZSwgdmFsdWVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiBrZXlMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGtleVBhcmFtZXRlci5uYW1lLCB0eXBlOiBrZXlUeXBlXG4gICAgfSwge25hbWU6IGtleUxvY2F0aW9ufSlcbiAgICBjb25zdCB2YWx1ZUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IHZhbHVlTG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiB2YWx1ZVBhcmFtZXRlci5uYW1lLCB0eXBlOiB2YWx1ZVR5cGVcbiAgICB9LCB7bmFtZTogdmFsdWVMb2NhdGlvbn0pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlQYXJhbWV0ZXIubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVQYXJhbWV0ZXIubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhibG9jay5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBibG9jay5ib2R5IDogbnVsbCwgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSxcbiAgICAgICAgc291cmNlLCBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHNbMF0pXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcInJ1YnlcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW5mZXJyZWRUeXBlID0gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICB9LCB7bmFtZTogYmluZGluZ0xvY2F0aW9ufSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQocGFyYW1ldGVyLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKFxuICAgICAgYmxvY2suYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gYmxvY2suYm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cyxcbiAgICAgIGJvZHlDb250ZXh0LFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHBhcnNlciBkZXNjZW5kYW50IG1hdGNoaW5nIG9uZSBleGNsdWRlZCBibG9jayBjb25zdHJ1Y3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCBudWxsfSBub2RlIC0gUGFyc2VyIHN1YnRyZWUuXG4gKiBAcGFyYW0geyhub2RlOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlKSA9PiBib29sZWFufSBwcmVkaWNhdGUgLSBFeGNsdXNpb24gcHJlZGljYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHNvdXJjZS1vcmRlcmVkIG1hdGNoLlxuICovXG5mdW5jdGlvbiBmaW5kUnVieURlc2NlbmRhbnQobm9kZSwgcHJlZGljYXRlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAocHJlZGljYXRlKG5vZGUpKSByZXR1cm4gbm9kZVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY29tcGFjdENoaWxkTm9kZXMoKSkge1xuICAgIGNvbnN0IG1hdGNoID0gZmluZFJ1YnlEZXNjZW5kYW50KGNoaWxkLCBwcmVkaWNhdGUpXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb3JkZXJlZCBQcmlzbSBzdGF0ZW1lbnQgbGlzdC5cbiAqIEBwYXJhbSB7U3RhdGVtZW50c05vZGUgfCBudWxsfSBub2RlIC0gUHJpc20gc3RhdGVtZW50cywgb3IgYW4gZW1wdHkgc291cmNlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBmYWxsYmFja0xvY2F0aW9uIC0gRW1wdHkgYmxvY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IFNlbWFudGljIGJsb2NrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QmxvY2sobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbGxiYWNrTG9jYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGUgPyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBmYWxsYmFja0xvY2F0aW9uLFxuICAgIHN0YXRlbWVudHM6IG5vZGUgPyBub2RlLmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpIDogW11cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IGEgY29tbWVudCBhbmQgaXRzIG93bmVyIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbW9zdCBvbmUgbmV3bGluZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXAgLSBTb3VyY2UgYmV0d2VlbiB0aGUgY29tbWVudCBhbmQgZm9sbG93aW5nIGl0ZW0uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2FwIGlzIGltbWVkaWF0ZSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBpc0ltbWVkaWF0ZUNvbW1lbnRHYXAoZ2FwKSB7XG4gIGxldCBuZXdsaW5lcyA9IDBcblxuICBmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBnYXApIHtcbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxuXCIpIHtcbiAgICAgIG5ld2xpbmVzKytcbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciAhPSBcIiBcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHRcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHJcIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld2xpbmVzIDw9IDFcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBzdXBwb3J0ZWQgUnVieSB2YWx1ZS10eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBSdWJ5IHR5cGUgY29tbWVudCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSBjb21tZW50IHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIHJldHVybiBkb2N1bWVudGVkVmFsdWVUeXBlKHtsYW5ndWFnZTogXCJydWJ5XCIsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBSdWJ5IGRlZmluaXRpb24gc2lnbmF0dXJlIGJlZm9yZSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgZnVuY3Rpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0J1aWx0aW5PdXRwdXRdIC0gV2hldGhlciBjb21waWxlciBhdXRob3JpdHkgYWRtaXRzIHRoZSBleGFjdCBvdXRwdXQgZmFjYWRlIGZ1bmN0aW9uLlxuICogQHJldHVybnMge1J1YnlGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgY29tbWVudHMsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkLCBhbGxvd0J1aWx0aW5PdXRwdXQgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gbm9kZS5wYXJhbWV0ZXJzXG5cbiAgaWYgKG5vZGUucmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJzaW5nbGV0b24gbWV0aG9kXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInB1dHNcIiAmJiAhYWxsb3dCdWlsdGluT3V0cHV0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uICdwdXRzJyBjYXB0dXJlcyBidWlsdC1pbiBwcmludGluZ1wiLCBuYW1lTG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJMaXN0ICYmIFtcbiAgICBwYXJhbWV0ZXJMaXN0Lm9wdGlvbmFsc1swXSwgcGFyYW1ldGVyTGlzdC5yZXN0LCBwYXJhbWV0ZXJMaXN0LnBvc3RzWzBdLCBwYXJhbWV0ZXJMaXN0LmtleXdvcmRzWzBdLFxuICAgIHBhcmFtZXRlckxpc3Qua2V5d29yZFJlc3QsIHBhcmFtZXRlckxpc3QuYmxvY2ssXG4gICAgcGFyYW1ldGVyTGlzdC5yZXF1aXJlZHMuZmluZCgocGFyYW1ldGVyKSA9PiAhKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpXG4gIF0uZmluZChCb29sZWFuKVxuXG4gIGlmICh1bnN1cHBvcnRlZFBhcmFtZXRlcikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwYXJhbWV0ZXJzXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBkZWNsYXJlZFR5cGVzID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJlZFR5cGVzLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgY29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVyTGlzdD8ucmVxdWlyZWRzID8/IFtdXG4gIGNvbnN0IGV4dHJhQW5ub3RhdGlvbiA9IFsuLi5kZWNsYXJlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXS5maW5kKChuYW1lKSA9PlxuICAgICFyZXF1aXJlZFBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyLm5hbWUgPT0gbmFtZSkpXG5cbiAgaWYgKGV4dHJhQW5ub3RhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgYW5ub3RhdGlvbiBmb3IgdW5rbm93biBwYXJhbWV0ZXIgJyR7ZXh0cmFBbm5vdGF0aW9ufSdgLCBsb2NhdGlvbilcbiAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGlmICghKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgcGFyYW1ldGVyLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gZGVjbGFyZWRUeXBlcy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlPy5zb3VyY2VUeXBlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkZWNsYXJlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH0sIHtuYW1lOiBwYXJhbWV0ZXJMb2NhdGlvbn0pXG4gIH0pXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZT8uc291cmNlVHlwZSA9PSBcIlt2b2lkXVwiXG4gICAgICA/IHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwicnVieVwiLCBcIlt2b2lkXVwiLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZS5sb2NhdGlvbilcbiAgICAgIDogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFJ1YnkgZGVmaW5pdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7UnVieUZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5LmJvZHkgOiBbXSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKFxuICAgIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cyxcbiAgICBjb250ZXh0LFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBzaWduYXR1cmUubG9jYXRpb25cbiAgKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgYmxvY2tzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gbm9kZXMgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHJvb3RzLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGVzKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBMb2NhbFZhcmlhYmxlV3JpdGVOb2RlLCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlKSByZXR1cm5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uOiBub2RlLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gICAgfSlcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwiZWFjaFwiICYmXG4gICAgICBub2RlLmJsb2NrIGluc3RhbmNlb2YgQmxvY2tOb2RlICYmIG5vZGUuYmxvY2sucGFyYW1ldGVycyBpbnN0YW5jZW9mIEJsb2NrUGFyYW1ldGVyc05vZGUgJiZcbiAgICAgIG5vZGUuYmxvY2sucGFyYW1ldGVycy5wYXJhbWV0ZXJzPy5yZXF1aXJlZHMubGVuZ3RoID09IDIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgIG5hbWU6IG5vZGUucmVjZWl2ZXIubmFtZSxcbiAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB2aXNpdChub2RlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBTdGFuZGFyZEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBzZW1hbnRpYyBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5RXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8ICEobm9kZS5zdXBlcmNsYXNzIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHxcbiAgICBub2RlLnN1cGVyY2xhc3MubmFtZSAhPSBcIlN0YW5kYXJkRXJyb3JcIiB8fCAhbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jIHx8IG5vZGUuYm9keSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IG5vZGVMb2NhdGlvbihub2RlLmNvbnN0YW50UGF0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogbm9kZUxvY2F0aW9uKG5vZGUuc3VwZXJjbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBSdWJ5IHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUnVieUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFNlbWFudGljIGNsYXNzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlZmVyZW5jZUNsYXNzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcywgZXJyb3JzLFxuICBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUuY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgbm9kZS5zdXBlcmNsYXNzIHx8IG5vZGUuaW5oZXJpdGFuY2VPcGVyYXRvckxvYyB8fFxuICAgICEobm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlZmVyZW5jZSBjbGFzcyBpbmhlcml0YW5jZSwgcXVhbGlmaWVkIG5hbWUsIG9yIGVtcHR5IGJvZHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IG5vZGUuYm9keS5ib2R5XG4gIGNvbnN0IGluaXRpYWxpemVycyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtEZWZOb2RlW119ICovIChtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlICYmIG1lbWJlci5uYW1lICE9IFwiaW5pdGlhbGl6ZVwiKSlcbiAgY29uc3QgcmVzZXJ2ZWRNZXRob2QgPSBtZXRob2ROb2Rlcy5maW5kKChtZXRob2QpID0+IHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkpXG5cbiAgaWYgKGluaXRpYWxpemVycy5sZW5ndGggIT0gMSB8fCBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gIShtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSkgfHwgcmVzZXJ2ZWRNZXRob2QpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIG9uZSBpbml0aWFsaXplciBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKGluaXRpYWxpemVyc1swXSlcbiAgY29uc3QgcGFyYW1ldGVycyA9IGluaXRpYWxpemVyLnBhcmFtZXRlcnM/LnJlcXVpcmVkcyA/PyBbXVxuICBjb25zdCBpbnZhbGlkUGFyYW1ldGVyID0gaW5pdGlhbGl6ZXIucGFyYW1ldGVycyAmJiBbaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5vcHRpb25hbHNbMF0sIGluaXRpYWxpemVyLnBhcmFtZXRlcnMucmVzdCxcbiAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLnBvc3RzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRSZXN0LFxuICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMuYmxvY2tdLmZpbmQoQm9vbGVhbilcbiAgY29uc3Qgc3RhdGVtZW50cyA9IGluaXRpYWxpemVyLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IGluaXRpYWxpemVyLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IGFubm90YXRpb25zID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYWNxdWlzaXRpb24gPSBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxICYmIHN0YXRlbWVudHNbMF0gaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlICYmXG4gICAgc3RhdGVtZW50c1swXS5uYW1lID09IFwiQHJlc291cmNlXCIgJiYgc3RhdGVtZW50c1swXS52YWx1ZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFzdGF0ZW1lbnRzWzBdLnZhbHVlLnJlY2VpdmVyICYmXG4gICAgIXN0YXRlbWVudHNbMF0udmFsdWUuYmxvY2sgJiYgc3RhdGVtZW50c1swXS52YWx1ZS5uYW1lID09IFwidjFfY29ubmVjdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAyICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDIgJiZcbiAgICBwYXJhbWV0ZXJzWzBdIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlICYmIHBhcmFtZXRlcnNbMF0ubmFtZSA9PSBcImhvc3RcIiAmJlxuICAgIHBhcmFtZXRlcnNbMV0gaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyc1sxXS5uYW1lID09IFwicG9ydFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS5uYW1lID09IFwiaG9zdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMV0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1sxXS5uYW1lID09IFwicG9ydFwiICYmIGRlY2xhcmF0aW9uLm5hbWUgPT0gXCJUQ1BTb2NrZXRcIiAmJlxuICAgIGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiXG5cbiAgaWYgKGluaXRpYWxpemVyLnJlY2VpdmVyIHx8IGludmFsaWRQYXJhbWV0ZXIgfHwgYW5ub3RhdGlvbnMucmV0dXJuVHlwZSB8fCBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGggfHxcbiAgICAhYWNxdWlzaXRpb24gJiYgc3RhdGVtZW50cy5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBpbml0aWFsaXplclwiLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGFjcXVpc2l0aW9uID8gW3dpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6MGAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlfSAqLyAoc3RhdGVtZW50c1swXSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IFwicmVzb3VyY2VcIixcbiAgICB0eXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfSAqLyAoc3RydWN0dXJlZENsb25lKGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlKSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0luc3RhbmNlVmFyaWFibGVXcml0ZU5vZGV9ICovIChzdGF0ZW1lbnRzWzBdKSwgZmlsZW5hbWUsIHNvdXJjZSl9KV0gOiBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFubm90YXRlZCA9IGFubm90YXRpb25zLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuXG4gICAgaWYgKCEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCAhKGFzc2lnbm1lbnQgaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlKSB8fFxuICAgICAgYXNzaWdubWVudC5uYW1lICE9IGBAJHtwYXJhbWV0ZXIubmFtZX1gIHx8ICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHxcbiAgICAgIGFzc2lnbm1lbnQudmFsdWUubmFtZSAhPSBwYXJhbWV0ZXIubmFtZSB8fCAhYW5ub3RhdGVkKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJpdmF0ZSBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIGluIHBhcmFtZXRlciBvcmRlclwiLFxuICAgICAgICBub2RlTG9jYXRpb24oYXNzaWdubWVudCA/PyBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShhbm5vdGF0ZWQuc291cmNlVHlwZSwgYFByaXZhdGUgZmllbGQgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKX0sIHtuYW1lOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBjb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhbm5vdGF0ZWQgPSBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBhY3F1aXNpdGlvblxuICAgICAgICA/IGNvbnZlcnRUeXBlKGFubm90YXRlZD8uc291cmNlVHlwZSwgYENvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgICBhbm5vdGF0ZWQ/LmxvY2F0aW9uLCBub21pbmFsTmFtZXMpXG4gICAgICAgIDogZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XS50eXBlfSwge25hbWU6IHBhcmFtZXRlckxvY2F0aW9ufSlcbiAgfSlcbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzOiBjb25zdHJ1Y3RvclBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IHByaXNtTG9jYXRpb24oaW5pdGlhbGl6ZXIubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICBjb25zdCBtZXRob2RTaWduYXR1cmVzID0gbWV0aG9kTm9kZXMubWFwKChtZXRob2QsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShtZXRob2QsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMsIGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gKSlcbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pKVxuICBjb25zdCBiYXNlID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHN9XG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnN0cnVjdG9yUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX0sXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IubG9jYXRpb24pXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2ROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW2luZGV4XVxuICAgIGNvbnN0IG1ldGhvZEJvZHkgPSBtZXRob2ROb2Rlc1tpbmRleF0uYm9keVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kQm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbWV0aG9kQm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0sIGZpbGVuYW1lLCBzb3VyY2UsIG1ldGhvZC5sb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkLXJlYWRlci9pbml0aWFsaXplci9mcmVlemUgUnVieSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7Q2xhc3NOb2RlfSBub2RlIC0gUHJpc20gY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUGFyc2VyLW93bmVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8IG5vZGUuc3VwZXJjbGFzcyB8fCBub2RlLmluaGVyaXRhbmNlT3BlcmF0b3JMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIHF1YWxpZmllZCBuYW1lXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG1lbWJlcnMgPSBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IG5vZGUuYm9keS5ib2R5IDogW11cbiAgY29uc3QgaW5pdGlhbGl6ZXJJbmRleCA9IG1lbWJlcnMuZmluZEluZGV4KChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG5cbiAgaWYgKGluaXRpYWxpemVySW5kZXggPCAwIHx8IGluaXRpYWxpemVySW5kZXggIT0gbWVtYmVycy5sZW5ndGggLSAxIHx8IG1lbWJlcnMuc2xpY2UoMCwgaW5pdGlhbGl6ZXJJbmRleCkuc29tZSgobWVtYmVyKSA9PlxuICAgICEobWVtYmVyIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG1lbWJlci5yZWNlaXZlciB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIgfHwgbWVtYmVyLmJsb2NrIHx8XG4gICAgbWVtYmVyLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZW1iZXIuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgdHlwZWQgcmVhZGVycyBhbmQgb25lIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzLmZpbmQoKG1lbWJlciwgaW5kZXgpID0+XG4gICAgICBpbmRleCA+PSBpbml0aWFsaXplckluZGV4ICsgMSB8fCAhKG1lbWJlciBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIpID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHJlYWRlck5vZGVzID0gLyoqIEB0eXBlIHtDYWxsTm9kZVtdfSAqLyAobWVtYmVycy5zbGljZSgwLCBpbml0aWFsaXplckluZGV4KSlcbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcmVhZGVyTm9kZXMubWFwKChyZWFkZXIpID0+IHtcbiAgICBjb25zdCBzeW1ib2wgPSAvKiogQHR5cGUge1N5bWJvbE5vZGV9ICovIChyZWFkZXIuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSlcbiAgICBjb25zdCBtZXRhZGF0YSA9IGFzc29jaWF0ZWRDb21tZW50cyhjb21tZW50cywgcmVhZGVyLCBzb3VyY2UpLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBtZXRhZGF0YS5maWx0ZXIoKFt0b2tlbl0pID0+IHRva2VuPy50ZXh0ID09IFwiQHR5cGVcIilcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHJlYWRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHwgbWV0YWRhdGEuc29tZSgoW3Rva2VuXSkgPT4gdG9rZW4/LnRleHQ/LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSAmJiB0b2tlbi50ZXh0ICE9IFwiQHR5cGVcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtaXNzaW5nIG9yIG1hbGZvcm1lZCByZWNvcmQgcmVhZGVyIHR5cGVcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gam9pbmVkQ29tbWVudFRva2VuKHR5cGVNZXRhZGF0YVswXSwgMSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IHN5bWJvbC51bmVzY2FwZWQudmFsdWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJlZFR5cGUuc291cmNlVHlwZSwgYFJlY29yZCBmaWVsZCAnJHtzeW1ib2wudW5lc2NhcGVkLnZhbHVlfSdgLCBmaWVsZExvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IHN5bWJvbC52YWx1ZUxvYyA/IHByaXNtTG9jYXRpb24oc3ltYm9sLnZhbHVlTG9jLCBmaWxlbmFtZSwgc291cmNlKSA6IGZpZWxkTG9jYXRpb259KVxuICB9KVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKG1lbWJlcnNbaW5pdGlhbGl6ZXJJbmRleF0pXG4gIGNvbnN0IHBhcmFtZXRlckxpc3QgPSBpbml0aWFsaXplci5wYXJhbWV0ZXJzXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJMaXN0Py5yZXF1aXJlZHMgPz8gW11cbiAgY29uc3QgaW52YWxpZFBhcmFtZXRlciA9IHBhcmFtZXRlckxpc3QgJiYgW3BhcmFtZXRlckxpc3Qub3B0aW9uYWxzWzBdLCBwYXJhbWV0ZXJMaXN0LnJlc3QsIHBhcmFtZXRlckxpc3QucG9zdHNbMF0sXG4gICAgcGFyYW1ldGVyTGlzdC5rZXl3b3Jkc1swXSwgcGFyYW1ldGVyTGlzdC5rZXl3b3JkUmVzdCwgcGFyYW1ldGVyTGlzdC5ibG9ja10uZmluZChCb29sZWFuKVxuICBjb25zdCBpbml0aWFsaXplclN0YXRlbWVudHMgPSBpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5LmJvZHkgOiBbXVxuXG4gIGlmIChpbml0aWFsaXplci5yZWNlaXZlciB8fCBpbnZhbGlkUGFyYW1ldGVyIHx8IHBhcmFtZXRlcnMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGggfHxcbiAgICBwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlciwgaW5kZXgpID0+ICEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCBwYXJhbWV0ZXIubmFtZSAhPSBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdLm5hbWUpIHx8XG4gICAgaW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYW5ub3RhdGlvbnMgPSB0eXBlQ29tbWVudHMoY29tbWVudHMsIGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChhbm5vdGF0aW9ucy5yZXR1cm5UeXBlIHx8IGFubm90YXRpb25zLnBhcmFtZXRlcnMuc2l6ZSAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImluY29tcGxldGUgcmVjb3JkIGluaXRpYWxpemVyIGFubm90YXRpb25zXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBwYXJhbWV0ZXIgPSAvKiogQHR5cGUge1JlcXVpcmVkUGFyYW1ldGVyTm9kZX0gKi8gKHBhcmFtZXRlcnNbaW5kZXhdKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBpbml0aWFsaXplclN0YXRlbWVudHNbaW5kZXhdXG4gICAgY29uc3QgYW5ub3RhdGVkID0gYW5ub3RhdGlvbnMucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAoIShhc3NpZ25tZW50IGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSkgfHwgYXNzaWdubWVudC5uYW1lICE9IGBAJHtmaWVsZC5uYW1lfWAgfHxcbiAgICAgICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHwgYXNzaWdubWVudC52YWx1ZS5uYW1lICE9IGZpZWxkLm5hbWUgfHwgIWFubm90YXRlZCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IGNvbnZlcnRUeXBlKGFubm90YXRlZC5zb3VyY2VUeXBlLCBgUmVjb3JkIGluaXRpYWxpemVyIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCxcbiAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGlmICghc2FtZVZhbHVlVHlwZShwYXJhbWV0ZXJUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCByZWFkZXIvaW5pdGlhbGl6ZXIgdHlwZSBtaXNtYXRjaFwiLCBhbm5vdGF0ZWQubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIGNvbnN0IGZyZWV6ZSA9IGluaXRpYWxpemVyU3RhdGVtZW50cy5hdCgtMSlcblxuICBpZiAoIWlzUnVieVJlY29yZEZyZWV6ZShmcmVlemUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBpbml0aWFsaXplciB3aXRob3V0IGZpbmFsIGZyZWV6ZVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBjYW5vbmljYWwgc291cmNlIGZyZWV6aW5nIG9yIHRoZSBnZW5lcmF0ZWQgcm9vdC1vd25lZCBLZXJuZWwgaW1wbGVtZW50YXRpb24gYmluZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZSB8IHVuZGVmaW5lZH0gbm9kZSAtIEZpbmFsIGluaXRpYWxpemVyIHN0YXRlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc1J1YnlSZWNvcmRGcmVlemUobm9kZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG5vZGUuYmxvY2spIHJldHVybiBmYWxzZVxuICBpZiAoIW5vZGUucmVjZWl2ZXIpIHJldHVybiBub2RlLm5hbWUgPT0gXCJmcmVlemVcIiAmJiAhbm9kZS5hcmd1bWVudHNfXG4gIGlmIChub2RlLm5hbWUgIT0gXCJiaW5kX2NhbGxcIiB8fCAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8XG4gICAgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFNlbGZOb2RlKSB8fCAhKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDYWxsTm9kZSkpIHJldHVybiBmYWxzZVxuICBjb25zdCBtZXRob2QgPSBub2RlLnJlY2VpdmVyXG5cbiAgaWYgKG1ldGhvZC5uYW1lICE9IFwiaW5zdGFuY2VfbWV0aG9kXCIgfHwgIW1ldGhvZC5jYWxsT3BlcmF0b3JMb2MgfHwgbWV0aG9kLmJsb2NrIHx8XG4gICAgbWV0aG9kLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZXRob2QuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkgfHxcbiAgICAhKG1ldGhvZC5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbWV0aG9kLnJlY2VpdmVyLnBhcmVudCA9PSBudWxsICYmIG1ldGhvZC5yZWNlaXZlci5kZWxpbWl0ZXJMb2MgIT0gbnVsbCAmJiBtZXRob2QucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiICYmXG4gICAgbWV0aG9kLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWUgPT0gXCJmcmVlemVcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBSdWJ5IGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7SWZOb2RlIHwgVW5sZXNzTm9kZX0gbm9kZSAtIFByaXNtIGNvbmRpdGlvbmFsIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSA/IG5vZGUua2V5d29yZExvYyA6IG5vZGUuaWZLZXl3b3JkTG9jXG5cbiAgaWYgKCFrZXl3b3JkTG9jYXRpb24gfHwga2V5d29yZExvY2F0aW9uLnN0YXJ0T2Zmc2V0ICE9IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibW9kaWZpZXIgY29uZGl0aW9uYWxcIiwga2V5d29yZExvY2F0aW9uXG4gICAgICA/IHByaXNtTG9jYXRpb24oa2V5d29yZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChub2RlLnByZWRpY2F0ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUucHJlZGljYXRlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3B0aW9uYWwgdHJ1dGhpbmVzcyBjb25kaXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiAhZXhhY3ROaWxUZXN0KG5vZGUucHJlZGljYXRlLCBzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVubGVzcyBjb25kaXRpb24gb3RoZXIgdGhhbiBhbiBleGFjdCBuaWw/IHByZXNlbmNlIGd1YXJkXCIsIG5vZGVMb2NhdGlvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBwcmVkaWNhdGUgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uZGl0aW9uID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgJiYgcHJlZGljYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJlxuICAgIHByZWRpY2F0ZS5vcGVyYW5kLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiXG4gICAgPyBwcmVkaWNhdGUub3BlcmFuZFxuICAgIDogcHJlZGljYXRlXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiBjb25kaXRpb24ua2luZCAhPSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidW5sZXNzIGNvbmRpdGlvbiBvdGhlciB0aGFuIGFuIGV4YWN0IG5pbD8gcHJlc2VuY2UgZ3VhcmRcIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgbGV0IGFsdGVybmF0ZVxuICBjb25zdCBzdWJzZXF1ZW50ID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgPyBub2RlLmVsc2VDbGF1c2UgOiBub2RlLnN1YnNlcXVlbnRcblxuICBpZiAoc3Vic2VxdWVudCkge1xuICAgIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgRWxzZU5vZGUpIHtcbiAgICAgIGFsdGVybmF0ZSA9IGNvbnZlcnRCbG9jayhzdWJzZXF1ZW50LnN0YXRlbWVudHMsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgICBub2RlTG9jYXRpb24oc3Vic2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgSWZOb2RlKSB7XG4gICAgICBhbHRlcm5hdGUgPSB7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHN1YnNlcXVlbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKHN1YnNlcXVlbnQsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKV1cbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBzdWJzZXF1ZW50LmNvbnN0cnVjdG9yLm5hbWUsIG5vZGVMb2NhdGlvbihzdWJzZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGFsdGVybmF0ZSA/IHthbHRlcm5hdGV9IDoge30pLFxuICAgIGNvbmRpdGlvbixcbiAgICBjb25zZXF1ZW50OiBjb252ZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLCBjb21tZW50cywgY29uc2VxdWVudENvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKSxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBvcmRpbmFyeSBibG9jay1mb3JtIFJ1YnkgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtXaGlsZU5vZGV9IG5vZGUgLSBQcmlzbSB3aGlsZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUua2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5pc0JlZ2luTW9kaWZpZXIoKSB8fCAhbm9kZS5jbG9zaW5nTG9jIHx8IG5vZGUua2V5d29yZExvYy5zdGFydE9mZnNldCAhPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZGlmaWVyIHdoaWxlXCIsIGtleXdvcmRMb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDoga2V5d29yZExvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgc3VwcG9ydGVkIFJ1YnkgcHV0cyBlbnRyeSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLm5hbWUgIT0gXCJwdXRzXCIgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogUGFyc2VzIFJ1YnkgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBjbGFzc2VzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVieSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlUHJpc20oc291cmNlLCB7ZmlsZXBhdGg6IGZpbGVuYW1lfSlcblxuICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JzWzBdXG4gICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGVycm9yLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCArIGVycm9yLmxvY2F0aW9uLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiUEFSU0VfRVJST1JcIiwgbGFuZ3VhZ2U6IFwicnVieVwiLCBsb2NhdGlvbiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pXG4gIH1cblxuICBpZiAoIShyZXN1bHQudmFsdWUgaW5zdGFuY2VvZiBQcm9ncmFtTm9kZSkpIHRocm93IG5ldyBFcnJvcihcIlByaXNtIHJldHVybmVkIGEgbm9uLXByb2dyYW0gcm9vdC5cIilcblxuICBsZXQgYm9keSA9IHRhc2swMzRSdWJ5Qm9keShyZXN1bHQudmFsdWUuc3RhdGVtZW50cy5ib2R5LCByZXN1bHQuY29tbWVudHMsIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSkge1xuICAgIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSlcbiAgICBjb25zdCBtb2R1bGVOb2RlID0gLyoqIEB0eXBlIHtNb2R1bGVOb2RlfSAqLyAoYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgTW9kdWxlTm9kZSkpXG5cbiAgICBib2R5ID0gbW9kdWxlTm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVOb2RlLmJvZHkuYm9keSA6IFtdXG4gICAgY29uc3QgbW9kdWxlRnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKGlzTW9kdWxlRnVuY3Rpb25NYXJrZXIpXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIERlZk5vZGUpXG5cbiAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoID4gMCAmJiAobW9kdWxlRnVuY3Rpb25Ob2Rlcy5sZW5ndGggIT0gMSB8fCBib2R5LmluZGV4T2YobW9kdWxlRnVuY3Rpb25Ob2Rlc1swXSkgPiBib2R5LmluZGV4T2YoZGVmaW5pdGlvbnNbMF0pKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSBmdW5jdGlvbnMgb3V0c2lkZSBvbmUgbGVhZGluZyBtb2R1bGVfZnVuY3Rpb24gcHJvZmlsZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24obW9kdWxlRnVuY3Rpb25Ob2Rlc1sxXSA/PyBkZWZpbml0aW9uc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gIWlzTW9kdWxlRnVuY3Rpb25NYXJrZXIobm9kZSkgJiYgIXJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpKVxuICB9XG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIENsYXNzTm9kZSlcbiAgY29uc3QgZXJyb3JOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnN1cGVyY2xhc3MgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUuc3VwZXJjbGFzcy5uYW1lID09IFwiU3RhbmRhcmRFcnJvclwiKVxuICBjb25zdCByZWZlcmVuY2VDbGFzc05vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmXG4gICAgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID4gMCAmJiBub2RlLmJvZHkuYm9keS5ldmVyeSgobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgZG9jdW1lbnRlZCA9IHR5cGVDb21tZW50cyhyZXN1bHQuY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGlkKVxuXG4gICAgaWYgKGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplIHx8IGRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbiBvbiByZWNvcmQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgaWQsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmREZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICAuLi4oZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksIGZpZWxkczogW10sIGlkOiBgY2xhc3M6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLCBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlb3BlbmVkID0gY2xhc3NEZWNsYXJhdGlvbnMuZmluZCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PlxuICAgIGNsYXNzRGVjbGFyYXRpb25zLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBkZWNsYXJhdGlvbi5uYW1lKSAhPSBpbmRleClcblxuICBpZiAocmVvcGVuZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHJlZmVyZW5jZSBjbGFzcyByZW9wZW5pbmcgJyR7cmVvcGVuZWQubmFtZX0nYCwgcmVvcGVuZWQubG9jYXRpb24pXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGZvciAoY29uc3QgW25hbWUsIGRlY2xhcmF0aW9uXSBvZiBwcm9ncmFtPy5jbGFzc2VzID8/IFtdKSByZWNvcmROYW1lcy5zZXQobmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UnVieUVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChbXG4gICAgLi4uWy4uLnByb2dyYW0/LmNsYXNzZXM/LnZhbHVlcygpID8/IFtdXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge1tzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25dfSAqLyAoXG4gICAgICBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpLFxuICAgIC4uLmNsYXNzRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7W3N0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbl19ICovIChcbiAgICAgIFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgXSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSlcbiAgY29uc3QgYWxsb3dzQnVpbHRpbk91dHB1dCA9IGNhcGFiaWxpdGllcy5zb21lKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09IFwidjFfd3JpdGVfbGluZVwiKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCwgYWxsb3dzQnVpbHRpbk91dHB1dCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLmNhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMoY2FwYWJpbGl0aWVzLCBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSksXG4gICAgLi4uKHByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXSldLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydFJ1YnlSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIHJlc3VsdC5jb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRSdWJ5UmVmZXJlbmNlQ2xhc3Mobm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLFxuICAgICAgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZW50cnlOb2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlKSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0uaXNFbnRyeSAmJiBlbnRyeU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZW50cnlOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZmlyc3RFbnRyeSA9IGVudHJ5Tm9kZXNbMF1cbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGZpcnN0RW50cnkgPyBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBmaXJzdEVudHJ5LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoXG4gICAgICBzb3VyY2UsXG4gICAgICAoZW50cnlOb2Rlcy5hdCgtMSk/LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID8/IDApICsgKGVudHJ5Tm9kZXMuYXQoLTEpPy5sb2NhdGlvbi5sZW5ndGggPz8gMClcbiAgICApXG4gICkgOiBsb2NhdGlvblxuICBjb25zdCBlbnRyeUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yczogZXJyb3JzQnlJZCwgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclJ1YnkoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiByZWNvcmRzQnlJZH1cbiAgY29uc3QgZW50cnlCbG9jayA9IHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBlbnRyeU5vZGVzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgcmVzdWx0LmNvbW1lbnRzLCBlbnRyeUNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKCFwcm9ncmFtICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBSdWJ5IHByb2JlIHN1cHBvcnQgYmVmb3JlIHBvcnRhYmxlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gYm9keSAtIFBhcnNlZCB0b3AtbGV2ZWwgbm9kZXMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjoge3N0YXJ0T2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyfX1bXX0gY29tbWVudHMgLSBQYXJzZXIgY29tbWVudHMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBQb3J0YWJsZSBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNFJ1YnlCb2R5KGJvZHksIGNvbW1lbnRzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBib2R5XG4gIGNvbnN0IG1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+XG4gICAgc291cmNlLnNsaWNlKGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQsIGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBjb21tZW50LmxvY2F0aW9uLmxlbmd0aCkgPT1cbiAgICAgIFwiIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGJvZHlcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcInJ1YnlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJDbGFzc05vZGVcIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NOb2RlXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VcIl0sXG4gICAgW1wiR2xvYmFsVmFyaWFibGVXcml0ZU5vZGVcIiwgXCIkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCJdLCBbXCJEZWZOb2RlXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRGVmTm9kZVwiLCBcInByb2JlUmVhZFwiXSwgW1wiRGVmTm9kZVwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiBib2R5W2luZGV4XT8uY29uc3RydWN0b3IubmFtZSA9PSBraW5kICYmIFJlZmxlY3QuZ2V0KGJvZHlbaW5kZXhdLCBcIm5hbWVcIikgPT0gbmFtZSlcbiAgY29uc3QgZW5kID0gY29tbWVudHMuZmluZCgoY29tbWVudCkgPT5cbiAgICBzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKSA9PVxuICAgICAgXCIjIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcIilcblxuICBpZiAoIW1hdGNoZXMgfHwgIWVuZCB8fCBlbmQubG9jYXRpb24uc3RhcnRPZmZzZXQgPCBib2R5W2V4cGVjdGVkLmxlbmd0aCAtIDFdLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgYm9keVtleHBlY3RlZC5sZW5ndGggLSAxXS5sb2NhdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gYm9keS5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNhbm9uaWNhbCBwYXJzZXItb3duZWQgUnVieSBtb2R1bGUgYW5kIGxpdGVyYWwgcmVxdWlyZS1yZWxhdGl2ZSBlZGdlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmcsIG5hdGl2ZVJlZmVyZW5jZXM6IHtmb3JtOiBcImNvbnN0cnVjdG9yLWNhbGxcIiB8IFwicmVjZWl2ZXItY2FsbFwiIHwgXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTW9kdWxlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nfVtdfX0gUGFyc2VyLW93bmVkIFJ1YnkgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVByaXNtKHNvdXJjZSwge2ZpbGVwYXRoOiBmaWxlbmFtZX0pXG5cbiAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yc1swXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCwgZXJyb3IubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBlcnJvci5sb2NhdGlvbi5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb24sIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KVxuICB9XG4gIGlmICghKHJlc3VsdC52YWx1ZSBpbnN0YW5jZW9mIFByb2dyYW1Ob2RlKSkgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBub24tcHJvZ3JhbSByb290LlwiKVxuICBjb25zdCBib2R5ID0gcmVzdWx0LnZhbHVlLnN0YXRlbWVudHMuYm9keVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuICBjb25zdCBkeW5hbWljUmVxdWlyZSA9IGJvZHkuZmluZChpc0R5bmFtaWNTdGRsaWJSZXF1aXJlKVxuXG4gIGlmIChkeW5hbWljUmVxdWlyZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGR5bmFtaWNSZXF1aXJlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IFwiRHluYW1pYyByZXF1aXJlIGNhbm5vdCBwcm92ZSBhIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGlkZW50aXR5LlwiXG4gICAgfSlcbiAgfVxuICB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbnZhbGlkID0gYm9keS5maW5kKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKSAmJiAhaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgJiYgIWlzU3RkbGliUmVxdWlyZShub2RlKSlcblxuICBpZiAobW9kdWxlcy5sZW5ndGggIT0gMSB8fCAhKG1vZHVsZXNbMF0uY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgaW52YWxpZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvbmUgc2ltcGxlIG1vZHVsZSB3aXRoIGxpdGVyYWwgcmVxdWlyZV9yZWxhdGl2ZSBkZWNsYXJhdGlvbnNcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IG1vZHVsZXNbMV0gPz8gbW9kdWxlc1swXSA/PyByZXN1bHQudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGltcG9ydHMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgfHwgaXNTdGRsaWJSZXF1aXJlKG5vZGUpKS5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtDYWxsTm9kZX0gKi8gKG5vZGUpXG4gICAgY29uc3QgYXJndW1lbnQgPSAvKiogQHR5cGUge1N0cmluZ05vZGV9ICovIChjYWxsLmFyZ3VtZW50c18/LmFyZ3VtZW50c19bMF0pXG4gICAgY29uc3Qgc3RkbGliQ2FuZGlkYXRlID0gaXNTdGRsaWJSZXF1aXJlKGNhbGwpXG5cbiAgICBpZiAoIWFyZ3VtZW50LnVuZXNjYXBlZC52YWxpZEVuY29kaW5nIHx8IGFyZ3VtZW50LnVuZXNjYXBlZC5lbmNvZGluZyAhPSBcInV0Zi04XCIgfHwgYXJndW1lbnQuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLVVURi04IHJlcXVpcmVfcmVsYXRpdmUgcGF0aFwiLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW1wb3J0XCIpLFxuICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjYWxsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyOiBhcmd1bWVudC51bmVzY2FwZWQudmFsdWUsXG4gICAgICAuLi4oc3RkbGliQ2FuZGlkYXRlID8ge3N0ZGxpYkNhbmRpZGF0ZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpfSA6IHt9KSxcbiAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgfVxuICB9KVxuICBjb25zdCBtb2R1bGVCb2R5ID0gbW9kdWxlc1swXS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVzWzBdLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kdWxlQm9keSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIVtcInByaXZhdGVfY2xhc3NfbWV0aG9kXCIsIFwicHJpdmF0ZV9jb25zdGFudFwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSBjb250aW51ZVxuICAgIGNvbnN0IG1hcmtlciA9IHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpXG5cbiAgICBpZiAoIW1hcmtlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgbWFsZm9ybWVkICR7bm9kZS5uYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodmlzaWJpbGl0eS5oYXMobWFya2VyLm5hbWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGBkdXBsaWNhdGUgdmlzaWJpbGl0eSBtYXJrZXIgZm9yICcke21hcmtlci5uYW1lfSdgLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBtb2R1bGVCb2R5LmZpbmQoKGNhbmRpZGF0ZSkgPT4gbWFya2VyLmtpbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERlZk5vZGUgJiYgY2FuZGlkYXRlLm5hbWUgPT0gbWFya2VyLm5hbWVcbiAgICAgIDogY2FuZGlkYXRlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIGNhbmRpZGF0ZS5uYW1lID09IG1hcmtlci5uYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBtb2R1bGVCb2R5LmluZGV4T2YoZGVjbGFyYXRpb24pID4gbW9kdWxlQm9keS5pbmRleE9mKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGB2aXNpYmlsaXR5IG1hcmtlciB3aXRob3V0IGFuIGVhcmxpZXIgJHttYXJrZXIua2luZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHZpc2liaWxpdHkuc2V0KG1hcmtlci5uYW1lLCBtYXJrZXIua2luZClcbiAgfVxuICBjb25zdCBleHBvcnRzID0gbW9kdWxlQm9keS5mbGF0TWFwKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpIHtcbiAgICAgIGNvbnN0IGtpbmQgPSBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSA/IFwiZnVuY3Rpb25cIiA6IG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgbm9kZS5ib2R5LmJvZHkuZXZlcnkoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSkgPyBcImNsYXNzXCIgOiBcInJlY29yZFwiXG5cbiAgICAgIGlmICh2aXNpYmlsaXR5LmdldChub2RlLm5hbWUpID09IGtpbmQpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIGV4cG9ydGVkTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBsb2NhbE5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlID8gbm9kZS5jb25zdGFudFBhdGggOiBub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3ltYm9sS2luZDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0gKi8gKGtpbmQpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfV1cbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH0pXG4gIGNvbnN0IG5hdGl2ZVJlZmVyZW5jZXMgPSBydWJ5TmF0aXZlUmVmZXJlbmNlcyhtb2R1bGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0cywgbmF0aXZlTmFtZTogbW9kdWxlc1swXS5uYW1lLCBuYXRpdmVSZWZlcmVuY2VzfVxufVxuXG4vKipcbiAqIFJlamVjdHMgcGFyc2VyLXByb3ZlZCBhdHRlbXB0cyB0byB1c2Ugb3IgbXV0YXRlIHRoZSBib3VuZGVkIHNvY2tldCBmYWNhZGUgb3V0c2lkZSBpdHMgZXhhY3Qgc3VyZmFjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBib2R5IC0gUHJpc20gcHJvZ3JhbSBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IGJvZHkuc29tZSgobm9kZSkgPT4gaXNTdGRsaWJSZXF1aXJlKG5vZGUpICYmIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIpXG4gIGNvbnN0IHJlb3BlbmVkID0gYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIG5vZGUubmFtZSA9PSBcIlRDUFNvY2tldFwiKVxuXG4gIGlmIChhY3RpdmUgJiYgcmVvcGVuZWQpIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9SRU9QRU5FRFwiLFxuICAgIGxhbmd1YWdlOiBcInJ1YnlcIixcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlb3BlbmVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBtZXNzYWdlOiBcIkNhbGxlciBzb3VyY2UgcmVvcGVucyB0aGUgY29tcGlsZXItb3duZWQgVENQU29ja2V0IGZhY2FkZSBpZGVudGl0eS5cIlxuICB9KVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBub2RlIGZvciBib3VuZGVkIG5hdGl2ZSBhdHRlbXB0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIFByaXNtIG5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyXG4gICAgICBjb25zdCB0Y3BSZWNlaXZlciA9IHJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiByZWNlaXZlci5uYW1lID09IFwiVENQU29ja2V0XCJcblxuICAgICAgaWYgKHRjcFJlY2VpdmVyKSB7XG4gICAgICAgIGlmICghYWN0aXZlKSB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfSURFTlRJVFlfVU5QUk9WRURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0NvbnN0YW50UmVhZE5vZGV9ICovIChyZWNlaXZlciksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiVENQU29ja2V0IHJlcXVpcmVzIHRoZSBleGFjdCBwYXJzZXItcHJvdmVkIHJlcXVpcmUgXFxcInNvY2tldFxcXCIgaWRlbnRpdHkuXCJcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPSBcIm5ld1wiIHx8IG5vZGUuYmxvY2sgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfTUVNQkVSX1VOU1VQUE9SVEVEXCIsXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJUQ1BTb2NrZXQgc3VwcG9ydHMgb25seSBleGFjdCB0d28tYXJndW1lbnQgbmV3IHdpdGhvdXQgYSBibG9jay5cIlxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtlcm5lbFB1dHMgPSAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgfHxcbiAgICAgICAgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5yZWNlaXZlci5uYW1lID09IFwiS2VybmVsXCIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiXG5cbiAgICAgIGlmIChhY3RpdmUgJiYga2VybmVsUHV0cyAmJiAobm9kZS5ibG9jayB8fCBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9NRU1CRVJfVU5TVVBQT1JURURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBtZXNzYWdlOiBcIlRoZSBUYXNrIDAzNyBPdXRwdXQgZmFjYWRlIHN1cHBvcnRzIGV4YWN0bHkgb25lIHN0cmluZyBhcmd1bWVudCB3aXRob3V0IGEgYmxvY2suXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGV4YWN0IFRhc2sgMDM3IG5hdGl2ZSBpZGVudGl0aWVzIGZyb20gUHJpc20gbm9kZXMgaW4gc291cmNlIG9yZGVyLlxuICogQHBhcmFtIHtNb2R1bGVOb2RlfSBtb2R1bGUgLSBQYXJzZWQgYXBwbGljYXRpb24gbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7Zm9ybTogXCJjb25zdHJ1Y3Rvci1jYWxsXCIgfCBcInJlY2VpdmVyLWNhbGxcIiB8IFwidW5xdWFsaWZpZWQtY2FsbFwiLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU1vZHVsZTogc3RyaW5nLCBzeW1ib2w6IHN0cmluZ31bXX0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgcmVmZXJlbmNlcy5cbiAqL1xuZnVuY3Rpb24gcnVieU5hdGl2ZVJlZmVyZW5jZXMobW9kdWxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIC8qKiBAdHlwZSB7e2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiIHwgXCJyZWNlaXZlci1jYWxsXCIgfCBcInVucXVhbGlmaWVkLWNhbGxcIiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYXRpdmVNb2R1bGU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIHN5bWJvbDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCByZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgbm9kZSB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2UgdGV4dC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgICAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIpIHtcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7Zm9ybTogXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG5hdGl2ZU1vZHVsZTogXCJydWJ5Oktlcm5lbFwiLFxuICAgICAgICBvZmZzZXQ6IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQsIHN5bWJvbDogXCJwdXRzXCJ9KVxuICAgIH1cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLmJsb2NrICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwicmVjZWl2ZXItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwicnVieTpLZXJuZWxcIixcbiAgICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBzeW1ib2w6IFwicHV0c1wifSlcbiAgICB9XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5ibG9jayAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDIgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIlRDUFNvY2tldFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwic29ja2V0XCIsXG4gICAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldCwgc3ltYm9sOiBcIlRDUFNvY2tldFwifSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgdmlzaXQobW9kdWxlKVxuICByZXR1cm4gcmVmZXJlbmNlcy5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5vZmZzZXQgLSByaWdodC5vZmZzZXQpLm1hcCgoe29mZnNldDogX29mZnNldCwgLi4ucmVmZXJlbmNlfSkgPT4gcmVmZXJlbmNlKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBpcyBvbmUgY2Fub25pY2FsIGxpdGVyYWwgcmVsYXRpdmUgbG9hZCBlZGdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhIHN1cHBvcnRlZCByZXF1aXJlLXJlbGF0aXZlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWlyZVJlbGF0aXZlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlciAmJiAhbm9kZS5ibG9jayAmJiBub2RlLm5hbWUgPT0gXCJyZXF1aXJlX3JlbGF0aXZlXCIgJiZcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBTdHJpbmdOb2RlXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUnVieSBub2RlIGlzIG9uZSBwYXJzZXItcHJvdmVkIGxpdGVyYWwgZmFjYWRlIHJlcXVpcmUgY2FuZGlkYXRlLlxuICogT3RoZXIgbG9hZC1wYXRoIHJlcXVpcmVzIHJldGFpbiB0aGUgVGFzayAwMTAgdW5zdXBwb3J0ZWQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBsaXRlcmFsIFNlbWFudGlmb2xkIGZhY2FkZSByZXF1aXJlLlxuICovXG5mdW5jdGlvbiBpc1N0ZGxpYlJlcXVpcmUobm9kZSkge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyICYmICFub2RlLmJsb2NrICYmIG5vZGUubmFtZSA9PSBcInJlcXVpcmVcIiAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiZcbiAgICAobm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIgfHxcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLnVuZXNjYXBlZC52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQvXCIpKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgZmFjYWRlIHJlcXVpcmUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgY2FsbC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBwYXJzZXIgZXhwb3NlcyBhIG5vbmxpdGVyYWwgcmVxdWlyZS5cbiAqL1xuZnVuY3Rpb24gaXNEeW5hbWljU3RkbGliUmVxdWlyZShub2RlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLmJsb2NrIHx8IG5vZGUubmFtZSAhPSBcInJlcXVpcmVcIiB8fFxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3RyaW5nTm9kZSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBSdWJ5IG5vZGUgaXMgdGhlIGNhbm9uaWNhbCBtb2R1bGUtZnVuY3Rpb24gbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIG1hcmtlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGEgYmFyZSBtb2R1bGUtZnVuY3Rpb24gY2FsbC5cbiAqL1xuZnVuY3Rpb24gaXNNb2R1bGVGdW5jdGlvbk1hcmtlcihub2RlKSB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5uYW1lID09IFwibW9kdWxlX2Z1bmN0aW9uXCIgJiYgIW5vZGUuYXJndW1lbnRzX1xufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBnZW5lcmF0ZWQgUnVieSB2aXNpYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBtb2R1bGUtYm9keSBub2RlLlxuICogQHJldHVybnMge3traW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgbmFtZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gTWFya2VyIG1lYW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpIHtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBub2RlLnJlY2VpdmVyIHx8IG5vZGUuYmxvY2sgfHxcbiAgICAhW1wicHJpdmF0ZV9jbGFzc19tZXRob2RcIiwgXCJwcml2YXRlX2NvbnN0YW50XCJdLmluY2x1ZGVzKG5vZGUubmFtZSkgfHxcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBub2RlLm5hbWUgPT0gXCJwcml2YXRlX2NsYXNzX21ldGhvZFwiID8gXCJmdW5jdGlvblwiIDogXCJyZWNvcmRcIixcbiAgICBuYW1lOiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBhcnNlci1vd25lZCBzaW1wbGUgUnVieSBjb25zdGFudCBwYXRoIHdpdGhvdXQgaW5zcGVjdGluZyBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Q29uc3RhbnRSZWFkTm9kZSB8IENvbnN0YW50UGF0aE5vZGV9IG5vZGUgLSBDb25zdGFudCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUXVhbGlmaWVkIGNvbnN0YW50IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50UGF0aE5hbWUobm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHJldHVybiBub2RlLm5hbWVcbiAgaWYgKHR5cGVvZiBub2RlLm5hbWUgIT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBjb25zdGFudCBwYXRoIHdpdGhvdXQgYSBuYW1lLlwiKVxuICBpZiAoIW5vZGUucGFyZW50KSByZXR1cm4gbm9kZS5uYW1lXG4gIGlmICghKG5vZGUucGFyZW50IGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShub2RlLnBhcmVudCBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYW4gdW5zdXBwb3J0ZWQgY29uc3RhbnQtcGF0aCBwYXJlbnQuXCIpXG4gIH1cblxuICByZXR1cm4gYCR7Y29uc3RhbnRQYXRoTmFtZShub2RlLnBhcmVudCl9Ojoke25vZGUubmFtZX1gXG59XG4iXX0=
1910
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVieS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcnVieS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEVBQ2YsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ3hHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFB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S0FBSyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZO1FBQ3RFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNoRixVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVkscUJBQXFCLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNO1FBQzlFLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxxQkFBcUIsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU07UUFDOUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLHFCQUFxQjtRQUM3RSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU07UUFDM0QsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLHFCQUFxQjtRQUM3RSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVc7UUFDOUYsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUFBO0lBRXJFLElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxNQUFN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QUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge1xuICBBbmROb2RlLFxuICBBcnJheU5vZGUsXG4gIEFzc29jTm9kZSxcbiAgQmxvY2tOb2RlLFxuICBCbG9ja1BhcmFtZXRlcnNOb2RlLFxuICBCZWdpbk5vZGUsXG4gIEJyZWFrTm9kZSxcbiAgQ2FsbE5vZGUsXG4gIENsYXNzTm9kZSxcbiAgQ29uc3RhbnRQYXRoTm9kZSxcbiAgQ29uc3RhbnRSZWFkTm9kZSxcbiAgRGVmTm9kZSxcbiAgRWxzZU5vZGUsXG4gIEVtYmVkZGVkU3RhdGVtZW50c05vZGUsXG4gIEZhbHNlTm9kZSxcbiAgSGFzaE5vZGUsXG4gIElmTm9kZSxcbiAgSW50ZWdlck5vZGUsXG4gIEluc3RhbmNlVmFyaWFibGVXcml0ZU5vZGUsXG4gIEluc3RhbmNlVmFyaWFibGVSZWFkTm9kZSxcbiAgSW50ZXJwb2xhdGVkU3RyaW5nTm9kZSxcbiAgTG9jYWxWYXJpYWJsZVJlYWROb2RlLFxuICBMb2NhbFZhcmlhYmxlVGFyZ2V0Tm9kZSxcbiAgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSxcbiAgTW9kdWxlTm9kZSxcbiAgTmV4dE5vZGUsXG4gIE5pbE5vZGUsXG4gIE9yTm9kZSxcbiAgUGFyZW50aGVzZXNOb2RlLFxuICBQcm9ncmFtTm9kZSxcbiAgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLFxuICBSZWRvTm9kZSxcbiAgUmVzY3VlTm9kZSxcbiAgUmV0dXJuTm9kZSxcbiAgUmV0cnlOb2RlLFxuICBTZWxmTm9kZSxcbiAgU3RhdGVtZW50c05vZGUsXG4gIFN0cmluZ05vZGUsXG4gIFN5bWJvbE5vZGUsXG4gIFRydWVOb2RlLFxuICBVbmxlc3NOb2RlLFxuICBXaGlsZU5vZGUsXG4gIGxvYWRQcmlzbVxufSBmcm9tIFwiQHJ1YnkvcHJpc21cIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgU2VtYW50aWZvbGREaWFnbm9zdGljLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeX0gZnJvbSBcIi4uL3NlbWFudGljL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbiwgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0fSBmcm9tIFwiLi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHt3aXRoQWRhcHRlZE9wZXJhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiXG5pbXBvcnQge3dpdGhQYXJzZXJSYW5nZXN9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVJldHVyblR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzLCBkb2N1bWVudGVkVmFsdWVUeXBlLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUmV0dXJuVHlwZSwgb3JkZXJlZE1hcFR5cGVGcm9tTWFwLCBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZX0gZnJvbSBcIi4vdHlwZXMuanNcIlxuY29uc3QgcGFyc2VQcmlzbSA9IGF3YWl0IGxvYWRQcmlzbSgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fc2VuZF9fXCIsIFwiZXh0ZW5kXCIsIFwiZmV0Y2hcIiwgXCJpbnN0YW5jZV9ldmFsXCIsIFwiaW5zdGFuY2VfZXhlY1wiLCBcIm1ldGhvZFwiLCBcIm1ldGhvZF9taXNzaW5nXCIsIFwicHVibGljX3NlbmRcIixcbiAgXCJyZXNwb25kX3RvX21pc3Npbmc/XCIsIFwic2VuZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiLCBcInNpemVcIlxuXSlcbi8qKiBAdHlwZWRlZiB7e25hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufX0gUnVieUZ1bmN0aW9uU2lnbmF0dXJlICovXG4vKiogQHR5cGVkZWYge3tiaW5kaW5nczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5kaW5nVHlwZT4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZXJyb3JzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgcmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+LCBsb29wRGVwdGg/OiBudW1iZXIsIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn19IFJ1YnlDb252ZXJzaW9uQ29udGV4dCAqL1xuY29uc3QgcnVieUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIj09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9XCIsIFwiTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5cbi8qKlxuICogUmV0dXJucyBhIG5vcm1hbGl6ZWQgUHJpc20gbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2xvY2F0aW9uOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Mb2NhdGlvbn19IG5vZGUgLSBQcmlzbSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gcHJpc21Mb2NhdGlvbihub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUHJpc20gbG9jYXRpb24gaW50byBhIG5vcm1hbGl6ZWQgc291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Mb2NhdGlvbn0gbG9jYXRpb24gLSBQcmlzbSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFNvdXJjZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gcHJpc21Mb2NhdGlvbihsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQpLFxuICAgIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgbG9jYXRpb24ubGVuZ3RoKVxuICApXG59XG5cbi8qKlxuICogU2xpY2VzIEphdmFTY3JpcHQgc291cmNlIHVzaW5nIFByaXNtJ3MgVVRGLTggYnl0ZSBvZmZzZXRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydE9mZnNldCAtIEluY2x1c2l2ZSBQcmlzbSBieXRlIG9mZnNldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRPZmZzZXQgLSBFeGNsdXNpdmUgUHJpc20gYnl0ZSBvZmZzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTb3VyY2UgdGV4dCBpbiB0aGUgYnl0ZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpIHtcbiAgcmV0dXJuIHNvdXJjZS5zbGljZShcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBzdGFydE9mZnNldCksXG4gICAgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgZW5kT2Zmc2V0KVxuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgUHJpc20gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFtleHBlY3RlZFR5cGVdIC0gRXhwbGljaXQgY29udGV4dHVhbCB2YWx1ZSB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlc2VydmVPcHRpb25hbF0gLSBXaGV0aGVyIGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgcmVtYWlucyB3cmFwcGVkLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IFNlbWFudGljIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOaWxOb2RlKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxOb25lXCIpLCBsb2NhdGlvbn0sIHthYnNlbmNlOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUpXG4gICAgfSwge3NvbWU6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTmlsTm9kZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5pbCBvdXRzaWRlIGFuIGV4cGxpY2l0IG9wdGlvbmFsIGNvbnRleHRcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLmJsb2NrKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImNhbGwgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiBzbGljZVByaXNtU291cmNlKFxuICAgIHNvdXJjZSxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCArIG5vZGUuY2FsbE9wZXJhdG9yTG9jLmxlbmd0aFxuICApID09IFwiJi5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgUGFyZW50aGVzZXNOb2RlICYmIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA9PSAxKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYm9keS5ib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUsIHByZXNlcnZlT3B0aW9uYWwpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGUubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG5cbiAgICBpZiAoIXByZXNlcnZlT3B0aW9uYWwgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kOiBpZGVudGlmaWVyfSwge3Vud3JhcDogbG9jYXRpb259KVxuICAgIH1cblxuICAgIHJldHVybiBpZGVudGlmaWVyXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFNlbGZOb2RlKSB7XG4gICAgaWYgKCFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInNlbGYgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Y2xhc3NJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9ufSwge3JlY2VpdmVyOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVSZWFkTm9kZSkge1xuICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3M/LmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGBAJHtjYW5kaWRhdGUubmFtZX1gID09IG5vZGUubmFtZSlcblxuICAgIGlmICghZmllbGQgfHwgIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBvdXRzaWRlIGl0cyBkZWNsYXJpbmcgY2xhc3NcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgcmVjZWl2ZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksXG4gICAgICBsb2NhdGlvbiwgcmVjZWl2ZXJ9LCB7bWVtYmVyOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEludGVnZXJOb2RlKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihub2RlLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVHJ1ZU5vZGUgfHwgbm9kZSBpbnN0YW5jZW9mIEZhbHNlTm9kZSkge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlIGluc3RhbmNlb2YgVHJ1ZU5vZGV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTdHJpbmdOb2RlKSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IG5vZGUudW5lc2NhcGVkXG5cbiAgICBpZiAoIWRlY29kZWQudmFsaWRFbmNvZGluZyB8fCBkZWNvZGVkLmVuY29kaW5nICE9IFwidXRmLThcIiB8fCBub2RlLmlzRm9yY2VkQmluYXJ5RW5jb2RpbmcoKSB8fFxuICAgICAgIWhhc09ubHlVbmljb2RlU2NhbGFycyhkZWNvZGVkLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBkZWNvZGVkLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGVkU3RyaW5nTm9kZSkge1xuICAgIGlmIChub2RlLm9wZW5pbmdMb2MgJiYgc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIG5vZGUub3BlbmluZ0xvYy5zdGFydE9mZnNldCwgbm9kZS5vcGVuaW5nTG9jLnN0YXJ0T2Zmc2V0ICsgbm9kZS5vcGVuaW5nTG9jLmxlbmd0aCkuc3RhcnRzV2l0aChcIjw8XCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaGVyZWRvYyBzdHJpbmdcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBub2RlLnBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBTdHJpbmdOb2RlKSByZXR1cm4gY29udmVydEV4cHJlc3Npb24ocGFydCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2NhbGFyVHlwZShcInN0cmluZ1wiKSlcbiAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgRW1iZWRkZWRTdGF0ZW1lbnRzTm9kZSkge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRzID0gcGFydC5zdGF0ZW1lbnRzXG5cbiAgICAgICAgaWYgKCFzdGF0ZW1lbnRzIHx8IHN0YXRlbWVudHMuYm9keS5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImludGVycG9sYXRlZCBzdGF0ZW1lbnRcIiwgbm9kZUxvY2F0aW9uKHBhcnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihzdGF0ZW1lbnRzLmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNjYWxhclR5cGUoXCJzdHJpbmdcIikpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgcGFydC5jb25zdHJ1Y3Rvci5uYW1lLCBub2RlTG9jYXRpb24ocGFydCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSlcblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMCkgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogXCJcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG5cbiAgICBsZXQgbG93ZXJlZCA9IHBhcnRzWzBdXG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24oe1xuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCaW5hcnlFeHByZXNzaW9uXCIpLFxuICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmlnaHQ6IHBhcnRcbiAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgbG93ZXJlZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhsb3dlcmVkLCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZk5vZGUgJiYgIW5vZGUuaWZLZXl3b3JkTG9jKSB7XG4gICAgY29uc3QgZWxzZUNsYXVzZSA9IG5vZGUuc3Vic2VxdWVudFxuICAgIGNvbnN0IGNvbnNlcXVlbnRTdGF0ZW1lbnRzID0gbm9kZS5zdGF0ZW1lbnRzXG4gICAgY29uc3QgY29uc2VxdWVudEFybSA9IGNvbnNlcXVlbnRTdGF0ZW1lbnRzICYmIGNvbnNlcXVlbnRTdGF0ZW1lbnRzLmJvZHkubGVuZ3RoID09IDEgPyBjb25zZXF1ZW50U3RhdGVtZW50cy5ib2R5WzBdIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIShlbHNlQ2xhdXNlIGluc3RhbmNlb2YgRWxzZU5vZGUpIHx8ICFlbHNlQ2xhdXNlLnN0YXRlbWVudHMgfHwgZWxzZUNsYXVzZS5zdGF0ZW1lbnRzLmJvZHkubGVuZ3RoICE9IDEgfHwgIWNvbnNlcXVlbnRBcm0gfHwgIW5vZGUudGhlbktleXdvcmRMb2MpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJ0ZXJuYXJ5IHdpdGhvdXQgYWx0ZXJuYXRlXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFsdGVybmF0ZTogY29udmVydEV4cHJlc3Npb24oZWxzZUNsYXVzZS5zdGF0ZW1lbnRzLmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25zZXF1ZW50OiBjb252ZXJ0RXhwcmVzc2lvbihjb25zZXF1ZW50QXJtLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgYWx0ZXJuYXRlOiBub2RlTG9jYXRpb24oZWxzZUNsYXVzZS5zdGF0ZW1lbnRzLmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29sb246IHByaXNtTG9jYXRpb24oZWxzZUNsYXVzZS5lbHNlS2V5d29yZExvYyA/PyBlbHNlQ2xhdXNlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbnNlcXVlbnQ6IG5vZGVMb2NhdGlvbihjb25zZXF1ZW50QXJtLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUudGhlbktleXdvcmRMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBPck5vZGUgJiYgbm9kZS5sZWZ0IGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmXG4gICAgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5sZWZ0Lm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3B0aW9uYWwgZGVmYXVsdCB3aXRoIHx8XCIsIHByaXNtTG9jYXRpb24obm9kZS5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAoZXhhY3ROaWxUZXN0KG5vZGUsIHNvdXJjZSkpIHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtDYWxsTm9kZX0gKi8gKG5vZGUpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSAvKiogQHR5cGUge0xvY2FsVmFyaWFibGVSZWFkTm9kZX0gKi8gKGNhbGwucmVjZWl2ZXIpXG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgKVxuICAgIGNvbnN0IHByZXNlbnQgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbElzUHJlc2VudFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICBvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihjYWxsLm1lc3NhZ2VMb2MgPz8gY2FsbC5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBwcmVzZW50XG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKGNhbGwubWVzc2FnZUxvYyA/PyBjYWxsLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pLCBcIk5vdFwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgaWYgKCFub2RlLm9wZW5pbmdMb2MgfHwgIW5vZGUuY2xvc2luZ0xvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInNwZWNpYWwgYXJyYXkgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICBpZiAobm9kZS5pc0NvbnRhaW5zU3BsYXQoKSkge1xuICAgICAgY29uc3Qgc3BsYXQgPSBub2RlLmVsZW1lbnRzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuY29uc3RydWN0b3IubmFtZSA9PSBcIlNwbGF0Tm9kZVwiKVxuXG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYXJyYXkgc3BsYXRcIiwgc3BsYXQgPyBub2RlTG9jYXRpb24oc3BsYXQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbGVtZW50czogbm9kZS5lbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgY2xvc2U6IHByaXNtTG9jYXRpb24obm9kZS5jbG9zaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZW46IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEhhc2hOb2RlKSB7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVudHJpZXMgPSBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEFzc29jTm9kZSkgfHwgIWVsZW1lbnQub3BlcmF0b3JMb2MgfHxcbiAgICAgICAgc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGVsZW1lbnQub3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQsIGVsZW1lbnQub3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQgKyBlbGVtZW50Lm9wZXJhdG9yTG9jLmxlbmd0aCkgIT0gXCI9PlwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJoYXNoIGVudHJ5XCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmICghKGVsZW1lbnQua2V5IGluc3RhbmNlb2YgU3RyaW5nTm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LmtleSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBjb252ZXJ0RXhwcmVzc2lvbihlbGVtZW50LmtleSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBrZXk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKGtleSksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcEVudHJ5XCIpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oZWxlbWVudC52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdmFsdWVUeXBlKVxuICAgICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKGVsZW1lbnQub3BlcmF0b3JMb2MsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZW50cmllcyxcbiAgICAgIGtpbmQ6IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgICAgPyAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKVxuICAgICAgICA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExpdGVyYWxcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGNsb3NlOiBwcmlzbUxvY2F0aW9uKG5vZGUuY2xvc2luZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBvcGVuOiBwcmlzbUxvY2F0aW9uKG5vZGUub3BlbmluZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAobm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgfHwgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpICYmIG5vZGUubmFtZSA9PSBcIm5ld1wiICYmXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICBjb25zdCByZWNvcmROYW1lID0gY29uc3RhbnRQYXRoTmFtZShub2RlLnJlY2VpdmVyKVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmROYW1lcy5nZXQocmVjb3JkTmFtZSlcblxuICAgIGlmICghZGVjbGFyYXRpb24pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJjb25zdHJ1Y3Rpb24gb2YgYSBub24tcmVjb3JkIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKX0sXG4gICAgICB7Y2xhc3M6IG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3duZWQgcmVzb3VyY2UgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIiAmJiBleHBlY3RlZFR5cGUuZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbi5pZFxuICAgICAgPyBleHBlY3RlZFR5cGUuYXJndW1lbnRzXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCB0eXBlQXJndW1lbnRzLCBpbmRleCkpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZENvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjb3JkOiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCIhXCIpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChub2RlLmNhbGxPcGVyYXRvckxvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInF1YWxpZmllZCBib29sZWFuIG5vdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIGlmIChub2RlLm1lc3NhZ2VMb2M/Lmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJlY2VkZW5jZS1zZW5zaXRpdmUgYm9vbGVhbiBub3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJvb2xlYW4gbm90IGFyZ3VtZW50IGxpc3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcblxuICAgIGNvbnN0IG9wZXJhbmQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgaWYgKG9wZXJhbmQua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIG9wZXJhbmQub3BlcmFuZC5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIikge1xuICAgICAgcmV0dXJuIG9wZXJhbmQub3BlcmFuZFxuICAgIH1cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgb3BlcmFuZFxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBcIk5vdFwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCItQFwiKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAobm9kZS5jYWxsT3BlcmF0b3JMb2MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJxdWFsaWZpZWQgaW50ZWdlciBuZWdhdGlvblwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIGlmIChub2RlLmFyZ3VtZW50c18pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJpbnRlZ2VyIG5lZ2F0aW9uIGFyZ3VtZW50IGxpc3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQW5kTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgT3JOb2RlKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBzb3VyY2VPcGVyYXRvciA9IHNvdXJjZS5zbGljZShvcGVyYXRvckxvY2F0aW9uLnN0YXJ0Lm9mZnNldCwgb3BlcmF0b3JMb2NhdGlvbi5lbmQub2Zmc2V0KVxuXG4gICAgaWYgKHNvdXJjZU9wZXJhdG9yICE9IFwiJiZcIiAmJiBzb3VyY2VPcGVyYXRvciAhPSBcInx8XCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHByZWNlZGVuY2Utc2Vuc2l0aXZlIGJvb2xlYW4gJHtzb3VyY2VPcGVyYXRvcn1gLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG9wZXJhdG9yTG9jYXRpb259KSwgbm9kZSBpbnN0YW5jZW9mIEFuZE5vZGUgPyBcIkFuZFwiIDogXCJPclwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBydWJ5QmluYXJ5T3BlcmF0aW9ucy5oYXMobm9kZS5uYW1lKSAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgIFwicnVieVwiLFxuICAgICAgYHF1YWxpZmllZCBiaW5hcnkgb3BlcmF0b3IgJHtub2RlLm5hbWV9YCxcbiAgICAgIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIHJ1YnlCaW5hcnlPcGVyYXRpb25zLmhhcyhub2RlLm5hbWUpICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAocnVieUJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUubmFtZSkpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJbXVwiICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJlxuICAgICFub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RJbmRleEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jID8/IG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcImZldGNoXCIgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImZhaWwtb24tYWJzZW5jZVwiKVxuICAgIH0sIHtvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICBjb25zdCBjYWxsZWUgPSBgJHtub2RlLnJlY2VpdmVyLm5hbWV9LiR7bm9kZS5uYW1lfWBcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQoY2FsbGVlKVxuXG4gICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBhcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgICAgICBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZShzaWduYXR1cmUsIGluZGV4KSkpLFxuICAgICAgICBjYWxsZWUsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge2NhbGxlZTogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwic2l6ZVwiICYmICFub2RlLmFyZ3VtZW50c18gJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dClcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmIG5vZGUubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJlxuICAgICFub2RlLmFyZ3VtZW50c18gJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2sgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5yZWNlaXZlci5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogcmVjZWl2ZXJMb2NhdGlvbiwgbmFtZTogbm9kZS5yZWNlaXZlci5uYW1lfSwge1xuICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICB9KVxuICAgIH0sIHttZW1iZXI6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2sgJiZcbiAgICBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlZmVyZW5jZVR5cGV9ICovIChrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dCkpXG4gICAgY29uc3QgbWV0aG9kID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlLm5hbWUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBtZXRob2Q/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IG1ldGhvZD8uaWQgPz8gbm9kZS5uYW1lLFxuICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KX0sXG4gICAge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5hcmd1bWVudHNfICYmICFub2RlLmJsb2NrKSB7XG4gICAgaWYgKFtcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIl9fc2VuZF9fXCIsIFwiaW5zdGFuY2VfdmFyaWFibGVfZ2V0XCIsIFwibWV0aG9kXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJkeW5hbWljIG9yIHJlZmxlY3RpdmUgbWVtYmVyIGFjY2Vzc1wiLCBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZmllbGQ6IG5vZGUubmFtZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHttZW1iZXI6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIpIHtcbiAgICBpZiAoW1wic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR5bmFtaWMgY2FsbFwiLCBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmU/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlLFxuICAgICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKSksXG4gICAgICBjYWxsZWU6IG5vZGUubmFtZSxcbiAgICAgIGtpbmQ6IFwiQ2FsbEV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2NhbGxlZTogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlcikge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkTG9jYXRpb24gPSAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgbm9kZS5tZXNzYWdlTG9jICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMVxuICAgICAgPyBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIG5vZGUuY29uc3RydWN0b3IubmFtZSwgdW5zdXBwb3J0ZWRMb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IHJlc3VsdCB0eXBlcyBlc3RhYmxpc2hlZCBieSBleHBsaWNpdCBzaWduYXR1cmVzIGFuZCBiaW5kaW5ncy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHJlc3VsdCB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmJvZHkuYm9keVswXSwgY29udGV4dClcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlcikge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0KSkpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChgJHtub2RlLnJlY2VpdmVyLm5hbWV9LiR7bm9kZS5uYW1lfWApXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0KSkpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIltdXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcImZldGNoXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlIHx8IG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFBhdGhOb2RlKSAmJiBub2RlLm5hbWUgPT0gXCJuZXdcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmROYW1lcy5nZXQoY29uc3RhbnRQYXRoTmFtZShub2RlLnJlY2VpdmVyKSlcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICA/IHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gICAgICA6IHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWNvcmRUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZWxmTm9kZSAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogY29udGV4dC5jdXJyZW50Q2xhc3MuaWQsIGtpbmQ6IFwiUmVmZXJlbmNlVHlwZVwifVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVSZWFkTm9kZSAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGBAJHtmaWVsZC5uYW1lfWAgPT0gbm9kZS5uYW1lKT8udHlwZVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYykge1xuICAgIGNvbnN0IHJlY2VpdmVyID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyLmRlY2xhcmF0aW9uSWQpPy5tZXRob2RzLmZpbmQoKG1ldGhvZCkgPT4gbWV0aG9kLm5hbWUgPT0gbm9kZS5uYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKHJlY2VpdmVyPy5raW5kICE9IFwiUmVjb3JkVHlwZVwiKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZS5uYW1lKSA/PyAtMVxuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlci5hcmd1bWVudHMsIGluZGV4KSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSB2YWx1ZSB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBmcm9udGVuZCdzIGltcGxpY2l0IG9wdGlvbmFsLWJpbmRpbmcgdW53cmFwLlxuICogU2VtYW50aWMgdmFsaWRhdGlvbiBzZXBhcmF0ZWx5IHByb3ZlcyB0aGF0IHRoZSB1bndyYXAgb2NjdXJzIG9ubHkgb24gYSBwcmVzZW50IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXItb3duZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUuYm9keS5ib2R5WzBdLCBjb250ZXh0KVxuICB9XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpXG5cbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBvbmx5IHRoZSBwYXJzZXItYmFja2VkIGBpZGVudGlmaWVyLm5pbD9gIHNwZWxsaW5nIHVzZWQgYnkgVGFzayAwMDcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgUHJpc20gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIGlzIG9uZSBleGFjdCBuaWwgdGVzdC5cbiAqL1xuZnVuY3Rpb24gZXhhY3ROaWxUZXN0KG5vZGUsIHNvdXJjZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8ICEobm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHxcbiAgICBub2RlLm5hbWUgIT0gXCJuaWw/XCIgfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IG5vZGUuYXJndW1lbnRzXyB8fCBub2RlLmJsb2NrKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gc2xpY2VQcmlzbVNvdXJjZShcbiAgICBzb3VyY2UsXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQsXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQgKyBub2RlLmNhbGxPcGVyYXRvckxvYy5sZW5ndGhcbiAgKSA9PSBcIi5cIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBSdWJ5IHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIFJldHVybk5vZGUpIHx8IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID8/IDApID4gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSA/IHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiID8gdW5kZWZpbmVkIDogY29udGV4dC5yZXR1cm5UeXBlXG4gICAgKX0gOiB7fSksXG4gICAga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgUHJpc20tb3duZWQgUkJTLXN0eWxlIHR5cGUgY29tbWVudHMgZGlyZWN0bHkgcHJlY2VkaW5nIGEgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7e2xvY2F0aW9uOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Mb2NhdGlvbn19IG5vZGUgLSBDb21tZW50IG93bmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7e3BhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30+LCByZXR1cm5UeXBlOiB7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9IHwgdW5kZWZpbmVkLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX19IERlY2xhcmVkIHR5cGVzLlxuICovXG5mdW5jdGlvbiB0eXBlQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgcHJlY2VkaW5nID0gYXNzb2NpYXRlZENvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7e2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJldHVyblR5cGVcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119ICovXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gW11cblxuICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgcHJlY2VkaW5nKSB7XG4gICAgY29uc3Qgd29yZHMgPSBjb21tZW50VG9rZW5zKGNvbW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAcGFyYW1cIiAmJiB3b3Jkcy5sZW5ndGggPj0gMykge1xuICAgICAgaWYgKHBhcmFtZXRlclR5cGVzLmhhcyh3b3Jkc1sxXS50ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHVwbGljYXRlIHBhcmFtZXRlciBhbm5vdGF0aW9uXCIsIHdvcmRzWzFdLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcGFyYW1ldGVyVHlwZXMuc2V0KHdvcmRzWzFdLnRleHQsIGpvaW5lZENvbW1lbnRUb2tlbih3b3JkcywgMiwgc291cmNlKSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0ID09IFwiQHJldHVyblwiICYmIHdvcmRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR1cGxpY2F0ZSByZXR1cm4gYW5ub3RhdGlvblwiLCB3b3Jkc1sxXS5sb2NhdGlvbilcbiAgICAgIHJldHVyblR5cGUgPSBqb2luZWRDb21tZW50VG9rZW4od29yZHMsIDEsIHNvdXJjZSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0ID09IFwiQHRlbXBsYXRlXCIgJiYgd29yZHMubGVuZ3RoID09IDIgJiYgb3duZXJJZCAmJlxuICAgICAgL15bQS1aYS16X11bQS1aYS16MC05X10qJC91LnRlc3Qod29yZHNbMV0udGV4dCkpIHtcbiAgICAgIHR5cGVQYXJhbWV0ZXJzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7dHlwZVBhcmFtZXRlcnMubGVuZ3RofWAsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICAgIGxvY2F0aW9uOiB3b3Jkc1sxXS5sb2NhdGlvbixcbiAgICAgICAgbmFtZTogd29yZHNbMV0udGV4dFxuICAgICAgfSwge25hbWU6IHdvcmRzWzFdLmxvY2F0aW9ufSkpXG4gICAgfSBlbHNlIGlmICh3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkB0ZW1wbGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIHdvcmRzWzFdPy5sb2NhdGlvbiA/PyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmICh3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkBwYXJhbVwiKSB8fCB3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkByZXR1cm5cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYWxmb3JtZWQgZnVuY3Rpb24gdHlwZSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge3BhcmFtZXRlcnM6IHBhcmFtZXRlclR5cGVzLCByZXR1cm5UeXBlLCAuLi4odHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVqb2lucyBhIGJvdW5kZWQgbWV0YWRhdGEgc3VmZml4IHdoaWxlIHJldGFpbmluZyBpdHMgcGFyc2VyLW93bmVkIHJhbmdlLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0ZXh0OiBzdHJpbmd9W119IHRva2VucyAtIENvbW1lbnQgdG9rZW5zLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gRmlyc3Qgc3VmZml4IHRva2VuLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9fSBKb2luZWQgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGpvaW5lZENvbW1lbnRUb2tlbih0b2tlbnMsIHN0YXJ0LCBzb3VyY2UpIHtcbiAgY29uc3QgZmlyc3QgPSB0b2tlbnNbc3RhcnRdXG4gIGNvbnN0IGxhc3QgPSB0b2tlbnMuYXQoLTEpXG5cbiAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgdGhyb3cgbmV3IEVycm9yKFwiUnVieSBtZXRhZGF0YSBzdWZmaXggdW5leHBlY3RlZGx5IGRpc2FwcGVhcmVkLlwiKVxuICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlyc3QubG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSwgZmlyc3QubG9jYXRpb24uc3RhcnQub2Zmc2V0LCBsYXN0LmxvY2F0aW9uLmVuZC5vZmZzZXQpXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgc291cmNlVHlwZTogc291cmNlLnNsaWNlKGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCwgbG9jYXRpb24uZW5kLm9mZnNldCl9XG59XG5cbi8qKlxuICogTGV4ZXMgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbWV0YWRhdGEgdG9rZW5zIGluc2lkZSBhIFByaXNtLW93bmVkIFJ1YnkgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnR9IGNvbW1lbnQgLSBQcmlzbSBjb21tZW50IHRva2VuLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0ZXh0OiBzdHJpbmd9W119IE1ldGFkYXRhIHRva2Vucy5cbiAqL1xuZnVuY3Rpb24gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHN0YXJ0ID0gdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgY29uc3QgZW5kID0gdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKVxuICBjb25zdCB0b2tlbnMgPSBbXVxuICBsZXQgb2Zmc2V0ID0gc3RhcnQgKyAxXG5cbiAgd2hpbGUgKG9mZnNldCA8IGVuZCkge1xuICAgIHdoaWxlIChvZmZzZXQgPCBlbmQgJiYgaXNSdWJ5TWV0YWRhdGFXaGl0ZXNwYWNlKHNvdXJjZVtvZmZzZXRdKSkgb2Zmc2V0KytcbiAgICBjb25zdCB0b2tlblN0YXJ0ID0gb2Zmc2V0XG5cbiAgICB3aGlsZSAob2Zmc2V0IDwgZW5kICYmICFpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2Uoc291cmNlW29mZnNldF0pKSBvZmZzZXQrK1xuICAgIGlmICh0b2tlblN0YXJ0IDwgb2Zmc2V0KSB7XG4gICAgICB0b2tlbnMucHVzaCh7bG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgdG9rZW5TdGFydCwgb2Zmc2V0KSwgdGV4dDogc291cmNlLnNsaWNlKHRva2VuU3RhcnQsIG9mZnNldCl9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIFJ1YnkgbWV0YWRhdGEgc2VwYXJhdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlciAtIFNvdXJjZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpdCBzZXBhcmF0ZXMgbWV0YWRhdGEgdG9rZW5zLlxuICovXG5mdW5jdGlvbiBpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2UoY2hhcmFjdGVyKSB7XG4gIHJldHVybiBjaGFyYWN0ZXIgPT0gXCIgXCIgfHwgY2hhcmFjdGVyID09IFwiXFx0XCIgfHwgY2hhcmFjdGVyID09IFwiXFxyXCIgfHwgY2hhcmFjdGVyID09IFwiXFxuXCJcbn1cblxuLyoqXG4gKiBTZWxlY3RzIG9ubHkgdGhlIGNvbnRpZ3VvdXMgY29tbWVudCBibG9jayBpbW1lZGlhdGVseSBiZWZvcmUgYSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIENvbW1lbnQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IEFzc29jaWF0ZWQgY29tbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGFzc29jaWF0ZWRDb21tZW50cyhjb21tZW50cywgbm9kZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZWNlZGluZyA9IGNvbW1lbnRzLmZpbHRlcigoY29tbWVudCkgPT4gY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCA8IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gcmlnaHQubG9jYXRpb24uc3RhcnRPZmZzZXQpXG4gIGNvbnN0IGFzc29jaWF0ZWQgPSBbXVxuICBsZXQgYm91bmRhcnkgPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG5cbiAgZm9yIChsZXQgaW5kZXggPSBwcmVjZWRpbmcubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBwcmVjZWRpbmdbaW5kZXhdXG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoXG4gICAgY29uc3QgZ2FwID0gc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGVuZE9mZnNldCwgYm91bmRhcnkpXG5cbiAgICBpZiAoIWlzSW1tZWRpYXRlQ29tbWVudEdhcChnYXApKSBicmVha1xuXG4gICAgYXNzb2NpYXRlZC51bnNoaWZ0KGNvbW1lbnQpXG4gICAgYm91bmRhcnkgPSBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gIH1cblxuICByZXR1cm4gYXNzb2NpYXRlZFxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBSdWJ5IGxvY2FsIHR5cGUgY2FycmllciBhbmQgaW1tdXRhYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7TG9jYWxWYXJpYWJsZVdyaXRlTm9kZX0gbm9kZSAtIExvY2FsIHdyaXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7e2ltbXV0YWJsZTogYm9vbGVhbiwgdHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IHwgdW5kZWZpbmVkfSBNZXRhZGF0YSB3aGVuIHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsTWV0YWRhdGEoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBjb25zdCBhc3NvY2lhdGVkID0gYXNzb2NpYXRlZENvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBzb3VyY2UpXG4gIGNvbnN0IG1ldGFkYXRhID0gYXNzb2NpYXRlZC5tYXAoKGNvbW1lbnQpID0+IGNvbW1lbnRUb2tlbnMoY29tbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGVNZXRhZGF0YSA9IG1ldGFkYXRhLmZpbHRlcigoW3Rva2VuXSkgPT4gdG9rZW4/LnRleHQgPT0gXCJAdHlwZVwiKVxuICBjb25zdCBpbW11dGFibGVNZXRhZGF0YSA9IG1ldGFkYXRhLmZpbHRlcigoW3Rva2VuXSkgPT4gdG9rZW4/LnRleHQgPT0gXCJAc2VtYW50aWZvbGQtaW1tdXRhYmxlXCIpXG4gIGNvbnN0IHByb2ZpbGVNZXRhZGF0YSA9IG1ldGFkYXRhLmZpbHRlcigoW3Rva2VuXSkgPT4ge1xuICAgIHJldHVybiB0b2tlbj8udGV4dC5zdGFydHNXaXRoKFwiQHR5cGVcIikgfHwgdG9rZW4/LnRleHQuc3RhcnRzV2l0aChcIkBzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcbiAgfSlcblxuICBpZiAocHJvZmlsZU1ldGFkYXRhLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAodHlwZU1ldGFkYXRhLmxlbmd0aCAhPSAxIHx8IHR5cGVNZXRhZGF0YVswXS5sZW5ndGggPCAyIHx8XG4gICAgaW1tdXRhYmxlTWV0YWRhdGEubGVuZ3RoID4gMSB8fCBpbW11dGFibGVNZXRhZGF0YS5zb21lKCh0b2tlbnMpID0+IHRva2Vucy5sZW5ndGggIT0gMSkgfHxcbiAgICBwcm9maWxlTWV0YWRhdGEubGVuZ3RoICE9IHR5cGVNZXRhZGF0YS5sZW5ndGggKyBpbW11dGFibGVNZXRhZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIGxvY2FsIHR5cGUgbWV0YWRhdGFcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBkZWNsYXJlZFR5cGUgPSBqb2luZWRDb21tZW50VG9rZW4odHlwZU1ldGFkYXRhWzBdLCAxLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtcbiAgICBpbW11dGFibGU6IGltbXV0YWJsZU1ldGFkYXRhLmxlbmd0aCA9PSAxLFxuICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmVkVHlwZS5zb3VyY2VUeXBlLCBgTG9jYWwgJyR7bm9kZS5uYW1lfSdgLCBsb2NhdGlvbiwgc291cmNlLCBkZWNsYXJlZFR5cGUubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBSdWJ5IGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQcmlzbSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIG5vZGUuY29uc3RydWN0b3IubmFtZSwgbG9jYXRpb24pXG5cbiAgY29uc3QgbWV0YWRhdGEgPSBsb2NhbE1ldGFkYXRhKGNvbW1lbnRzLCBub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gIGlmIChtZXRhZGF0YSkge1xuICAgIGxldCBkZWNsYXJlZFR5cGUgPSBtZXRhZGF0YS50eXBlXG5cbiAgICBpZiAobWV0YWRhdGEuaW1tdXRhYmxlICYmIGRlY2xhcmVkVHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKG5vZGUpICYmXG4gICAgICBub2RlLnZhbHVlIGluc3RhbmNlb2YgSGFzaE5vZGUpIHtcbiAgICAgIGRlY2xhcmVkVHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcChkZWNsYXJlZFR5cGUsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgaW5pdGlhbGl6ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmVkVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtdXRhYmxlOiAhbWV0YWRhdGEuaW1tdXRhYmxlLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgdHlwZTogZGVjbGFyZWRUeXBlXG4gICAgfSwge25hbWU6IHByaXNtTG9jYXRpb24obm9kZS5uYW1lTG9jLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQobm9kZS5uYW1lLCBkZWNsYXJlZFR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAoIWNvbnRleHQuYmluZGluZ3MuaGFzKG5vZGUubmFtZSkpIHtcbiAgICBpZiAobm9kZS52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLnZhbHVlLm5hbWUpPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm9yZGVyZWQgbWFwIGFsaWFzIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicnVieVwiLCBgTG9jYWwgJyR7bm9kZS5uYW1lfSdgLCBsb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IHRhcmdldExvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IG5vZGUubmFtZX0sIHtcbiAgICBuYW1lOiB0YXJnZXRMb2NhdGlvblxuICB9KVxuXG4gIGNvbnN0IGJpbmRpbmdUeXBlID0gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGV4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICBiaW5kaW5nVHlwZT8ua2luZCA9PSBcIkVycm9yVHlwZVwiID8gdW5kZWZpbmVkIDogYmluZGluZ1R5cGUpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb24sXG4gICAgdGFyZ2V0XG4gIH0sIHtvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgcmV0dXJuIHNlbWFudGljXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgUHJpc20gc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZXR1cm5Ob2RlKSB7XG4gICAgaWYgKChjb250ZXh0Lmxvb3BEZXB0aCA/PyAwKSA+IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25sb2NhbCByZXR1cm4gZnJvbSBlYWNoIGJsb2NrXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICByZXR1cm4gY29udmVydFJldHVybihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgSWZOb2RlICYmICFub2RlLmlmS2V5d29yZExvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInRlcm5hcnkgc3RhdGVtZW50XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZk5vZGUgfHwgbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUpIHJldHVybiBjb252ZXJ0SWYobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgV2hpbGVOb2RlKSByZXR1cm4gY29udmVydFdoaWxlKG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEJlZ2luTm9kZSkgcmV0dXJuIGNvbnZlcnRSdWJ5VHJ5KG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSkge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcz8uZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYEAke2NhbmRpZGF0ZS5uYW1lfWAgPT0gbm9kZS5uYW1lKVxuXG4gICAgaWYgKCFmaWVsZCB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGluc3RhbmNlIGZpZWxkIG91dHNpZGUgaXRzIGRlY2xhcmluZyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSwgbG9jYXRpb24sIHJlY2VpdmVyfSxcbiAgICB7bWVtYmVyOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBCcmVha05vZGUgfHwgbm9kZSBpbnN0YW5jZW9mIE5leHROb2RlKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgJHtub2RlIGluc3RhbmNlb2YgQnJlYWtOb2RlID8gXCJicmVha1wiIDogXCJuZXh0XCJ9IHZhbHVlYCwgbm9kZUxvY2F0aW9uKG5vZGUuYXJndW1lbnRzXywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgbG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUua2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7XCJCcmVha1N0YXRlbWVudFwiIHwgXCJDb250aW51ZVN0YXRlbWVudFwifSAqLyAobm9kZSBpbnN0YW5jZW9mIEJyZWFrTm9kZSA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgIGlmICghbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJyYWlzZVwiKSByZXR1cm4gY29udmVydFJ1YnlSYWlzZShub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGlmIChub2RlLmJsb2NrKSByZXR1cm4gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgaWYgKCFub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcInB1dHNcIiAmJiAhY29udGV4dC5mdW5jdGlvbnMuaGFzKFwicHV0c1wiKSkgcmV0dXJuIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4cHJlc3Npb246IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb259ICovIChjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSksXG4gICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIG5vZGUuY29uc3RydWN0b3IubmFtZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGByYWlzZSBEZWNsYXJlZEVycm9yLCBtZXNzYWdlYC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSByYWlzZSBjYWxsLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlSYWlzZShub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW11cbiAgY29uc3QgZXJyb3JOb2RlID0gYXJndW1lbnRzX1swXVxuXG4gIGlmIChub2RlLmJsb2NrIHx8IG5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDIgfHxcbiAgICAhKGVycm9yTm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpICYmICEoZXJyb3JOb2RlIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgfHxcbiAgICAhY29udGV4dC5lcnJvck5hbWVzLmhhcyhjb25zdGFudFBhdGhOYW1lKGVycm9yTm9kZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJhaXNlIG90aGVyIHRoYW4gZXhhY3QgZGVjbGFyZWQgZXJyb3IgYW5kIG1lc3NhZ2VcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gIGNvbnN0IHR5cGVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1lc3NhZ2U6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJhaXNlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkIHJlc2N1ZSB3aXRoIG5vIGVsc2UvZW5zdXJlLlxuICogQHBhcmFtIHtCZWdpbk5vZGV9IG5vZGUgLSBQcmlzbSBiZWdpbiBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFBhcnNlci1vd25lZCBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5VHJ5KG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGhhbmRsZXIgPSBub2RlLnJlc2N1ZUNsYXVzZVxuXG4gIGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBSZXNjdWVOb2RlKSB8fCBoYW5kbGVyLnN1YnNlcXVlbnQgfHwgbm9kZS5lbHNlQ2xhdXNlIHx8IG5vZGUuZW5zdXJlQ2xhdXNlIHx8XG4gICAgaGFuZGxlci5leGNlcHRpb25zLmxlbmd0aCAhPSAxIHx8XG4gICAgIShoYW5kbGVyLmV4Y2VwdGlvbnNbMF0gaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSAmJiAhKGhhbmRsZXIuZXhjZXB0aW9uc1swXSBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpIHx8XG4gICAgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoY29uc3RhbnRQYXRoTmFtZShoYW5kbGVyLmV4Y2VwdGlvbnNbMF0pKSB8fCAhKGhhbmRsZXIucmVmZXJlbmNlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJlZ2luIHdpdGhvdXQgb25lIGV4YWN0IHR5cGVkIHJlc2N1ZSBhbmQgYmluZGluZ1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBlcnJvck5vZGUgPSBoYW5kbGVyLmV4Y2VwdGlvbnNbMF1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gIGNvbnN0IGNhdWdodExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGVycm9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHtcbiAgICB0eXBlOiBjYXVnaHRMb2NhdGlvblxuICB9KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoaGFuZGxlci5yZWZlcmVuY2UubmFtZSwgY2F0Y2hUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaGFuZGxlci5yZWZlcmVuY2UsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGhhbmRsZXIucmVmZXJlbmNlLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGhhbmRsZXIucmVmZXJlbmNlLCBmaWxlbmFtZSwgc291cmNlKX0pLFxuICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGhhbmRsZXIuc3RhdGVtZW50cywgY29tbWVudHMsIGNhdGNoQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtjYXRjaDogbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCB0cnk6IGxvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCByZXNvbHZlZC1saXN0IGAuZWFjaCBkbyB8dmFsdWV8IC4uLiBlbmRgIHN5bnRheC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSBjYWxsIHdpdGggYSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmxvY2sgPSBub2RlLmJsb2NrXG5cbiAgaWYgKCEoYmxvY2sgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBibG9jayA/IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgaWYgKCFub2RlLnJlY2VpdmVyIHx8IG5vZGUubmFtZSAhPSBcImVhY2hcIiB8fCBub2RlLmFyZ3VtZW50c18gfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8ICFub2RlLm1lc3NhZ2VMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYXJiaXRyYXJ5IGNhbGwgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBibG9jay5vcGVuaW5nTG9jLmxlbmd0aCkgIT0gXCJkb1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbi1kbyBlYWNoIGJsb2NrXCIsIHByaXNtTG9jYXRpb24oYmxvY2sub3BlbmluZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhjbHVkZWQgPSBmaW5kUnVieURlc2NlbmRhbnQoYmxvY2suYm9keSwgKGNhbmRpZGF0ZSkgPT5cbiAgICBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZWRvTm9kZSB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZXRyeU5vZGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSlcblxuICBpZiAoZXhjbHVkZWQpIHtcbiAgICBjb25zdCBkZXRhaWwgPSBleGNsdWRlZCBpbnN0YW5jZW9mIFJldHVybk5vZGUgPyBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiA6XG4gICAgICBleGNsdWRlZCBpbnN0YW5jZW9mIFJlZG9Ob2RlID8gXCJyZWRvIGluIGVhY2ggYmxvY2tcIiA6IFwicmV0cnkgaW4gZWFjaCBibG9ja1wiXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGRldGFpbCwgbm9kZUxvY2F0aW9uKGV4Y2x1ZGVkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIShibG9jay5wYXJhbWV0ZXJzIGluc3RhbmNlb2YgQmxvY2tQYXJhbWV0ZXJzTm9kZSkgfHwgYmxvY2sucGFyYW1ldGVycy5sb2NhbHMubGVuZ3RoID4gMCB8fFxuICAgICFibG9jay5wYXJhbWV0ZXJzLnBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXJzXCIsIGJsb2NrLnBhcmFtZXRlcnNcbiAgICAgID8gbm9kZUxvY2F0aW9uKGJsb2NrLnBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICA6IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGJsb2NrLnBhcmFtZXRlcnMucGFyYW1ldGVyc1xuICBjb25zdCBzdXBwb3J0ZWRSZXF1aXJlZHMgPSBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMSB8fCBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMlxuICBjb25zdCB1bnN1cHBvcnRlZFBhcmFtZXRlciA9ICFzdXBwb3J0ZWRSZXF1aXJlZHNcbiAgICA/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzJdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzFdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdID8/IGJsb2NrLnBhcmFtZXRlcnNcbiAgICA6IHBhcmFtZXRlcnMucmVxdWlyZWRzLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkgJiZcbiAgICAgICAgcGFyYW1ldGVycy5vcHRpb25hbHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMucmVzdCAmJlxuICAgICAgICBwYXJhbWV0ZXJzLnBvc3RzLmxlbmd0aCA9PSAwICYmIHBhcmFtZXRlcnMua2V5d29yZHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMua2V5d29yZFJlc3QgJiYgIXBhcmFtZXRlcnMuYmxvY2tcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHBhcmFtZXRlcnMub3B0aW9uYWxzWzBdID8/IHBhcmFtZXRlcnMucmVzdCA/PyBwYXJhbWV0ZXJzLnBvc3RzWzBdID8/IHBhcmFtZXRlcnMua2V5d29yZHNbMF0gPz9cbiAgICAgICAgcGFyYW1ldGVycy5rZXl3b3JkUmVzdCA/PyBwYXJhbWV0ZXJzLmJsb2NrID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXIgYXJpdHkgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkUGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBpdGVyYXRpb25PcGVyYW5kVHlwZShrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpKVxuXG4gIGlmIChwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMikge1xuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVub3JkZXJlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicnVieVwiLCBcIk9yZGVyZWQgbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgW2tleVBhcmFtZXRlciwgdmFsdWVQYXJhbWV0ZXJdID0gLyoqIEB0eXBlIHtbUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLCBSZXF1aXJlZFBhcmFtZXRlck5vZGVdfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHMpXG4gICAgY29uc3Qga2V5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5UGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhbHVlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odmFsdWVQYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qga2V5VHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLmtleVR5cGUsIGtleUxvY2F0aW9uKVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZSwgdmFsdWVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiBrZXlMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGtleVBhcmFtZXRlci5uYW1lLCB0eXBlOiBrZXlUeXBlXG4gICAgfSwge25hbWU6IGtleUxvY2F0aW9ufSlcbiAgICBjb25zdCB2YWx1ZUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IHZhbHVlTG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiB2YWx1ZVBhcmFtZXRlci5uYW1lLCB0eXBlOiB2YWx1ZVR5cGVcbiAgICB9LCB7bmFtZTogdmFsdWVMb2NhdGlvbn0pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlQYXJhbWV0ZXIubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVQYXJhbWV0ZXIubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhibG9jay5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBibG9jay5ib2R5IDogbnVsbCwgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSxcbiAgICAgICAgc291cmNlLCBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHNbMF0pXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcInJ1YnlcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW5mZXJyZWRUeXBlID0gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICB9LCB7bmFtZTogYmluZGluZ0xvY2F0aW9ufSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQocGFyYW1ldGVyLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKFxuICAgICAgYmxvY2suYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gYmxvY2suYm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cyxcbiAgICAgIGJvZHlDb250ZXh0LFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHBhcnNlciBkZXNjZW5kYW50IG1hdGNoaW5nIG9uZSBleGNsdWRlZCBibG9jayBjb25zdHJ1Y3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCBudWxsfSBub2RlIC0gUGFyc2VyIHN1YnRyZWUuXG4gKiBAcGFyYW0geyhub2RlOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlKSA9PiBib29sZWFufSBwcmVkaWNhdGUgLSBFeGNsdXNpb24gcHJlZGljYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHNvdXJjZS1vcmRlcmVkIG1hdGNoLlxuICovXG5mdW5jdGlvbiBmaW5kUnVieURlc2NlbmRhbnQobm9kZSwgcHJlZGljYXRlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAocHJlZGljYXRlKG5vZGUpKSByZXR1cm4gbm9kZVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY29tcGFjdENoaWxkTm9kZXMoKSkge1xuICAgIGNvbnN0IG1hdGNoID0gZmluZFJ1YnlEZXNjZW5kYW50KGNoaWxkLCBwcmVkaWNhdGUpXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb3JkZXJlZCBQcmlzbSBzdGF0ZW1lbnQgbGlzdC5cbiAqIEBwYXJhbSB7U3RhdGVtZW50c05vZGUgfCBudWxsfSBub2RlIC0gUHJpc20gc3RhdGVtZW50cywgb3IgYW4gZW1wdHkgc291cmNlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBmYWxsYmFja0xvY2F0aW9uIC0gRW1wdHkgYmxvY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IFNlbWFudGljIGJsb2NrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QmxvY2sobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbGxiYWNrTG9jYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGUgPyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBmYWxsYmFja0xvY2F0aW9uLFxuICAgIHN0YXRlbWVudHM6IG5vZGUgPyBub2RlLmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpIDogW11cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IGEgY29tbWVudCBhbmQgaXRzIG93bmVyIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbW9zdCBvbmUgbmV3bGluZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXAgLSBTb3VyY2UgYmV0d2VlbiB0aGUgY29tbWVudCBhbmQgZm9sbG93aW5nIGl0ZW0uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2FwIGlzIGltbWVkaWF0ZSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBpc0ltbWVkaWF0ZUNvbW1lbnRHYXAoZ2FwKSB7XG4gIGxldCBuZXdsaW5lcyA9IDBcblxuICBmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBnYXApIHtcbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxuXCIpIHtcbiAgICAgIG5ld2xpbmVzKytcbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciAhPSBcIiBcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHRcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHJcIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld2xpbmVzIDw9IDFcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBzdXBwb3J0ZWQgUnVieSB2YWx1ZS10eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBSdWJ5IHR5cGUgY29tbWVudCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSBjb21tZW50IHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIHJldHVybiBkb2N1bWVudGVkVmFsdWVUeXBlKHtsYW5ndWFnZTogXCJydWJ5XCIsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBSdWJ5IGRlZmluaXRpb24gc2lnbmF0dXJlIGJlZm9yZSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgZnVuY3Rpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0J1aWx0aW5PdXRwdXRdIC0gV2hldGhlciBjb21waWxlciBhdXRob3JpdHkgYWRtaXRzIHRoZSBleGFjdCBvdXRwdXQgZmFjYWRlIGZ1bmN0aW9uLlxuICogQHJldHVybnMge1J1YnlGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgY29tbWVudHMsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkLCBhbGxvd0J1aWx0aW5PdXRwdXQgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gbm9kZS5wYXJhbWV0ZXJzXG5cbiAgaWYgKG5vZGUucmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJzaW5nbGV0b24gbWV0aG9kXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInB1dHNcIiAmJiAhYWxsb3dCdWlsdGluT3V0cHV0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uICdwdXRzJyBjYXB0dXJlcyBidWlsdC1pbiBwcmludGluZ1wiLCBuYW1lTG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJMaXN0ICYmIFtcbiAgICBwYXJhbWV0ZXJMaXN0Lm9wdGlvbmFsc1swXSwgcGFyYW1ldGVyTGlzdC5yZXN0LCBwYXJhbWV0ZXJMaXN0LnBvc3RzWzBdLCBwYXJhbWV0ZXJMaXN0LmtleXdvcmRzWzBdLFxuICAgIHBhcmFtZXRlckxpc3Qua2V5d29yZFJlc3QsIHBhcmFtZXRlckxpc3QuYmxvY2ssXG4gICAgcGFyYW1ldGVyTGlzdC5yZXF1aXJlZHMuZmluZCgocGFyYW1ldGVyKSA9PiAhKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpXG4gIF0uZmluZChCb29sZWFuKVxuXG4gIGlmICh1bnN1cHBvcnRlZFBhcmFtZXRlcikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwYXJhbWV0ZXJzXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBkZWNsYXJlZFR5cGVzID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJlZFR5cGVzLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgY29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVyTGlzdD8ucmVxdWlyZWRzID8/IFtdXG4gIGNvbnN0IGV4dHJhQW5ub3RhdGlvbiA9IFsuLi5kZWNsYXJlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXS5maW5kKChuYW1lKSA9PlxuICAgICFyZXF1aXJlZFBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyLm5hbWUgPT0gbmFtZSkpXG5cbiAgaWYgKGV4dHJhQW5ub3RhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgYW5ub3RhdGlvbiBmb3IgdW5rbm93biBwYXJhbWV0ZXIgJyR7ZXh0cmFBbm5vdGF0aW9ufSdgLCBsb2NhdGlvbilcbiAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGlmICghKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgcGFyYW1ldGVyLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gZGVjbGFyZWRUeXBlcy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlPy5zb3VyY2VUeXBlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkZWNsYXJlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH0sIHtuYW1lOiBwYXJhbWV0ZXJMb2NhdGlvbn0pXG4gIH0pXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZT8uc291cmNlVHlwZSA9PSBcIlt2b2lkXVwiXG4gICAgICA/IHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwicnVieVwiLCBcIlt2b2lkXVwiLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZS5sb2NhdGlvbilcbiAgICAgIDogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFJ1YnkgZGVmaW5pdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7UnVieUZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5LmJvZHkgOiBbXSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKFxuICAgIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cyxcbiAgICBjb250ZXh0LFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBzaWduYXR1cmUubG9jYXRpb25cbiAgKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgYmxvY2tzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gbm9kZXMgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHJvb3RzLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGVzKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBMb2NhbFZhcmlhYmxlV3JpdGVOb2RlLCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlKSByZXR1cm5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uOiBub2RlLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gICAgfSlcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwiZWFjaFwiICYmXG4gICAgICBub2RlLmJsb2NrIGluc3RhbmNlb2YgQmxvY2tOb2RlICYmIG5vZGUuYmxvY2sucGFyYW1ldGVycyBpbnN0YW5jZW9mIEJsb2NrUGFyYW1ldGVyc05vZGUgJiZcbiAgICAgIG5vZGUuYmxvY2sucGFyYW1ldGVycy5wYXJhbWV0ZXJzPy5yZXF1aXJlZHMubGVuZ3RoID09IDIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgIG5hbWU6IG5vZGUucmVjZWl2ZXIubmFtZSxcbiAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB2aXNpdChub2RlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBTdGFuZGFyZEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBzZW1hbnRpYyBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5RXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8ICEobm9kZS5zdXBlcmNsYXNzIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHxcbiAgICBub2RlLnN1cGVyY2xhc3MubmFtZSAhPSBcIlN0YW5kYXJkRXJyb3JcIiB8fCAhbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jIHx8IG5vZGUuYm9keSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IG5vZGVMb2NhdGlvbihub2RlLmNvbnN0YW50UGF0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogbm9kZUxvY2F0aW9uKG5vZGUuc3VwZXJjbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBSdWJ5IHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUnVieUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFNlbWFudGljIGNsYXNzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlZmVyZW5jZUNsYXNzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcywgZXJyb3JzLFxuICBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUuY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgbm9kZS5zdXBlcmNsYXNzIHx8IG5vZGUuaW5oZXJpdGFuY2VPcGVyYXRvckxvYyB8fFxuICAgICEobm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlZmVyZW5jZSBjbGFzcyBpbmhlcml0YW5jZSwgcXVhbGlmaWVkIG5hbWUsIG9yIGVtcHR5IGJvZHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IG5vZGUuYm9keS5ib2R5XG4gIGNvbnN0IGluaXRpYWxpemVycyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtEZWZOb2RlW119ICovIChtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlICYmIG1lbWJlci5uYW1lICE9IFwiaW5pdGlhbGl6ZVwiKSlcbiAgY29uc3QgcmVzZXJ2ZWRNZXRob2QgPSBtZXRob2ROb2Rlcy5maW5kKChtZXRob2QpID0+IHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkpXG5cbiAgaWYgKGluaXRpYWxpemVycy5sZW5ndGggIT0gMSB8fCBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gIShtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSkgfHwgcmVzZXJ2ZWRNZXRob2QpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIG9uZSBpbml0aWFsaXplciBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKGluaXRpYWxpemVyc1swXSlcbiAgY29uc3QgcGFyYW1ldGVycyA9IGluaXRpYWxpemVyLnBhcmFtZXRlcnM/LnJlcXVpcmVkcyA/PyBbXVxuICBjb25zdCBpbnZhbGlkUGFyYW1ldGVyID0gaW5pdGlhbGl6ZXIucGFyYW1ldGVycyAmJiBbaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5vcHRpb25hbHNbMF0sIGluaXRpYWxpemVyLnBhcmFtZXRlcnMucmVzdCxcbiAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLnBvc3RzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRSZXN0LFxuICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMuYmxvY2tdLmZpbmQoQm9vbGVhbilcbiAgY29uc3Qgc3RhdGVtZW50cyA9IGluaXRpYWxpemVyLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IGluaXRpYWxpemVyLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IGFubm90YXRpb25zID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYWNxdWlzaXRpb24gPSBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxICYmIHN0YXRlbWVudHNbMF0gaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlICYmXG4gICAgc3RhdGVtZW50c1swXS5uYW1lID09IFwiQHJlc291cmNlXCIgJiYgc3RhdGVtZW50c1swXS52YWx1ZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFzdGF0ZW1lbnRzWzBdLnZhbHVlLnJlY2VpdmVyICYmXG4gICAgIXN0YXRlbWVudHNbMF0udmFsdWUuYmxvY2sgJiYgc3RhdGVtZW50c1swXS52YWx1ZS5uYW1lID09IFwidjFfY29ubmVjdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAyICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDIgJiZcbiAgICBwYXJhbWV0ZXJzWzBdIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlICYmIHBhcmFtZXRlcnNbMF0ubmFtZSA9PSBcImhvc3RcIiAmJlxuICAgIHBhcmFtZXRlcnNbMV0gaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyc1sxXS5uYW1lID09IFwicG9ydFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS5uYW1lID09IFwiaG9zdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMV0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1sxXS5uYW1lID09IFwicG9ydFwiICYmIGRlY2xhcmF0aW9uLm5hbWUgPT0gXCJUQ1BTb2NrZXRcIiAmJlxuICAgIGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiXG5cbiAgaWYgKGluaXRpYWxpemVyLnJlY2VpdmVyIHx8IGludmFsaWRQYXJhbWV0ZXIgfHwgYW5ub3RhdGlvbnMucmV0dXJuVHlwZSB8fCBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGggfHxcbiAgICAhYWNxdWlzaXRpb24gJiYgc3RhdGVtZW50cy5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBpbml0aWFsaXplclwiLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGFjcXVpc2l0aW9uID8gW3dpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6MGAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlfSAqLyAoc3RhdGVtZW50c1swXSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IFwicmVzb3VyY2VcIixcbiAgICB0eXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfSAqLyAoc3RydWN0dXJlZENsb25lKGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlKSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0luc3RhbmNlVmFyaWFibGVXcml0ZU5vZGV9ICovIChzdGF0ZW1lbnRzWzBdKSwgZmlsZW5hbWUsIHNvdXJjZSl9KV0gOiBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFubm90YXRlZCA9IGFubm90YXRpb25zLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuXG4gICAgaWYgKCEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCAhKGFzc2lnbm1lbnQgaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlKSB8fFxuICAgICAgYXNzaWdubWVudC5uYW1lICE9IGBAJHtwYXJhbWV0ZXIubmFtZX1gIHx8ICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHxcbiAgICAgIGFzc2lnbm1lbnQudmFsdWUubmFtZSAhPSBwYXJhbWV0ZXIubmFtZSB8fCAhYW5ub3RhdGVkKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJpdmF0ZSBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIGluIHBhcmFtZXRlciBvcmRlclwiLFxuICAgICAgICBub2RlTG9jYXRpb24oYXNzaWdubWVudCA/PyBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShhbm5vdGF0ZWQuc291cmNlVHlwZSwgYFByaXZhdGUgZmllbGQgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKX0sIHtuYW1lOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBjb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhbm5vdGF0ZWQgPSBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBhY3F1aXNpdGlvblxuICAgICAgICA/IGNvbnZlcnRUeXBlKGFubm90YXRlZD8uc291cmNlVHlwZSwgYENvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgICBhbm5vdGF0ZWQ/LmxvY2F0aW9uLCBub21pbmFsTmFtZXMpXG4gICAgICAgIDogZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XS50eXBlfSwge25hbWU6IHBhcmFtZXRlckxvY2F0aW9ufSlcbiAgfSlcbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzOiBjb25zdHJ1Y3RvclBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IHByaXNtTG9jYXRpb24oaW5pdGlhbGl6ZXIubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICBjb25zdCBtZXRob2RTaWduYXR1cmVzID0gbWV0aG9kTm9kZXMubWFwKChtZXRob2QsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShtZXRob2QsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMsIGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gKSlcbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pKVxuICBjb25zdCBiYXNlID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHN9XG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnN0cnVjdG9yUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX0sXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IubG9jYXRpb24pXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2ROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW2luZGV4XVxuICAgIGNvbnN0IG1ldGhvZEJvZHkgPSBtZXRob2ROb2Rlc1tpbmRleF0uYm9keVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kQm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbWV0aG9kQm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0sIGZpbGVuYW1lLCBzb3VyY2UsIG1ldGhvZC5sb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkLXJlYWRlci9pbml0aWFsaXplci9mcmVlemUgUnVieSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7Q2xhc3NOb2RlfSBub2RlIC0gUHJpc20gY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUGFyc2VyLW93bmVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8IG5vZGUuc3VwZXJjbGFzcyB8fCBub2RlLmluaGVyaXRhbmNlT3BlcmF0b3JMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIHF1YWxpZmllZCBuYW1lXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG1lbWJlcnMgPSBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IG5vZGUuYm9keS5ib2R5IDogW11cbiAgY29uc3QgaW5pdGlhbGl6ZXJJbmRleCA9IG1lbWJlcnMuZmluZEluZGV4KChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG5cbiAgaWYgKGluaXRpYWxpemVySW5kZXggPCAwIHx8IGluaXRpYWxpemVySW5kZXggIT0gbWVtYmVycy5sZW5ndGggLSAxIHx8IG1lbWJlcnMuc2xpY2UoMCwgaW5pdGlhbGl6ZXJJbmRleCkuc29tZSgobWVtYmVyKSA9PlxuICAgICEobWVtYmVyIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG1lbWJlci5yZWNlaXZlciB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIgfHwgbWVtYmVyLmJsb2NrIHx8XG4gICAgbWVtYmVyLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZW1iZXIuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgdHlwZWQgcmVhZGVycyBhbmQgb25lIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzLmZpbmQoKG1lbWJlciwgaW5kZXgpID0+XG4gICAgICBpbmRleCA+PSBpbml0aWFsaXplckluZGV4ICsgMSB8fCAhKG1lbWJlciBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIpID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHJlYWRlck5vZGVzID0gLyoqIEB0eXBlIHtDYWxsTm9kZVtdfSAqLyAobWVtYmVycy5zbGljZSgwLCBpbml0aWFsaXplckluZGV4KSlcbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcmVhZGVyTm9kZXMubWFwKChyZWFkZXIpID0+IHtcbiAgICBjb25zdCBzeW1ib2wgPSAvKiogQHR5cGUge1N5bWJvbE5vZGV9ICovIChyZWFkZXIuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSlcbiAgICBjb25zdCBtZXRhZGF0YSA9IGFzc29jaWF0ZWRDb21tZW50cyhjb21tZW50cywgcmVhZGVyLCBzb3VyY2UpLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBtZXRhZGF0YS5maWx0ZXIoKFt0b2tlbl0pID0+IHRva2VuPy50ZXh0ID09IFwiQHR5cGVcIilcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHJlYWRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHwgbWV0YWRhdGEuc29tZSgoW3Rva2VuXSkgPT4gdG9rZW4/LnRleHQ/LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSAmJiB0b2tlbi50ZXh0ICE9IFwiQHR5cGVcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtaXNzaW5nIG9yIG1hbGZvcm1lZCByZWNvcmQgcmVhZGVyIHR5cGVcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gam9pbmVkQ29tbWVudFRva2VuKHR5cGVNZXRhZGF0YVswXSwgMSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IHN5bWJvbC51bmVzY2FwZWQudmFsdWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJlZFR5cGUuc291cmNlVHlwZSwgYFJlY29yZCBmaWVsZCAnJHtzeW1ib2wudW5lc2NhcGVkLnZhbHVlfSdgLCBmaWVsZExvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IHN5bWJvbC52YWx1ZUxvYyA/IHByaXNtTG9jYXRpb24oc3ltYm9sLnZhbHVlTG9jLCBmaWxlbmFtZSwgc291cmNlKSA6IGZpZWxkTG9jYXRpb259KVxuICB9KVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKG1lbWJlcnNbaW5pdGlhbGl6ZXJJbmRleF0pXG4gIGNvbnN0IHBhcmFtZXRlckxpc3QgPSBpbml0aWFsaXplci5wYXJhbWV0ZXJzXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJMaXN0Py5yZXF1aXJlZHMgPz8gW11cbiAgY29uc3QgaW52YWxpZFBhcmFtZXRlciA9IHBhcmFtZXRlckxpc3QgJiYgW3BhcmFtZXRlckxpc3Qub3B0aW9uYWxzWzBdLCBwYXJhbWV0ZXJMaXN0LnJlc3QsIHBhcmFtZXRlckxpc3QucG9zdHNbMF0sXG4gICAgcGFyYW1ldGVyTGlzdC5rZXl3b3Jkc1swXSwgcGFyYW1ldGVyTGlzdC5rZXl3b3JkUmVzdCwgcGFyYW1ldGVyTGlzdC5ibG9ja10uZmluZChCb29sZWFuKVxuICBjb25zdCBpbml0aWFsaXplclN0YXRlbWVudHMgPSBpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5LmJvZHkgOiBbXVxuXG4gIGlmIChpbml0aWFsaXplci5yZWNlaXZlciB8fCBpbnZhbGlkUGFyYW1ldGVyIHx8IHBhcmFtZXRlcnMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGggfHxcbiAgICBwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlciwgaW5kZXgpID0+ICEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCBwYXJhbWV0ZXIubmFtZSAhPSBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdLm5hbWUpIHx8XG4gICAgaW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYW5ub3RhdGlvbnMgPSB0eXBlQ29tbWVudHMoY29tbWVudHMsIGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChhbm5vdGF0aW9ucy5yZXR1cm5UeXBlIHx8IGFubm90YXRpb25zLnBhcmFtZXRlcnMuc2l6ZSAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImluY29tcGxldGUgcmVjb3JkIGluaXRpYWxpemVyIGFubm90YXRpb25zXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBwYXJhbWV0ZXIgPSAvKiogQHR5cGUge1JlcXVpcmVkUGFyYW1ldGVyTm9kZX0gKi8gKHBhcmFtZXRlcnNbaW5kZXhdKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBpbml0aWFsaXplclN0YXRlbWVudHNbaW5kZXhdXG4gICAgY29uc3QgYW5ub3RhdGVkID0gYW5ub3RhdGlvbnMucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAoIShhc3NpZ25tZW50IGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSkgfHwgYXNzaWdubWVudC5uYW1lICE9IGBAJHtmaWVsZC5uYW1lfWAgfHxcbiAgICAgICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHwgYXNzaWdubWVudC52YWx1ZS5uYW1lICE9IGZpZWxkLm5hbWUgfHwgIWFubm90YXRlZCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IGNvbnZlcnRUeXBlKGFubm90YXRlZC5zb3VyY2VUeXBlLCBgUmVjb3JkIGluaXRpYWxpemVyIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCxcbiAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGlmICghc2FtZVZhbHVlVHlwZShwYXJhbWV0ZXJUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCByZWFkZXIvaW5pdGlhbGl6ZXIgdHlwZSBtaXNtYXRjaFwiLCBhbm5vdGF0ZWQubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIGNvbnN0IGZyZWV6ZSA9IGluaXRpYWxpemVyU3RhdGVtZW50cy5hdCgtMSlcblxuICBpZiAoIWlzUnVieVJlY29yZEZyZWV6ZShmcmVlemUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBpbml0aWFsaXplciB3aXRob3V0IGZpbmFsIGZyZWV6ZVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBjYW5vbmljYWwgc291cmNlIGZyZWV6aW5nIG9yIHRoZSBnZW5lcmF0ZWQgcm9vdC1vd25lZCBLZXJuZWwgaW1wbGVtZW50YXRpb24gYmluZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZSB8IHVuZGVmaW5lZH0gbm9kZSAtIEZpbmFsIGluaXRpYWxpemVyIHN0YXRlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc1J1YnlSZWNvcmRGcmVlemUobm9kZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG5vZGUuYmxvY2spIHJldHVybiBmYWxzZVxuICBpZiAoIW5vZGUucmVjZWl2ZXIpIHJldHVybiBub2RlLm5hbWUgPT0gXCJmcmVlemVcIiAmJiAhbm9kZS5hcmd1bWVudHNfXG4gIGlmIChub2RlLm5hbWUgIT0gXCJiaW5kX2NhbGxcIiB8fCAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8XG4gICAgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFNlbGZOb2RlKSB8fCAhKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDYWxsTm9kZSkpIHJldHVybiBmYWxzZVxuICBjb25zdCBtZXRob2QgPSBub2RlLnJlY2VpdmVyXG5cbiAgaWYgKG1ldGhvZC5uYW1lICE9IFwiaW5zdGFuY2VfbWV0aG9kXCIgfHwgIW1ldGhvZC5jYWxsT3BlcmF0b3JMb2MgfHwgbWV0aG9kLmJsb2NrIHx8XG4gICAgbWV0aG9kLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZXRob2QuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkgfHxcbiAgICAhKG1ldGhvZC5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbWV0aG9kLnJlY2VpdmVyLnBhcmVudCA9PSBudWxsICYmIG1ldGhvZC5yZWNlaXZlci5kZWxpbWl0ZXJMb2MgIT0gbnVsbCAmJiBtZXRob2QucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiICYmXG4gICAgbWV0aG9kLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWUgPT0gXCJmcmVlemVcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBSdWJ5IGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7SWZOb2RlIHwgVW5sZXNzTm9kZX0gbm9kZSAtIFByaXNtIGNvbmRpdGlvbmFsIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSA/IG5vZGUua2V5d29yZExvYyA6IG5vZGUuaWZLZXl3b3JkTG9jXG5cbiAgaWYgKCFrZXl3b3JkTG9jYXRpb24gfHwga2V5d29yZExvY2F0aW9uLnN0YXJ0T2Zmc2V0ICE9IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibW9kaWZpZXIgY29uZGl0aW9uYWxcIiwga2V5d29yZExvY2F0aW9uXG4gICAgICA/IHByaXNtTG9jYXRpb24oa2V5d29yZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChub2RlLnByZWRpY2F0ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUucHJlZGljYXRlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3B0aW9uYWwgdHJ1dGhpbmVzcyBjb25kaXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiAhZXhhY3ROaWxUZXN0KG5vZGUucHJlZGljYXRlLCBzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVubGVzcyBjb25kaXRpb24gb3RoZXIgdGhhbiBhbiBleGFjdCBuaWw/IHByZXNlbmNlIGd1YXJkXCIsIG5vZGVMb2NhdGlvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBwcmVkaWNhdGUgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uZGl0aW9uID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgJiYgcHJlZGljYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJlxuICAgIHByZWRpY2F0ZS5vcGVyYW5kLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiXG4gICAgPyBwcmVkaWNhdGUub3BlcmFuZFxuICAgIDogcHJlZGljYXRlXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiBjb25kaXRpb24ua2luZCAhPSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidW5sZXNzIGNvbmRpdGlvbiBvdGhlciB0aGFuIGFuIGV4YWN0IG5pbD8gcHJlc2VuY2UgZ3VhcmRcIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgbGV0IGFsdGVybmF0ZVxuICBjb25zdCBzdWJzZXF1ZW50ID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgPyBub2RlLmVsc2VDbGF1c2UgOiBub2RlLnN1YnNlcXVlbnRcblxuICBpZiAoc3Vic2VxdWVudCkge1xuICAgIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgRWxzZU5vZGUpIHtcbiAgICAgIGFsdGVybmF0ZSA9IGNvbnZlcnRCbG9jayhzdWJzZXF1ZW50LnN0YXRlbWVudHMsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgICBub2RlTG9jYXRpb24oc3Vic2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgSWZOb2RlKSB7XG4gICAgICBhbHRlcm5hdGUgPSB7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHN1YnNlcXVlbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKHN1YnNlcXVlbnQsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKV1cbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBzdWJzZXF1ZW50LmNvbnN0cnVjdG9yLm5hbWUsIG5vZGVMb2NhdGlvbihzdWJzZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGFsdGVybmF0ZSA/IHthbHRlcm5hdGV9IDoge30pLFxuICAgIGNvbmRpdGlvbixcbiAgICBjb25zZXF1ZW50OiBjb252ZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLCBjb21tZW50cywgY29uc2VxdWVudENvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKSxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBvcmRpbmFyeSBibG9jay1mb3JtIFJ1YnkgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtXaGlsZU5vZGV9IG5vZGUgLSBQcmlzbSB3aGlsZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUua2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5pc0JlZ2luTW9kaWZpZXIoKSB8fCAhbm9kZS5jbG9zaW5nTG9jIHx8IG5vZGUua2V5d29yZExvYy5zdGFydE9mZnNldCAhPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZGlmaWVyIHdoaWxlXCIsIGtleXdvcmRMb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDoga2V5d29yZExvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgc3VwcG9ydGVkIFJ1YnkgcHV0cyBlbnRyeSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLm5hbWUgIT0gXCJwdXRzXCIgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogUGFyc2VzIFJ1YnkgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBjbGFzc2VzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVieSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlUHJpc20oc291cmNlLCB7ZmlsZXBhdGg6IGZpbGVuYW1lfSlcblxuICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JzWzBdXG4gICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGVycm9yLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCArIGVycm9yLmxvY2F0aW9uLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiUEFSU0VfRVJST1JcIiwgbGFuZ3VhZ2U6IFwicnVieVwiLCBsb2NhdGlvbiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pXG4gIH1cblxuICBpZiAoIShyZXN1bHQudmFsdWUgaW5zdGFuY2VvZiBQcm9ncmFtTm9kZSkpIHRocm93IG5ldyBFcnJvcihcIlByaXNtIHJldHVybmVkIGEgbm9uLXByb2dyYW0gcm9vdC5cIilcblxuICBsZXQgYm9keSA9IHRhc2swMzRSdWJ5Qm9keShyZXN1bHQudmFsdWUuc3RhdGVtZW50cy5ib2R5LCByZXN1bHQuY29tbWVudHMsIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSkge1xuICAgIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSlcbiAgICBjb25zdCBtb2R1bGVOb2RlID0gLyoqIEB0eXBlIHtNb2R1bGVOb2RlfSAqLyAoYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgTW9kdWxlTm9kZSkpXG5cbiAgICBib2R5ID0gbW9kdWxlTm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVOb2RlLmJvZHkuYm9keSA6IFtdXG4gICAgY29uc3QgbW9kdWxlRnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKGlzTW9kdWxlRnVuY3Rpb25NYXJrZXIpXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIERlZk5vZGUpXG5cbiAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoID4gMCAmJiAobW9kdWxlRnVuY3Rpb25Ob2Rlcy5sZW5ndGggIT0gMSB8fCBib2R5LmluZGV4T2YobW9kdWxlRnVuY3Rpb25Ob2Rlc1swXSkgPiBib2R5LmluZGV4T2YoZGVmaW5pdGlvbnNbMF0pKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSBmdW5jdGlvbnMgb3V0c2lkZSBvbmUgbGVhZGluZyBtb2R1bGVfZnVuY3Rpb24gcHJvZmlsZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24obW9kdWxlRnVuY3Rpb25Ob2Rlc1sxXSA/PyBkZWZpbml0aW9uc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gIWlzTW9kdWxlRnVuY3Rpb25NYXJrZXIobm9kZSkgJiYgIXJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpKVxuICB9XG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIENsYXNzTm9kZSlcbiAgY29uc3QgZXJyb3JOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnN1cGVyY2xhc3MgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUuc3VwZXJjbGFzcy5uYW1lID09IFwiU3RhbmRhcmRFcnJvclwiKVxuICBjb25zdCByZWZlcmVuY2VDbGFzc05vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmXG4gICAgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID4gMCAmJiBub2RlLmJvZHkuYm9keS5ldmVyeSgobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgZG9jdW1lbnRlZCA9IHR5cGVDb21tZW50cyhyZXN1bHQuY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGlkKVxuXG4gICAgaWYgKGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplIHx8IGRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbiBvbiByZWNvcmQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgaWQsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmREZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICAuLi4oZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksIGZpZWxkczogW10sIGlkOiBgY2xhc3M6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLCBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlb3BlbmVkID0gY2xhc3NEZWNsYXJhdGlvbnMuZmluZCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PlxuICAgIGNsYXNzRGVjbGFyYXRpb25zLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBkZWNsYXJhdGlvbi5uYW1lKSAhPSBpbmRleClcblxuICBpZiAocmVvcGVuZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHJlZmVyZW5jZSBjbGFzcyByZW9wZW5pbmcgJyR7cmVvcGVuZWQubmFtZX0nYCwgcmVvcGVuZWQubG9jYXRpb24pXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGZvciAoY29uc3QgW25hbWUsIGRlY2xhcmF0aW9uXSBvZiBwcm9ncmFtPy5jbGFzc2VzID8/IFtdKSByZWNvcmROYW1lcy5zZXQobmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UnVieUVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChbXG4gICAgLi4uWy4uLnByb2dyYW0/LmNsYXNzZXM/LnZhbHVlcygpID8/IFtdXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge1tzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25dfSAqLyAoXG4gICAgICBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpLFxuICAgIC4uLmNsYXNzRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7W3N0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbl19ICovIChcbiAgICAgIFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgXSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSlcbiAgY29uc3QgYWxsb3dzQnVpbHRpbk91dHB1dCA9IGNhcGFiaWxpdGllcy5zb21lKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09IFwidjFfd3JpdGVfbGluZVwiKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCwgYWxsb3dzQnVpbHRpbk91dHB1dCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLmNhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMoY2FwYWJpbGl0aWVzLCBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSksXG4gICAgLi4uKHByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXSldLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydFJ1YnlSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIHJlc3VsdC5jb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRSdWJ5UmVmZXJlbmNlQ2xhc3Mobm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLFxuICAgICAgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZW50cnlOb2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlKSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0uaXNFbnRyeSAmJiBlbnRyeU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZW50cnlOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZmlyc3RFbnRyeSA9IGVudHJ5Tm9kZXNbMF1cbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGZpcnN0RW50cnkgPyBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBmaXJzdEVudHJ5LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoXG4gICAgICBzb3VyY2UsXG4gICAgICAoZW50cnlOb2Rlcy5hdCgtMSk/LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID8/IDApICsgKGVudHJ5Tm9kZXMuYXQoLTEpPy5sb2NhdGlvbi5sZW5ndGggPz8gMClcbiAgICApXG4gICkgOiBsb2NhdGlvblxuICBjb25zdCBlbnRyeUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yczogZXJyb3JzQnlJZCwgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclJ1YnkoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiByZWNvcmRzQnlJZH1cbiAgY29uc3QgZW50cnlCbG9jayA9IHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBlbnRyeU5vZGVzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgcmVzdWx0LmNvbW1lbnRzLCBlbnRyeUNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKCFwcm9ncmFtICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBSdWJ5IHByb2JlIHN1cHBvcnQgYmVmb3JlIHBvcnRhYmxlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gYm9keSAtIFBhcnNlZCB0b3AtbGV2ZWwgbm9kZXMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjoge3N0YXJ0T2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyfX1bXX0gY29tbWVudHMgLSBQYXJzZXIgY29tbWVudHMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBQb3J0YWJsZSBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNFJ1YnlCb2R5KGJvZHksIGNvbW1lbnRzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBib2R5XG4gIGNvbnN0IG1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+XG4gICAgc291cmNlLnNsaWNlKGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQsIGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBjb21tZW50LmxvY2F0aW9uLmxlbmd0aCkgPT1cbiAgICAgIFwiIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGJvZHlcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcInJ1YnlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJDbGFzc05vZGVcIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NOb2RlXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VcIl0sXG4gICAgW1wiR2xvYmFsVmFyaWFibGVXcml0ZU5vZGVcIiwgXCIkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCJdLCBbXCJEZWZOb2RlXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRGVmTm9kZVwiLCBcInByb2JlUmVhZFwiXSwgW1wiRGVmTm9kZVwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiBib2R5W2luZGV4XT8uY29uc3RydWN0b3IubmFtZSA9PSBraW5kICYmIFJlZmxlY3QuZ2V0KGJvZHlbaW5kZXhdLCBcIm5hbWVcIikgPT0gbmFtZSlcbiAgY29uc3QgZW5kID0gY29tbWVudHMuZmluZCgoY29tbWVudCkgPT5cbiAgICBzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKSA9PVxuICAgICAgXCIjIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcIilcblxuICBpZiAoIW1hdGNoZXMgfHwgIWVuZCB8fCBlbmQubG9jYXRpb24uc3RhcnRPZmZzZXQgPCBib2R5W2V4cGVjdGVkLmxlbmd0aCAtIDFdLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgYm9keVtleHBlY3RlZC5sZW5ndGggLSAxXS5sb2NhdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gYm9keS5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNhbm9uaWNhbCBwYXJzZXItb3duZWQgUnVieSBtb2R1bGUgYW5kIGxpdGVyYWwgcmVxdWlyZS1yZWxhdGl2ZSBlZGdlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmcsIG5hdGl2ZVJlZmVyZW5jZXM6IHtmb3JtOiBcImNvbnN0cnVjdG9yLWNhbGxcIiB8IFwicmVjZWl2ZXItY2FsbFwiIHwgXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTW9kdWxlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nfVtdfX0gUGFyc2VyLW93bmVkIFJ1YnkgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVByaXNtKHNvdXJjZSwge2ZpbGVwYXRoOiBmaWxlbmFtZX0pXG5cbiAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yc1swXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCwgZXJyb3IubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBlcnJvci5sb2NhdGlvbi5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb24sIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KVxuICB9XG4gIGlmICghKHJlc3VsdC52YWx1ZSBpbnN0YW5jZW9mIFByb2dyYW1Ob2RlKSkgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBub24tcHJvZ3JhbSByb290LlwiKVxuICBjb25zdCBib2R5ID0gcmVzdWx0LnZhbHVlLnN0YXRlbWVudHMuYm9keVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuICBjb25zdCBkeW5hbWljUmVxdWlyZSA9IGJvZHkuZmluZChpc0R5bmFtaWNTdGRsaWJSZXF1aXJlKVxuXG4gIGlmIChkeW5hbWljUmVxdWlyZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGR5bmFtaWNSZXF1aXJlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IFwiRHluYW1pYyByZXF1aXJlIGNhbm5vdCBwcm92ZSBhIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGlkZW50aXR5LlwiXG4gICAgfSlcbiAgfVxuICB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbnZhbGlkID0gYm9keS5maW5kKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKSAmJiAhaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgJiYgIWlzU3RkbGliUmVxdWlyZShub2RlKSlcblxuICBpZiAobW9kdWxlcy5sZW5ndGggIT0gMSB8fCAhKG1vZHVsZXNbMF0uY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgaW52YWxpZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvbmUgc2ltcGxlIG1vZHVsZSB3aXRoIGxpdGVyYWwgcmVxdWlyZV9yZWxhdGl2ZSBkZWNsYXJhdGlvbnNcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IG1vZHVsZXNbMV0gPz8gbW9kdWxlc1swXSA/PyByZXN1bHQudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGltcG9ydHMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgfHwgaXNTdGRsaWJSZXF1aXJlKG5vZGUpKS5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtDYWxsTm9kZX0gKi8gKG5vZGUpXG4gICAgY29uc3QgYXJndW1lbnQgPSAvKiogQHR5cGUge1N0cmluZ05vZGV9ICovIChjYWxsLmFyZ3VtZW50c18/LmFyZ3VtZW50c19bMF0pXG4gICAgY29uc3Qgc3RkbGliQ2FuZGlkYXRlID0gaXNTdGRsaWJSZXF1aXJlKGNhbGwpXG5cbiAgICBpZiAoIWFyZ3VtZW50LnVuZXNjYXBlZC52YWxpZEVuY29kaW5nIHx8IGFyZ3VtZW50LnVuZXNjYXBlZC5lbmNvZGluZyAhPSBcInV0Zi04XCIgfHwgYXJndW1lbnQuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLVVURi04IHJlcXVpcmVfcmVsYXRpdmUgcGF0aFwiLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW1wb3J0XCIpLFxuICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjYWxsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyOiBhcmd1bWVudC51bmVzY2FwZWQudmFsdWUsXG4gICAgICAuLi4oc3RkbGliQ2FuZGlkYXRlID8ge3N0ZGxpYkNhbmRpZGF0ZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpfSA6IHt9KSxcbiAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgfVxuICB9KVxuICBjb25zdCBtb2R1bGVCb2R5ID0gbW9kdWxlc1swXS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVzWzBdLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kdWxlQm9keSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIVtcInByaXZhdGVfY2xhc3NfbWV0aG9kXCIsIFwicHJpdmF0ZV9jb25zdGFudFwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSBjb250aW51ZVxuICAgIGNvbnN0IG1hcmtlciA9IHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpXG5cbiAgICBpZiAoIW1hcmtlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgbWFsZm9ybWVkICR7bm9kZS5uYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodmlzaWJpbGl0eS5oYXMobWFya2VyLm5hbWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGBkdXBsaWNhdGUgdmlzaWJpbGl0eSBtYXJrZXIgZm9yICcke21hcmtlci5uYW1lfSdgLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBtb2R1bGVCb2R5LmZpbmQoKGNhbmRpZGF0ZSkgPT4gbWFya2VyLmtpbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERlZk5vZGUgJiYgY2FuZGlkYXRlLm5hbWUgPT0gbWFya2VyLm5hbWVcbiAgICAgIDogY2FuZGlkYXRlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIGNhbmRpZGF0ZS5uYW1lID09IG1hcmtlci5uYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBtb2R1bGVCb2R5LmluZGV4T2YoZGVjbGFyYXRpb24pID4gbW9kdWxlQm9keS5pbmRleE9mKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGB2aXNpYmlsaXR5IG1hcmtlciB3aXRob3V0IGFuIGVhcmxpZXIgJHttYXJrZXIua2luZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHZpc2liaWxpdHkuc2V0KG1hcmtlci5uYW1lLCBtYXJrZXIua2luZClcbiAgfVxuICBjb25zdCBleHBvcnRzID0gbW9kdWxlQm9keS5mbGF0TWFwKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpIHtcbiAgICAgIGNvbnN0IGtpbmQgPSBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSA/IFwiZnVuY3Rpb25cIiA6IG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgbm9kZS5ib2R5LmJvZHkuZXZlcnkoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSkgPyBcImNsYXNzXCIgOiBcInJlY29yZFwiXG5cbiAgICAgIGlmICh2aXNpYmlsaXR5LmdldChub2RlLm5hbWUpID09IGtpbmQpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIGV4cG9ydGVkTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBsb2NhbE5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlID8gbm9kZS5jb25zdGFudFBhdGggOiBub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3ltYm9sS2luZDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0gKi8gKGtpbmQpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfV1cbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH0pXG4gIGNvbnN0IG5hdGl2ZVJlZmVyZW5jZXMgPSBydWJ5TmF0aXZlUmVmZXJlbmNlcyhtb2R1bGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0cywgbmF0aXZlTmFtZTogbW9kdWxlc1swXS5uYW1lLCBuYXRpdmVSZWZlcmVuY2VzfVxufVxuXG4vKipcbiAqIFJlamVjdHMgcGFyc2VyLXByb3ZlZCBhdHRlbXB0cyB0byB1c2Ugb3IgbXV0YXRlIHRoZSBib3VuZGVkIHNvY2tldCBmYWNhZGUgb3V0c2lkZSBpdHMgZXhhY3Qgc3VyZmFjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBib2R5IC0gUHJpc20gcHJvZ3JhbSBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IGJvZHkuc29tZSgobm9kZSkgPT4gaXNTdGRsaWJSZXF1aXJlKG5vZGUpICYmIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIpXG4gIGNvbnN0IHJlb3BlbmVkID0gYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIG5vZGUubmFtZSA9PSBcIlRDUFNvY2tldFwiKVxuXG4gIGlmIChhY3RpdmUgJiYgcmVvcGVuZWQpIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9SRU9QRU5FRFwiLFxuICAgIGxhbmd1YWdlOiBcInJ1YnlcIixcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlb3BlbmVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBtZXNzYWdlOiBcIkNhbGxlciBzb3VyY2UgcmVvcGVucyB0aGUgY29tcGlsZXItb3duZWQgVENQU29ja2V0IGZhY2FkZSBpZGVudGl0eS5cIlxuICB9KVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBub2RlIGZvciBib3VuZGVkIG5hdGl2ZSBhdHRlbXB0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIFByaXNtIG5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyXG4gICAgICBjb25zdCB0Y3BSZWNlaXZlciA9IHJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiByZWNlaXZlci5uYW1lID09IFwiVENQU29ja2V0XCJcblxuICAgICAgaWYgKHRjcFJlY2VpdmVyKSB7XG4gICAgICAgIGlmICghYWN0aXZlKSB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfSURFTlRJVFlfVU5QUk9WRURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0NvbnN0YW50UmVhZE5vZGV9ICovIChyZWNlaXZlciksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiVENQU29ja2V0IHJlcXVpcmVzIHRoZSBleGFjdCBwYXJzZXItcHJvdmVkIHJlcXVpcmUgXFxcInNvY2tldFxcXCIgaWRlbnRpdHkuXCJcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPSBcIm5ld1wiIHx8IG5vZGUuYmxvY2sgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfTUVNQkVSX1VOU1VQUE9SVEVEXCIsXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJUQ1BTb2NrZXQgc3VwcG9ydHMgb25seSBleGFjdCB0d28tYXJndW1lbnQgbmV3IHdpdGhvdXQgYSBibG9jay5cIlxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtlcm5lbFB1dHMgPSAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgfHxcbiAgICAgICAgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5yZWNlaXZlci5uYW1lID09IFwiS2VybmVsXCIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiXG5cbiAgICAgIGlmIChhY3RpdmUgJiYga2VybmVsUHV0cyAmJiAobm9kZS5ibG9jayB8fCBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9NRU1CRVJfVU5TVVBQT1JURURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBtZXNzYWdlOiBcIlRoZSBUYXNrIDAzNyBPdXRwdXQgZmFjYWRlIHN1cHBvcnRzIGV4YWN0bHkgb25lIHN0cmluZyBhcmd1bWVudCB3aXRob3V0IGEgYmxvY2suXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGV4YWN0IFRhc2sgMDM3IG5hdGl2ZSBpZGVudGl0aWVzIGZyb20gUHJpc20gbm9kZXMgaW4gc291cmNlIG9yZGVyLlxuICogQHBhcmFtIHtNb2R1bGVOb2RlfSBtb2R1bGUgLSBQYXJzZWQgYXBwbGljYXRpb24gbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7Zm9ybTogXCJjb25zdHJ1Y3Rvci1jYWxsXCIgfCBcInJlY2VpdmVyLWNhbGxcIiB8IFwidW5xdWFsaWZpZWQtY2FsbFwiLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU1vZHVsZTogc3RyaW5nLCBzeW1ib2w6IHN0cmluZ31bXX0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgcmVmZXJlbmNlcy5cbiAqL1xuZnVuY3Rpb24gcnVieU5hdGl2ZVJlZmVyZW5jZXMobW9kdWxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIC8qKiBAdHlwZSB7e2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiIHwgXCJyZWNlaXZlci1jYWxsXCIgfCBcInVucXVhbGlmaWVkLWNhbGxcIiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYXRpdmVNb2R1bGU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIHN5bWJvbDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCByZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgbm9kZSB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2UgdGV4dC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgICAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIpIHtcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7Zm9ybTogXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG5hdGl2ZU1vZHVsZTogXCJydWJ5Oktlcm5lbFwiLFxuICAgICAgICBvZmZzZXQ6IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQsIHN5bWJvbDogXCJwdXRzXCJ9KVxuICAgIH1cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLmJsb2NrICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwicmVjZWl2ZXItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwicnVieTpLZXJuZWxcIixcbiAgICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBzeW1ib2w6IFwicHV0c1wifSlcbiAgICB9XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5ibG9jayAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDIgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIlRDUFNvY2tldFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwic29ja2V0XCIsXG4gICAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldCwgc3ltYm9sOiBcIlRDUFNvY2tldFwifSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgdmlzaXQobW9kdWxlKVxuICByZXR1cm4gcmVmZXJlbmNlcy5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5vZmZzZXQgLSByaWdodC5vZmZzZXQpLm1hcCgoe29mZnNldDogX29mZnNldCwgLi4ucmVmZXJlbmNlfSkgPT4gcmVmZXJlbmNlKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBpcyBvbmUgY2Fub25pY2FsIGxpdGVyYWwgcmVsYXRpdmUgbG9hZCBlZGdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhIHN1cHBvcnRlZCByZXF1aXJlLXJlbGF0aXZlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWlyZVJlbGF0aXZlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlciAmJiAhbm9kZS5ibG9jayAmJiBub2RlLm5hbWUgPT0gXCJyZXF1aXJlX3JlbGF0aXZlXCIgJiZcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBTdHJpbmdOb2RlXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUnVieSBub2RlIGlzIG9uZSBwYXJzZXItcHJvdmVkIGxpdGVyYWwgZmFjYWRlIHJlcXVpcmUgY2FuZGlkYXRlLlxuICogT3RoZXIgbG9hZC1wYXRoIHJlcXVpcmVzIHJldGFpbiB0aGUgVGFzayAwMTAgdW5zdXBwb3J0ZWQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBsaXRlcmFsIFNlbWFudGlmb2xkIGZhY2FkZSByZXF1aXJlLlxuICovXG5mdW5jdGlvbiBpc1N0ZGxpYlJlcXVpcmUobm9kZSkge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyICYmICFub2RlLmJsb2NrICYmIG5vZGUubmFtZSA9PSBcInJlcXVpcmVcIiAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiZcbiAgICAobm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIgfHxcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLnVuZXNjYXBlZC52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQvXCIpKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgZmFjYWRlIHJlcXVpcmUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgY2FsbC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBwYXJzZXIgZXhwb3NlcyBhIG5vbmxpdGVyYWwgcmVxdWlyZS5cbiAqL1xuZnVuY3Rpb24gaXNEeW5hbWljU3RkbGliUmVxdWlyZShub2RlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLmJsb2NrIHx8IG5vZGUubmFtZSAhPSBcInJlcXVpcmVcIiB8fFxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3RyaW5nTm9kZSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBSdWJ5IG5vZGUgaXMgdGhlIGNhbm9uaWNhbCBtb2R1bGUtZnVuY3Rpb24gbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIG1hcmtlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGEgYmFyZSBtb2R1bGUtZnVuY3Rpb24gY2FsbC5cbiAqL1xuZnVuY3Rpb24gaXNNb2R1bGVGdW5jdGlvbk1hcmtlcihub2RlKSB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5uYW1lID09IFwibW9kdWxlX2Z1bmN0aW9uXCIgJiYgIW5vZGUuYXJndW1lbnRzX1xufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBnZW5lcmF0ZWQgUnVieSB2aXNpYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBtb2R1bGUtYm9keSBub2RlLlxuICogQHJldHVybnMge3traW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgbmFtZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gTWFya2VyIG1lYW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpIHtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBub2RlLnJlY2VpdmVyIHx8IG5vZGUuYmxvY2sgfHxcbiAgICAhW1wicHJpdmF0ZV9jbGFzc19tZXRob2RcIiwgXCJwcml2YXRlX2NvbnN0YW50XCJdLmluY2x1ZGVzKG5vZGUubmFtZSkgfHxcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBub2RlLm5hbWUgPT0gXCJwcml2YXRlX2NsYXNzX21ldGhvZFwiID8gXCJmdW5jdGlvblwiIDogXCJyZWNvcmRcIixcbiAgICBuYW1lOiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBhcnNlci1vd25lZCBzaW1wbGUgUnVieSBjb25zdGFudCBwYXRoIHdpdGhvdXQgaW5zcGVjdGluZyBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Q29uc3RhbnRSZWFkTm9kZSB8IENvbnN0YW50UGF0aE5vZGV9IG5vZGUgLSBDb25zdGFudCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUXVhbGlmaWVkIGNvbnN0YW50IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50UGF0aE5hbWUobm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHJldHVybiBub2RlLm5hbWVcbiAgaWYgKHR5cGVvZiBub2RlLm5hbWUgIT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBjb25zdGFudCBwYXRoIHdpdGhvdXQgYSBuYW1lLlwiKVxuICBpZiAoIW5vZGUucGFyZW50KSByZXR1cm4gbm9kZS5uYW1lXG4gIGlmICghKG5vZGUucGFyZW50IGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShub2RlLnBhcmVudCBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYW4gdW5zdXBwb3J0ZWQgY29uc3RhbnQtcGF0aCBwYXJlbnQuXCIpXG4gIH1cblxuICByZXR1cm4gYCR7Y29uc3RhbnRQYXRoTmFtZShub2RlLnBhcmVudCl9Ojoke25vZGUubmFtZX1gXG59XG4iXX0=