semantifold 0.13.0 → 0.14.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 (59) hide show
  1. package/README.md +1 -0
  2. package/build/src/backends/effects.js +3 -1
  3. package/build/src/backends/php.d.ts.map +1 -1
  4. package/build/src/backends/php.js +56 -3
  5. package/build/src/backends/scalars.js +2 -2
  6. package/build/src/backends/shared.d.ts +2 -1
  7. package/build/src/backends/shared.d.ts.map +1 -1
  8. package/build/src/backends/shared.js +209 -7
  9. package/build/src/backends/writer.d.ts +18 -4
  10. package/build/src/backends/writer.d.ts.map +1 -1
  11. package/build/src/backends/writer.js +40 -4
  12. package/build/src/frontends/java.d.ts +1 -1
  13. package/build/src/frontends/java.d.ts.map +1 -1
  14. package/build/src/frontends/java.js +14 -11
  15. package/build/src/frontends/javascript-typescript.d.ts +1 -1
  16. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  17. package/build/src/frontends/javascript-typescript.js +17 -17
  18. package/build/src/frontends/php.d.ts +5 -1
  19. package/build/src/frontends/php.d.ts.map +1 -1
  20. package/build/src/frontends/php.js +159 -31
  21. package/build/src/frontends/ruby.d.ts +1 -1
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +12 -9
  24. package/build/src/frontends/types.d.ts +9 -2
  25. package/build/src/frontends/types.d.ts.map +1 -1
  26. package/build/src/frontends/types.js +26 -9
  27. package/build/src/language-registry.d.ts.map +1 -1
  28. package/build/src/language-registry.js +14 -6
  29. package/build/src/mapping.d.ts.map +1 -1
  30. package/build/src/mapping.js +4 -2
  31. package/build/src/semantic/effects.d.ts.map +1 -1
  32. package/build/src/semantic/effects.js +3 -1
  33. package/build/src/semantic/provenance.d.ts.map +1 -1
  34. package/build/src/semantic/provenance.js +37 -4
  35. package/build/src/semantic/types.d.ts +140 -9
  36. package/build/src/semantic/types.d.ts.map +1 -1
  37. package/build/src/semantic/types.js +37 -6
  38. package/build/src/semantic/validate.d.ts +31 -2
  39. package/build/src/semantic/validate.d.ts.map +1 -1
  40. package/build/src/semantic/validate.js +346 -27
  41. package/docs/adr-bounded-subtyping.md +180 -0
  42. package/docs/language-support.md +1 -1
  43. package/package.json +1 -1
  44. package/src/backends/effects.js +1 -0
  45. package/src/backends/php.js +56 -2
  46. package/src/backends/scalars.js +1 -1
  47. package/src/backends/shared.js +210 -6
  48. package/src/backends/writer.js +41 -3
  49. package/src/frontends/java.js +13 -10
  50. package/src/frontends/javascript-typescript.js +16 -16
  51. package/src/frontends/php.js +175 -31
  52. package/src/frontends/ruby.js +11 -8
  53. package/src/frontends/types.js +26 -8
  54. package/src/language-registry.js +13 -5
  55. package/src/mapping.js +3 -1
  56. package/src/semantic/effects.js +1 -0
  57. package/src/semantic/provenance.js +34 -3
  58. package/src/semantic/types.js +39 -5
  59. package/src/semantic/validate.js +377 -26
@@ -14,7 +14,7 @@ import { documentedValueType, instantiatedRecordFieldType, iterationBindingType,
14
14
  /** @typedef {NonNullable<import("@babel/parser").ParseResult<import("@babel/types").File>["tokens"]>[number]} BabelToken */
15
15
  /** @typedef {{byStart: Map<number, BabelToken>, tokens: BabelToken[]}} BabelTokenIndex */
16
16
  /** @typedef {{name: string, nameLocation: import("../semantic/types.js").SourceLocation, parameters: import("../semantic/types.js").Parameter[], returnType: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: import("../semantic/types.js").TypeParameter[], location: import("../semantic/types.js").SourceLocation}} JavaScriptFunctionSignature */
17
- /** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, catchBindingNames?: Set<string>, catchBindingNodes?: Map<string, import("../semantic/types.js").CatchBinding>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, currentClass?: import("../semantic/types.js").ClassDeclaration, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, JavaScriptFunctionSignature>, lexicalValueNames?: Set<string>, orderedMapDeclarations?: Set<object>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>, valueRecordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>}} JavaScriptConversionContext */
17
+ /** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, catchBindingNames?: Set<string>, catchBindingNodes?: Map<string, import("../semantic/types.js").CatchBinding>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, currentClass?: import("../semantic/types.js").ClassDeclaration, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, JavaScriptFunctionSignature>, lexicalValueNames?: Set<string>, orderedMapDeclarations?: Set<object>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>, valueRecordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>}} JavaScriptConversionContext */
18
18
  /** @type {WeakMap<object, BabelTokenIndex>} */
19
19
  const nodeTokens = new WeakMap();
20
20
  const referenceMethodHooks = new Set([
@@ -757,7 +757,7 @@ function convertLocalStatement(node, language, filename, source, context) {
757
757
  * @param {string} name - Local name.
758
758
  * @param {string} filename - Source filename.
759
759
  * @param {string} source - Complete source.
760
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
760
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
761
761
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
762
762
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
763
763
  */
@@ -1214,7 +1214,7 @@ function classJsdocTypeParameters(node, ownerId, filename, source) {
1214
1214
  * @param {import("../semantic/types.js").SourceLocation} location - Source location.
1215
1215
  * @param {string} source - Complete parser input.
1216
1216
  * @param {import("../semantic/types.js").SourceLocation} [typeLocation] - Exact type token location.
1217
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1217
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1218
1218
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1219
1219
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
1220
1220
  */
@@ -1231,7 +1231,7 @@ function convertType(sourceType, language, subject, location, source, typeLocati
1231
1231
  * @param {import("../semantic/types.js").SourceLocation} location - Function location.
1232
1232
  * @param {string} source - Complete parser input.
1233
1233
  * @param {import("../semantic/types.js").SourceLocation} [typeLocation] - Exact annotation location.
1234
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1234
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1235
1235
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1236
1236
  * @returns {import("../semantic/types.js").SemanticFunctionReturnType} Semantic return type.
1237
1237
  */
@@ -1247,7 +1247,7 @@ function convertReturnType(sourceType, language, subject, location, source, type
1247
1247
  * @param {import("../semantic/types.js").SourceLocation} ownerLocation - Owning declaration location.
1248
1248
  * @param {string} filename - Source filename.
1249
1249
  * @param {string} source - Complete source.
1250
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1250
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1251
1251
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1252
1252
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
1253
1253
  */
@@ -1266,7 +1266,7 @@ function convertTypeScriptType(annotation, subject, ownerLocation, filename, sou
1266
1266
  * @param {import("../semantic/types.js").SourceLocation} ownerLocation - Owning declaration.
1267
1267
  * @param {string} filename - Source filename.
1268
1268
  * @param {string} source - Complete source.
1269
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1269
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1270
1270
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1271
1271
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic value type.
1272
1272
  */
@@ -1283,7 +1283,7 @@ function convertTypeScriptValueTypeNode(typeNode, subject, ownerLocation, filena
1283
1283
  }
1284
1284
  if (typeNode.type == "TSTypeReference" && typeNode.typeName.type == "Identifier" &&
1285
1285
  recordNames.has(typeNode.typeName.name)) {
1286
- const declaration = /** @type {import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration} */ (recordNames.get(typeNode.typeName.name));
1286
+ const declaration = /** @type {import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration} */ (recordNames.get(typeNode.typeName.name));
1287
1287
  if (declaration.kind == "EffectResourceDeclaration") {
1288
1288
  if (typeNode.typeParameters)
1289
1289
  return unsupportedSyntax("typescript", "generic owned resource type", nodeLocation(typeNode, filename, source));
@@ -1336,7 +1336,7 @@ function convertTypeScriptValueTypeNode(typeNode, subject, ownerLocation, filena
1336
1336
  * @param {import("../semantic/types.js").SourceLocation} ownerLocation - Function location.
1337
1337
  * @param {string} filename - Source filename.
1338
1338
  * @param {string} source - Complete source.
1339
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1339
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1340
1340
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1341
1341
  * @returns {import("../semantic/types.js").SemanticFunctionReturnType} Semantic return type.
1342
1342
  */
@@ -1378,7 +1378,7 @@ function typeScriptTypeParameters(declaration, ownerId, filename, source) {
1378
1378
  * @param {"javascript" | "typescript"} language - Frontend language.
1379
1379
  * @param {string} filename - Source filename.
1380
1380
  * @param {string} source - Complete source.
1381
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1381
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1382
1382
  * @param {string} ownerId - Stable function identity.
1383
1383
  * @returns {JavaScriptFunctionSignature} Semantic function signature.
1384
1384
  */
@@ -1435,7 +1435,7 @@ function convertFunctionSignature(node, language, filename, source, recordNames,
1435
1435
  * @param {import("@babel/types").FunctionDeclaration} node - Babel function.
1436
1436
  * @param {JavaScriptFunctionSignature} signature - Converted signature.
1437
1437
  * @param {Map<string, JavaScriptFunctionSignature>} functions - Module signatures.
1438
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by name.
1438
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by name.
1439
1439
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>} valueRecordNames - Nominal declarations available in value positions.
1440
1440
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Record declarations by identity.
1441
1441
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Reference classes by identity.
@@ -1563,7 +1563,7 @@ function convertJavaScriptError(node, declaration, language, filename, source) {
1563
1563
  * Predeclares the bounded native private-field reference-class profile and all callable signatures.
1564
1564
  * @param {import("@babel/types").ClassDeclaration} node - Parser class.
1565
1565
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Predeclared class identity.
1566
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Nominal types by name.
1566
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Nominal types by name.
1567
1567
  * @param {"javascript" | "typescript"} language - Source language.
1568
1568
  * @param {string} filename - Source filename.
1569
1569
  * @param {string} source - Complete source.
@@ -1639,7 +1639,7 @@ function predeclareReferenceClass(node, declaration, nominalNames, language, fil
1639
1639
  * Converts one reference class body after every class signature is complete.
1640
1640
  * @param {import("@babel/types").ClassDeclaration} node - Parser class.
1641
1641
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Complete predeclared class signature.
1642
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Nominal types by name.
1642
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Nominal types by name.
1643
1643
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>} valueNames - Nominal constructors by name.
1644
1644
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Records by identity.
1645
1645
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Classes by identity.
@@ -1673,7 +1673,7 @@ function convertReferenceClassBodies(node, declaration, nominalNames, valueNames
1673
1673
  * Reads one constructor or method signature without admitting overloads or modifiers.
1674
1674
  * @param {import("@babel/types").ClassMethod} node - Parser method.
1675
1675
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Declaring class.
1676
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Nominal types.
1676
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Nominal types.
1677
1677
  * @param {"javascript" | "typescript"} language - Source language.
1678
1678
  * @param {string} filename - Source filename.
1679
1679
  * @param {string} source - Complete source.
@@ -1720,7 +1720,7 @@ function convertClassCallableSignature(node, declaration, nominalNames, language
1720
1720
  * Converts one exact TypeScript readonly constructor-parameter record profile.
1721
1721
  * @param {import("@babel/types").ClassDeclaration} node - Class declaration.
1722
1722
  * @param {import("../semantic/types.js").RecordDeclaration} declaration - Predeclared nominal identity.
1723
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - All nominal declarations by name.
1723
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - All nominal declarations by name.
1724
1724
  * @param {string} filename - Source filename.
1725
1725
  * @param {string} source - Complete source.
1726
1726
  * @returns {import("../semantic/types.js").RecordDeclaration} Semantic record declaration.
@@ -1768,7 +1768,7 @@ function convertTypeScriptRecord(node, declaration, recordNames, filename, sourc
1768
1768
  * Converts one exact JSDoc constructor/readonly-assignment/freeze record profile.
1769
1769
  * @param {import("@babel/types").ClassDeclaration} node - Class declaration.
1770
1770
  * @param {import("../semantic/types.js").RecordDeclaration} declaration - Predeclared nominal identity.
1771
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by name.
1771
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by name.
1772
1772
  * @param {string} filename - Source filename.
1773
1773
  * @param {string} source - Complete source.
1774
1774
  * @returns {import("../semantic/types.js").RecordDeclaration} Semantic record declaration.
@@ -2068,7 +2068,7 @@ export function parseJavaScriptTypeScript({ capabilities = [], filename, languag
2068
2068
  fields: [], id: `class:${index}`, kind: /** @type {const} */ ("ClassDeclaration"),
2069
2069
  location: nodeLocation(node, filename, source), methods: [], name: node.id?.name ?? ""
2070
2070
  }));
2071
- const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} */ (new Map(program?.records ?? []));
2071
+ const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} */ (new Map(program?.records ?? []));
2072
2072
  for (const resource of capabilities.flatMap(({ resources }) => resources))
2073
2073
  recordNames.set(resource.name, resource);
2074
2074
  const valueRecordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration>} */ (new Map(program?.valueRecords ?? program?.records ?? []));
@@ -2484,4 +2484,4 @@ function rememberTokens(value, tokens, visited = new WeakSet()) {
2484
2484
  rememberTokens(child, tokens, visited);
2485
2485
  }
2486
2486
  }
2487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzNFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFB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Q0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUMzRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7SUFDNUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU07SUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUs7Z0JBQUUsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtvQkFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RyxDQUFDO2FBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtZQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RGLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VCYWJlbH0gZnJvbSBcIkBiYWJlbC9wYXJzZXJcIlxuaW1wb3J0IHtwYXJzZSBhcyBwYXJzZUNvbW1lbnR9IGZyb20gXCJjb21tZW50LXBhcnNlclwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnl9IGZyb20gXCIuLi9zZW1hbnRpYy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFycywgc2NhbGFyVHlwZX0gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCByZXF1aXJlU291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2RvY3VtZW50ZWRWYWx1ZVR5cGUsIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUsIGl0ZXJhdGlvbk9wZXJhbmRUeXBlLCBrbm93bkNhbGxSZXR1cm5UeXBlLCBsaXN0VHlwZSwgbWFwVHlwZSwgb3B0aW9uYWxUeXBlLCBvcmRlcmVkTWFwVHlwZUZyb21NYXAsIG93bmVkUmVmZXJlbmNlVHlwZSwgb3duZWRSZXNvdXJjZVR5cGUsIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCB0eXBlVmFyaWFibGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcblxuLyoqIEB0eXBlZGVmIHtOb25OdWxsYWJsZTxpbXBvcnQoXCJAYmFiZWwvcGFyc2VyXCIpLlBhcnNlUmVzdWx0PGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GaWxlPltcInRva2Vuc1wiXT5bbnVtYmVyXX0gQmFiZWxUb2tlbiAqL1xuLyoqIEB0eXBlZGVmIHt7YnlTdGFydDogTWFwPG51bWJlciwgQmFiZWxUb2tlbj4sIHRva2VuczogQmFiZWxUb2tlbltdfX0gQmFiZWxUb2tlbkluZGV4ICovXG4vKiogQHR5cGVkZWYge3tuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn19IEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZSAqL1xuLyoqIEB0eXBlZGVmIHt7YmluZGluZ3M6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+LCBjYXRjaEJpbmRpbmdOYW1lcz86IFNldDxzdHJpbmc+LCBjYXRjaEJpbmRpbmdOb2Rlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZz4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+LCBsZXhpY2FsVmFsdWVOYW1lcz86IFNldDxzdHJpbmc+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZE5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj4sIHZhbHVlUmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59fSBKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHQgKi9cblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQmFiZWxUb2tlbkluZGV4Pn0gKi9cbmNvbnN0IG5vZGVUb2tlbnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fZGVmaW5lR2V0dGVyX19cIiwgXCJfX2RlZmluZVNldHRlcl9fXCIsIFwiX19sb29rdXBHZXR0ZXJfX1wiLCBcIl9fbG9va3VwU2V0dGVyX19cIiwgXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLFxuICBcImhhc093blByb3BlcnR5XCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJ0b1N0cmluZ1wiLCBcInZhbHVlT2ZcIlxuXSlcbmNvbnN0IGJhYmVsQmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdXG5dKVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2UgbG9jYXRpb24gZm9yIGEgQmFiZWwgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG5vZGUgLSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gTm9ybWFsaXplZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIG5vZGUuZW5kICE9IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgc291cmNlIG9mZnNldHMgZm9yICR7bm9kZS50eXBlfS5gKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZS5zdGFydCwgbm9kZS5lbmQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBzcGVsbGluZyByYXRoZXIgdGhhbiBhIHRyYWlsaW5nIFR5cGVTY3JpcHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXJ9IG5vZGUgLSBQYXJzZXIgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IElkZW50aWZpZXIgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5zdGFydCAhPSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWJlbCBvbWl0dGVkIGFuIGlkZW50aWZpZXIgc3RhcnQgb2Zmc2V0LlwiKVxuICBjb25zdCB0b2tlbiA9IG5vZGVUb2tlbnMuZ2V0KG5vZGUpPy5ieVN0YXJ0LmdldChub2RlLnN0YXJ0KVxuXG4gIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5sYWJlbCAhPSBcIm5hbWVcIikgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBvbWl0dGVkIHRoZSBpZGVudGlmaWVyIHRva2VuIGZvciAnJHtub2RlLm5hbWV9Jy5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBvbmUgQmFiZWwgdG9rZW4gd2l0aGluIHBhcnNlci1ub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSBvd25lciAtIFRva2VuLW93bmluZyBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEV4YWN0IHRva2VuIHNwZWxsaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKG93bmVyLCB2YWx1ZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCB0b2tlbnMgPSBub2RlVG9rZW5zLmdldChvd25lcik/LnRva2VucyA/PyBbXVxuICBsZXQgbG93ID0gMFxuICBsZXQgaGlnaCA9IHRva2Vucy5sZW5ndGhcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMilcblxuICAgIGlmICh0b2tlbnNbbWlkZGxlXS5zdGFydCA8IHN0YXJ0T2Zmc2V0KSBsb3cgPSBtaWRkbGUgKyAxXG4gICAgZWxzZSBoaWdoID0gbWlkZGxlXG4gIH1cbiAgbGV0IHRva2VuXG5cbiAgZm9yIChsZXQgaW5kZXggPSBsb3c7IGluZGV4IDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaW5kZXhdLnN0YXJ0IDwgZW5kT2Zmc2V0OyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gdG9rZW5zW2luZGV4XVxuXG4gICAgaWYgKGNhbmRpZGF0ZS5lbmQgPD0gZW5kT2Zmc2V0ICYmIChjYW5kaWRhdGUudmFsdWUgPT0gdmFsdWUgfHwgY2FuZGlkYXRlLnR5cGUubGFiZWwgPT0gdmFsdWUpKSB7XG4gICAgICB0b2tlbiA9IGNhbmRpZGF0ZVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdG9rZW4gJyR7dmFsdWV9JyBiZXR3ZWVuICR7c3RhcnRPZmZzZXR9IGFuZCAke2VuZE9mZnNldH0uYClcblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxufVxuXG4vKipcbiAqIExvY2F0ZXMgYSBjb21tZW50LXBhcnNlciB0b2tlbiBpbnNpZGUgYSBCYWJlbC1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIEJhYmVsIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJjb21tZW50LXBhcnNlclwiKS5TcGVjfSB0YWcgLSBQYXJzZWQgZG9jIHRhZy5cbiAqIEBwYXJhbSB7XCJuYW1lXCIgfCBcInR5cGVcIn0gZmllbGQgLSBUb2tlbiBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsaW5lID0gdGFnLnNvdXJjZVswXVxuXG4gIGlmICh0eXBlb2YgY29tbWVudC5zdGFydCAhPSBcIm51bWJlclwiIHx8ICFsaW5lKSB0aHJvdyBuZXcgRXJyb3IoYENvbW1lbnQgcGFyc2VyIG9taXR0ZWQgdGhlIEAke3RhZy50YWd9IHNvdXJjZSB0b2tlbi5gKVxuXG4gIGxldCBsaW5lU3RhcnQgPSBjb21tZW50LnN0YXJ0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwidHlwZVwiLCBcInBvc3RUeXBlXCIsIFwibmFtZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBsZXQgc3RhcnQgPSBsaW5lU3RhcnQgKyBvcmRlcmVkRmllbGRzLnNsaWNlKDAsIGZpZWxkSW5kZXgpLnJlZHVjZSgobGVuZ3RoLCBrZXkpID0+XG4gICAgbGVuZ3RoICsgbGluZS50b2tlbnNbLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgbGluZS50b2tlbnN9ICovIChrZXkpXS5sZW5ndGgsIDApXG4gIGNvbnN0IHRva2VuID0gbGluZS50b2tlbnNbZmllbGRdXG4gIGxldCBsZW5ndGggPSB0b2tlbi5sZW5ndGhcblxuICBpZiAoZmllbGQgPT0gXCJ0eXBlXCIgJiYgdGFnLnR5cGUpIHtcbiAgICBjb25zdCBuZXN0ZWRPZmZzZXQgPSB0b2tlbi5pbmRleE9mKHRhZy50eXBlKVxuXG4gICAgaWYgKG5lc3RlZE9mZnNldCA8IDApIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gdHlwZSBzcGVsbGluZy5gKVxuICAgIHN0YXJ0ICs9IG5lc3RlZE9mZnNldFxuICAgIGxlbmd0aCA9IHRhZy50eXBlLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBgTWFwYCByZXNvbHZlcyB0byB0aGUgbmF0aXZlIGludHJpbnNpYyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG5hdGl2ZSBNYXAgY29uc3RydWN0aW9uIGlzIHVuc2hhZG93ZWQuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSB7XG4gIHJldHVybiAhY29udGV4dC5iaW5kaW5ncy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQubGV4aWNhbFZhbHVlTmFtZXM/LmhhcyhcIk1hcFwiKSAmJlxuICAgICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoXCJNYXBcIilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBCYWJlbCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IFtjb250ZXh0XSAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogbmV3IE1hcCgpLCBlcnJvcnM6IG5ldyBNYXAoKSwgZXJyb3JOYW1lczogbmV3IE1hcCgpLCBmdW5jdGlvbnM6IG5ldyBNYXAoKSwgcmVjb3JkTmFtZXM6IG5ldyBNYXAoKSwgcmVjb3JkczogbmV3IE1hcCgpLCB2YWx1ZVJlY29yZE5hbWVzOiBuZXcgTWFwKCl9LCBleHBlY3RlZFR5cGUsIHByZXNlcnZlT3B0aW9uYWwgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5uYW1lID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5kZWZpbmVkIGFic2VuY2UgdmFsdWVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm51bGwgb3V0c2lkZSBhbiBleHBsaWNpdCBvcHRpb25hbCBjb250ZXh0XCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUU05vbk51bGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgIGlmIChsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIiB8fCBleHByZXNzaW9uLmtpbmQgIT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub24tbnVsbCBhc3NlcnRpb24gb3RoZXIgdGhhbiBNYXAuZ2V0IHJlc3VsdFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZXhwcmVzc2lvbi5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgcmV0dXJuIGV4cHJlc3Npb25cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlLm5hbWV9LCB7XG4gICAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsVW53cmFwXCIpLCBsb2NhdGlvbiwgb3BlcmFuZDogaWRlbnRpZmllcn0sIHt1bndyYXA6IGxvY2F0aW9ufSlcbiAgICB9XG5cbiAgICByZXR1cm4gaWRlbnRpZmllclxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sXG4gICAgICB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihub2RlLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBib29sZWFuIGxpdGVyYWwgdmFsdWVcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZS52YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhub2RlLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgYXJyYXkgaG9sZVwiLCBhcnJheUhvbGVMb2NhdGlvbihub2RlLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYXJyYXkgc3ByZWFkXCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2VsZW1lbnRzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuY2FsbGVlLm5hbWUgPT0gXCJNYXBcIikge1xuICAgIGlmICghbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2hhZG93ZWQgTWFwIGNvbnN0cnVjdG9yXCIsIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJNYXAgdXNlZCBhcyBhIHN0cnVjdHVyYWwgcmVjb3JkIHN1YnN0aXR1dGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmljIG9yIGludmFsaWQgTWFwIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKCFpbml0aWFsaXplcikgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZW50cmllczogW10sXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgIGlmIChpbml0aWFsaXplci50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGluaXRpYWxpemVyLnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgaW5pdGlhbGl6ZXIudHlwZSwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgIT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBpbml0aWFsaXplciBvdGhlciB0aGFuIGFuIGVudHJ5IGFycmF5XCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWRcbiAgICBjb25zdCBlbnRyaWVzID0gaW5pdGlhbGl6ZXIuZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBpbml0aWFsaXplclwiLCBhcnJheUhvbGVMb2NhdGlvbihpbml0aWFsaXplciwgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiIHx8IGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBlbnRyeSBvdGhlciB0aGFuIGEga2V5L3ZhbHVlIHBhaXJcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5lbGVtZW50c1xuXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAga2V5XCIsIGFycmF5SG9sZUxvY2F0aW9uKGVsZW1lbnQsIDAsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAgdmFsdWVcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoa2V5LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgdmFsdWUudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikge1xuICAgICAgICBjb25zdCBzcHJlYWQgPSBrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiA/IGtleSA6IHZhbHVlXG5cbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBlbnRyeSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKHNwcmVhZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoa2V5LnR5cGUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5RXhwcmVzc2lvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihrZXksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleToga2V5RXhwcmVzc2lvbixcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbih2YWx1ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLmxvY2F0aW9uLFxuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihlbGVtZW50LCBcIixcIiwga2V5LmVuZCA/PyBlbGVtZW50LnN0YXJ0ID8/IDAsIHZhbHVlLnN0YXJ0ID8/IGVsZW1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LnZhbHVlUmVjb3JkTmFtZXMuaGFzKG5vZGUuY2FsbGVlLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5nZXQobm9kZS5jYWxsZWUubmFtZSkpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMgfHwgbm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVmZXJlbmNlOiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgICA/IG93bmVkUmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbilcbiAgICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMgPz8gbm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zXG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICBhcmd1bWVudCxcbiAgICAgIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnNcbiAgICApKSA/PyAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkID8gZXhwZWN0ZWRUeXBlLmFyZ3VtZW50cyA6IHVuZGVmaW5lZClcbiAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudHNfLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLm9wdGlvbmFsICYmIG5vZGUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiKSB7XG4gICAgaWYgKCFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHByb3BlcnR5XG5cbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eVxuICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gcHJvcGVydHkubmFtZSlcblxuICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgdW5rbm93biBwcml2YXRlIGZpZWxkICcke3Byb3BlcnR5Lm5hbWV9J2AsIGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicHJpdmF0ZSByZWZlcmVuY2UtY2xhc3MgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGUucHJvcGVydHkubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm9iamVjdC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUub2JqZWN0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yTWVzc2FnZVJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLm9iamVjdC5uYW1lfSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbXB1dGVkIHJlY29yZCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUucHJvcGVydHkudHlwZSwgbG9jYXRpb24pXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJvcGVydHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgIH0sIHtcbiAgICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJbXCIsIG5vZGUub2JqZWN0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucHJvcGVydHkuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgW1wibGVuZ3RoXCIsIFwic2l6ZVwiXS5pbmNsdWRlcyhub2RlLnByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgY29sbGVjdGlvbktpbmQ6IC8qKiBAdHlwZSB7XCJsaXN0XCIgfCBcIm1hcFwifSAqLyAobm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibGVuZ3RoXCIgPyBcImxpc3RcIiA6IFwibWFwXCIpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUucHJvcGVydHkubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUZW1wbGF0ZUxpdGVyYWxcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSAqL1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IFtdXG5cbiAgICAgIG5vZGUucXVhc2lzLmZvckVhY2goKHF1YXNpLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHF1YXNpLnZhbHVlLmNvb2tlZCAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMocXVhc2kudmFsdWUuY29va2VkKSkge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWFzaUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICAgIGlmIChxdWFzaS52YWx1ZS5jb29rZWQubGVuZ3RoID4gMCkgb3JkZXJlZC5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uOiBxdWFzaUxvY2F0aW9uLCB2YWx1ZTogcXVhc2kudmFsdWUuY29va2VkfSwge2xpdGVyYWw6IHF1YXNpTG9jYXRpb259KSlcbiAgICAgICAgaWYgKGluZGV4IDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goY29udmVydEV4cHJlc3Npb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gKi8gKG5vZGUuZXhwcmVzc2lvbnNbaW5kZXhdKSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNjYWxhclR5cGUoXCJzdHJpbmdcIikpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID09IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnRlcnBvbGF0ZWQgc3RyaW5nXCIsIGxvY2F0aW9uKVxuXG4gICAgICBsZXQgbG93ZXJlZCA9IG9yZGVyZWRbMF1cblxuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG9yZGVyZWQuc2xpY2UoMSkpIHtcbiAgICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmluYXJ5RXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJpZ2h0OiBwYXJ0XG4gICAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG93ZXJlZFxuICAgIH1cblxuICAgIGNvbnN0IHF1YXNpID0gbm9kZS5xdWFzaXNbMF1cblxuICAgIGlmICh0eXBlb2YgcXVhc2kudmFsdWUuY29va2VkICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhxdWFzaS52YWx1ZS5jb29rZWQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IHF1YXNpLnZhbHVlLmNvb2tlZH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhbHRlcm5hdGU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYWx0ZXJuYXRlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5vZGUuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiOlwiLCBub2RlLmNvbnNlcXVlbnQuZW5kID8/IG5vZGUudGVzdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLmFsdGVybmF0ZS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUudGVzdCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiP1wiLCBub2RlLnRlc3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5jb25zZXF1ZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTG9naWNhbEV4cHJlc3Npb25cIiAmJiBbXCImJlwiLCBcInx8XCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pLCBub2RlLm9wZXJhdG9yID09IFwiJiZcIiA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBub2RlLm9wZXJhdG9yID09IFwiIT09XCIgJiYgbm9kZS5sZWZ0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLnJpZ2h0LnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBiYWJlbEJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgaWYgKG5vZGUubGVmdC50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUubGVmdC50eXBlLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxlZnQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHJpZ2h0ID0gY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0LFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChiYWJlbEJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUub3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke25vZGUub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKG5vZGUub3B0aW9uYWwgfHwgbm9kZS5jYWxsZWUub3B0aW9uYWwgfHwgbm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBvciBnZW5lcmljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLmNhbGxlZS5uYW1lKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGUuY2FsbGVlLm5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lXG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbj8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZE5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sXG4gICAgICAgIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5jYWxsZWUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LFxuICAgICAge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgIW5vZGUudHlwZUFyZ3VtZW50cyAmJiAhbm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmICFub2RlLmNhbGxlZS5vcHRpb25hbCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwLmdldCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBrZXkgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGtleS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGtleS50eXBlLCBub2RlTG9jYXRpb24oa2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oa2V5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgfSwge29wZXJhdG9yOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IGV4cHJlc3Npb24gcmVzdWx0IHR5cGVzIGFscmVhZHkgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgbW9kdWxlXG4gKiBzaWduYXR1cmVzIGFuZCBjb2xsZWN0aW9uIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS50eXBlID09IFwiVFNOb25OdWxsRXhwcmVzc2lvblwiKSByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24sIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsXG4gICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiA/IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIGNvbnN0IHNvdXJjZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cz8ucGFyYW1zID8/IG5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtc1xuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PlxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG5cbiAgICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHtcbiAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZXRob2ROYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5LmlkLm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBtZW1iZXJOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSkgPz8gLTFcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIG5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdmFsdWUgdHlwZSBwcm9kdWNlZCBieSB0aGUgZnJvbnRlbmQncyBpbXBsaWNpdCBvcHRpb25hbC1iaW5kaW5nIHVud3JhcC5cbiAqIFNlbWFudGljIHZhbGlkYXRpb24gc2VwYXJhdGVseSBwcm92ZXMgdGhhdCB0aGUgdW53cmFwIG9jY3VycyBvbmx5IG9uIGEgcHJlc2VudCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBwYXJzZXItYm91bmRlZCBsb2NhdGlvbiBmb3Igb25lIGFic2VudCBhcnJheSBlbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQXJyYXlFeHByZXNzaW9ufSBub2RlIC0gQXJyYXkgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE1pc3NpbmcgZWxlbWVudCBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEhvbGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gbm9kZS5lbGVtZW50cy5zbGljZSgwLCBpbmRleCkuZmluZExhc3QoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3QgbmV4dCA9IG5vZGUuZWxlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50ICE9IG51bGwpXG4gIGNvbnN0IHN0YXJ0ID0gcHJldmlvdXM/LmVuZCA/PyAobm9kZS5zdGFydCA/PyAwKSArIDFcbiAgY29uc3QgZW5kID0gbmV4dD8uc3RhcnQgPz8gTWF0aC5tYXgoc3RhcnQgKyAxLCAobm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCkgLSAxKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0LCBNYXRoLm1heChzdGFydCArIDEsIE1hdGgubWluKGVuZCwgc291cmNlLmxlbmd0aCkpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnQgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBub2RlLmFyZ3VtZW50LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghW1wibGV0XCIsIFwiY29uc3RcIl0uaW5jbHVkZXMobm9kZS5raW5kKSB8fCBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgJHtub2RlLmtpbmR9IGRlY2xhcmF0aW9uYCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRvckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGRlY2xhcmF0b3IuaWQudHlwZSwgZGVjbGFyYXRvckxvY2F0aW9uKVxuICAgIGlmICghZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5pbml0aWFsaXplZCBkZWNsYXJhdGlvblwiLCBkZWNsYXJhdG9yTG9jYXRpb24pXG5cbiAgICBsZXQgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgTG9jYWwgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBkZWNsYXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgICA6IGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgZGVjbGFyYXRvci5pZC5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgaWYgKG5vZGUua2luZCA9PSBcImNvbnN0XCIgJiYgdHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGRlY2xhcmF0b3IpICYmXG4gICAgICBkZWNsYXJhdG9yLmluaXQudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBkZWNsYXJhdG9yLmluaXQuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUubmFtZSA9PSBcIk1hcFwiICYmIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSkge1xuICAgICAgdHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcCh0eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihkZWNsYXJhdG9yLmluaXQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG5vZGUua2luZCA9PSBcImxldFwiLFxuICAgICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGRlY2xhcmF0b3IsIFwiPVwiLCBkZWNsYXJhdG9yLmlkLmVuZCA/PyBkZWNsYXJhdG9yLnN0YXJ0ID8/IDAsIGRlY2xhcmF0b3IuaW5pdC5zdGFydCA/PyBkZWNsYXJhdG9yLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIHR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBub2RlLmV4cHJlc3Npb25cbiAgICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoYXNzaWdubWVudC5vcGVyYXRvciAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhc3NpZ25tZW50LmxlZnQuY29tcHV0ZWQgJiZcbiAgICAgIGFzc2lnbm1lbnQubGVmdC5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHlcbiAgICAgIGlmICghcHJvcGVydHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBhc3NpZ25tZW50XCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0Lm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYXNzaWdubWVudCwgXCI9XCIsXG4gICAgICAgIGFzc2lnbm1lbnQubGVmdC5lbmQgPz8gYXNzaWdubWVudC5zdGFydCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LnN0YXJ0ID8/IGFzc2lnbm1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFzc2lnbm1lbnQubGVmdC50eXBlLCB0YXJnZXRMb2NhdGlvbilcblxuICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IGFzc2lnbm1lbnQubGVmdC5uYW1lfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChhc3NpZ25tZW50LmxlZnQubmFtZSlcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gaW1tZWRpYXRlbHkgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IGxvY2FsIGBAdHlwZWAgdGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVmFyaWFibGVEZWNsYXJhdGlvbn0gbm9kZSAtIExvY2FsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSBub2RlLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQudHlwZSAhPSBcIkNvbW1lbnRCbG9ja1wiIHx8ICFjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbm9kZS5zdGFydCA/PyAwKVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXVxuICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgY29uc3QgdGFnID0gdGFncy5sZW5ndGggPT0gMSA/IHRhZ3NbMF0gOiB1bmRlZmluZWRcblxuICByZXR1cm4gY29udmVydFR5cGUoXG4gICAgdGFnPy50eXBlLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIGBMb2NhbCAnJHtuYW1lfSdgLFxuICAgIGxvY2F0aW9uLFxuICAgIHNvdXJjZSxcbiAgICB0YWcgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICByZWNvcmROYW1lcyxcbiAgICB0eXBlUGFyYW1ldGVyc1xuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBpZiAobm9kZS50eXBlID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBub2RlLnR5cGUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKG5vZGUubGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGxhYmVsZWQgJHtub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5sYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZSwga2V5d29yZCwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IG5vZGUudHlwZSwgbG9jYXRpb259LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgKG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmV4cHJlc3Npb24uY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgICAgW1wiUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoXG4gICAgICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRocm93U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0aHJvd1N0YXRlbWVudH0gU2VtYW50aWMgcmFpc2Ugb3IgcmV0aHJvdy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVkVGhyb3cobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50XG5cbiAgaWYgKGFyZ3VtZW50Py50eXBlID09IFwiSWRlbnRpZmllclwiICYmIGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXM/Lmhhcyhhcmd1bWVudC5uYW1lKSAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChhcmd1bWVudC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgY29uc3QgYmluZGluZ05vZGUgPSBjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzPy5nZXQoYXJndW1lbnQubmFtZSlcblxuICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0aHJvdyBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYmluZGluZzogYXJndW1lbnQubmFtZSxcbiAgICAgIGJpbmRpbmdOb2RlLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmV0aHJvd1N0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LnR5cGUgIT0gXCJOZXdFeHByZXNzaW9uXCIgfHwgYXJndW1lbnQuY2FsbGVlLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBjb250ZXh0LmJpbmRpbmdzLmhhcyhhcmd1bWVudC5jYWxsZWUubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8IGFyZ3VtZW50LmFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIGFyZ3VtZW50LmFyZ3VtZW50c1swXS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LmFyZ3VtZW50c1swXS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiIHx8XG4gICAgYXJndW1lbnQudHlwZUFyZ3VtZW50cyB8fCBhcmd1bWVudC50eXBlUGFyYW1ldGVycykge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0aHJvdyBvdGhlciB0aGFuIGV4YWN0IGRlY2xhcmVkIGVycm9yIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQuZXJyb3JOYW1lcy5nZXQoYXJndW1lbnQuY2FsbGVlLm5hbWUpKVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24oYXJndW1lbnQuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudC5hcmd1bWVudHNbMF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihub2RlLCBcInRocm93XCIsIG5vZGUuc3RhcnQgPz8gMCwgYXJndW1lbnQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjYXRjaCB3aXRoIHRoZSBjYW5vbmljYWwgYGluc3RhbmNlb2ZgIGd1YXJkIGFuZCBleGFjdCByZXRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHJ5U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdHJ5IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlZFRyeShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmhhbmRsZXIpIHtcbiAgICBpZiAoIW5vZGUuZmluYWxpemVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHJ5IHdpdGhvdXQgYW4gZXhwbGljaXQgZ3VhcmRlZCBjYXRjaFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgICBjb25zdCBzZW1hbnRpYyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5ibG9jaywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgICAgaGFuZGxlcnM6IFtdLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpXG5cbiAgICBzZW1hbnRpYy5maW5hbGx5Qm9keSA9IGNvbnZlcnRCbG9jayhub2RlLmZpbmFsaXplci5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgICAgey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfSwgbm9kZUxvY2F0aW9uKG5vZGUuZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBzZXRQYXJzZXJSYW5nZXMoc2VtYW50aWMsIHtmaW5hbGx5OiBub2RlTG9jYXRpb24obm9kZS5maW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdHJ5OiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidHJ5XCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5ibG9jay5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEhhbmRsZXJbXX0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSBbXVxuICBjb25zdCBzZWVuSGFuZGxlck5hbWVzID0gbmV3IFNldChjb250ZXh0LmNhdGNoQmluZGluZ05hbWVzID8/IFtdKVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAvLyBKYXZhU2NyaXB0IGhhcyBubyBzaWJsaW5nIGNhdGNoIGNsYXVzZXMsIHNvIHRoZSBleGFjdCBuYXRpdmUgcHJvZmlsZSBmb3Igb3JkZXJlZFxuICAvLyBtdWx0aS1jYXRjaCBpcyBhIGd1YXJkZWQgZGlzcGF0Y2ggY2hhaW46IGVhY2ggdW5tYXRjaGVkIGd1YXJkIHJldGhyb3dzIGludG8gdGhlIG5leHRcbiAgLy8gY2xhdXNlLiBUaGUgY2hhaW4gZmxhdHRlbnMgYmFjayB0byBvbmUgb3JkZXJlZCBoYW5kbGVyIGxpc3QgaGVyZS5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2F0Y2hDbGF1c2UgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjbGF1c2UgPSBub2RlLmhhbmRsZXJcblxuICB3aGlsZSAoY2xhdXNlKSB7XG4gICAgY29uc3QgYmluZGluZyA9IGNsYXVzZS5wYXJhbVxuXG4gICAgaWYgKGJpbmRpbmc/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2xhdXNlLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggd2l0aG91dCBvbmUgZXhwbGljaXQgYmluZGluZ1wiLCBub2RlTG9jYXRpb24oY2xhdXNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKHNlZW5IYW5kbGVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGNhdGNoIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgc2hhZG93cyBhbiBvdXRlciBoYW5kbGVyIGJpbmRpbmdgLFxuICAgICAgICBpZGVudGlmaWVyTG9jYXRpb24oYmluZGluZywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKGJpbmRpbmcubmFtZSlcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudCB8IHVuZGVmaW5lZH0gKi9cbiAgICBjb25zdCBndWFyZCA9IGNsYXVzZS5ib2R5LmJvZHlbMF1cblxuICAgIGlmICghZ3VhcmQgfHwgZ3VhcmQudHlwZSAhPSBcIklmU3RhdGVtZW50XCIgfHwgZ3VhcmQudGVzdC50eXBlICE9IFwiVW5hcnlFeHByZXNzaW9uXCIgfHxcbiAgICAgIGd1YXJkLnRlc3Qub3BlcmF0b3IgIT0gXCIhXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC50eXBlICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQub3BlcmF0b3IgIT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICAgIGd1YXJkLnRlc3QuYXJndW1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQubGVmdC5uYW1lICE9IGJpbmRpbmcubmFtZSB8fFxuICAgICAgZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSA9PSBiaW5kaW5nLm5hbWUgfHxcbiAgICAgIGNvbnRleHQuYmluZGluZ3MuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lKSB8fFxuICAgICAgZ3VhcmQuY29uc2VxdWVudC50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIiB8fCBndWFyZC5jb25zZXF1ZW50LmJvZHkubGVuZ3RoICE9IDEgfHwgZ3VhcmQuY29uc2VxdWVudC5kaXJlY3RpdmVzLmxlbmd0aCA+IDAgfHxcbiAgICAgIChndWFyZC5hbHRlcm5hdGUgJiYgKGd1YXJkLmFsdGVybmF0ZS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIiB8fCBndWFyZC5hbHRlcm5hdGUuZGlyZWN0aXZlcy5sZW5ndGggPiAwKSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCB3aXRob3V0IGV4YWN0IGluc3RhbmNlb2YgZ3VhcmRcIiwgbm9kZUxvY2F0aW9uKGd1YXJkID8/IGNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50IHwgdW5kZWZpbmVkfSAqL1xuICAgIGNvbnN0IGRpc3BhdGNoID0gZ3VhcmQuY29uc2VxdWVudC5ib2R5WzBdXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2F0Y2hDbGF1c2UgfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IG5leHRDbGF1c2UgPSB1bmRlZmluZWRcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gKi9cbiAgICBsZXQgaGFuZGxlckJvZHlTdGF0ZW1lbnRzID0gY2xhdXNlLmJvZHkuYm9keS5zbGljZSgxKVxuICAgIGxldCBoYW5kbGVyQm9keUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGNsYXVzZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGRpc3BhdGNoLnR5cGUgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGRpc3BhdGNoLmZpbmFsaXplciB8fCAhZGlzcGF0Y2guaGFuZGxlciB8fCBkaXNwYXRjaC5ibG9jay5ib2R5Lmxlbmd0aCAhPSAxIHx8IGRpc3BhdGNoLmJsb2NrLmJvZHlbMF0udHlwZSAhPSBcIlRocm93U3RhdGVtZW50XCIgfHxcbiAgICAgICAgZGlzcGF0Y2guYmxvY2suYm9keVswXS5hcmd1bWVudD8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBkaXNwYXRjaC5ibG9jay5ib2R5WzBdLmFyZ3VtZW50Lm5hbWUgIT0gYmluZGluZy5uYW1lIHx8XG4gICAgICAgICFndWFyZC5hbHRlcm5hdGUgfHwgY2xhdXNlLmJvZHkuYm9keS5sZW5ndGggIT0gMSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggZ3VhcmQgZGlzcGF0Y2ggd2l0aG91dCBleGFjdCByZXRocm93IG9mIGl0cyBvd24gYmluZGluZ1wiLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihkaXNwYXRjaCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBuZXh0Q2xhdXNlID0gZGlzcGF0Y2guaGFuZGxlclxuICAgICAgaGFuZGxlckJvZHlTdGF0ZW1lbnRzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQmxvY2tTdGF0ZW1lbnR9ICovIChndWFyZC5hbHRlcm5hdGUpLmJvZHlcbiAgICAgIGhhbmRsZXJCb2R5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oZ3VhcmQuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAoZGlzcGF0Y2gudHlwZSAhPSBcIlRocm93U3RhdGVtZW50XCIgfHwgZGlzcGF0Y2guYXJndW1lbnQ/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZGlzcGF0Y2guYXJndW1lbnQubmFtZSAhPSBiaW5kaW5nLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCBndWFyZCB3aXRob3V0IGV4YWN0IHVubWF0Y2hlZCByZXRocm93XCIsIG5vZGVMb2NhdGlvbihkaXNwYXRjaCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmIChndWFyZC5hbHRlcm5hdGUpIHtcbiAgICAgIGlmIChjbGF1c2UuYm9keS5ib2R5Lmxlbmd0aCAhPSAxKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCBndWFyZCBkaXNwYXRjaCB3aXRob3V0IGV4YWN0IHJldGhyb3cgb2YgaXRzIG93biBiaW5kaW5nXCIsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKGd1YXJkLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBoYW5kbGVyQm9keVN0YXRlbWVudHMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudH0gKi8gKGd1YXJkLmFsdGVybmF0ZSkuYm9keVxuICAgICAgaGFuZGxlckJvZHlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihndWFyZC5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkpXG4gICAgY29uc3QgY2F1Z2h0VHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKVxuICAgIH0sIHt0eXBlOiBjYXVnaHRUeXBlTG9jYXRpb259KVxuICAgIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgY2F0Y2hCaW5kaW5nTmFtZXM6IG5ldyBTZXQoc2VlbkhhbmRsZXJOYW1lcyksXG4gICAgICBjYXRjaEJpbmRpbmdOb2RlczogbmV3IE1hcChjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzKX1cblxuICAgIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaFR5cGUpXG4gICAgY29uc3QgY2F0Y2hCaW5kaW5nTm9kZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaEJpbmRpbmdOb2RlKVxuICAgIGhhbmRsZXJzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjYXRjaEJpbmRpbmc6IGNhdGNoQmluZGluZ05vZGUsXG4gICAgICBjYXRjaEJvZHk6IGNvbnZlcnRCbG9jayhoYW5kbGVyQm9keVN0YXRlbWVudHMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNhdGNoQ29udGV4dCxcbiAgICAgICAgaGFuZGxlckJvZHlMb2NhdGlvbiksXG4gICAgICBjYXRjaFR5cGUsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYXRjaEhhbmRsZXJcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7Y2F0Y2g6IHRva2VuTG9jYXRpb24oY2xhdXNlLCBcImNhdGNoXCIsIGNsYXVzZS5zdGFydCA/PyAwLCBiaW5kaW5nLnN0YXJ0ID8/IGNsYXVzZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KSlcbiAgICBjbGF1c2UgPSBuZXh0Q2xhdXNlXG4gIH1cbiAgY29uc3Qgc2VtYW50aWMgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJsb2NrLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBib2R5Q29udGV4dCksXG4gICAgaGFuZGxlcnMsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtcbiAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pKVxuXG4gIGlmIChub2RlLmZpbmFsaXplcikge1xuICAgIHNlbWFudGljLmZpbmFsbHlCb2R5ID0gY29udmVydEJsb2NrKG5vZGUuZmluYWxpemVyLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAgICB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9LCBub2RlTG9jYXRpb24obm9kZS5maW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHNldFBhcnNlclJhbmdlcyhzZW1hbnRpYywge2ZpbmFsbHk6IG5vZGVMb2NhdGlvbihub2RlLmZpbmFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhhY3QgYmxvY2stYm9kaWVkIGBmb3IgKGNvbnN0IHZhbHVlIG9mIGxpc3QpYCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRm9yT2ZTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBmb3Itb2Ygc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBzY2FsYXIgb3V0cHV0IGNhbm9uaWNhbGl6ZXMgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGb3JFYWNoKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5hd2FpdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFzeW5jIGZvci1vZlwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUubGVmdC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIGFzc2lnbm1lbnQgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKG5vZGUubGVmdC5raW5kICE9IFwiY29uc3RcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYCR7bm9kZS5sZWZ0LmtpbmR9IGl0ZXJhdGlvbiBiaW5kaW5nYCwgdG9rZW5Mb2NhdGlvbihcbiAgICAgIG5vZGUubGVmdCxcbiAgICAgIG5vZGUubGVmdC5raW5kLFxuICAgICAgbm9kZS5sZWZ0LnN0YXJ0ID8/IG5vZGUuc3RhcnQgPz8gMCxcbiAgICAgIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlXG4gICAgKSlcbiAgfVxuICBpZiAobm9kZS5sZWZ0LmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm11bHRpcGxlIGl0ZXJhdGlvbiBiaW5kaW5nc1wiLCBub2RlTG9jYXRpb24obm9kZS5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF1cblxuICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiQXJyYXlQYXR0ZXJuXCIpIHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBkZWNsYXJhdG9yLmlkLmVsZW1lbnRzXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC5lbGVtZW50cy5sZW5ndGggIT0gMiB8fCAha2V5IHx8ICF2YWx1ZSB8fCBrZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCB2YWx1ZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgICBkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uIHx8IGtleS50eXBlQW5ub3RhdGlvbiB8fCB2YWx1ZS50eXBlQW5ub3RhdGlvbiB8fCBrZXkub3B0aW9uYWwgfHwgdmFsdWUub3B0aW9uYWwpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYXAgaXRlcmF0aW9uIGJpbmRpbmcgc2hhcGVcIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IuaWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW5pdGlhbGl6ZWQgaXRlcmF0aW9uIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShub2RlLnJpZ2h0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bm9yZGVyZWQgbWFwIGl0ZXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgXCJPcmRlcmVkIG1hcCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGtleUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCB2YWx1ZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKHZhbHVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGtleVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS5rZXlUeXBlLCBrZXlMb2NhdGlvbilcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGUsIHZhbHVlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5QmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjoga2V5TG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBrZXkubmFtZSwgdHlwZToga2V5VHlwZVxuICAgIH0sIHtuYW1lOiBrZXlMb2NhdGlvbn0pXG4gICAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiB2YWx1ZUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogdmFsdWUubmFtZSwgdHlwZTogdmFsdWVUeXBlXG4gICAgfSwge25hbWU6IHZhbHVlTG9jYXRpb259KVxuICAgIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gICAgYm9keUNvbnRleHQuYmluZGluZ3Muc2V0KGtleS5uYW1lLCBrZXlUeXBlKVxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZS5uYW1lLCB2YWx1ZVR5cGUpXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgICAga2V5QmluZGluZyxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJvZlwiLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLFxuICAgICAgICBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBkZWNsYXJhdG9yLmlkLnR5cGUsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKG5vZGUuYm9keS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShub2RlLnJpZ2h0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGRlY2xhcmF0b3IuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gIGNvbnN0IGJpbmRpbmdUeXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvblxuICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb24sIGBJdGVyYXRpb24gYmluZGluZyAnJHtkZWNsYXJhdG9yLmlkLm5hbWV9J2AsIGJpbmRpbmdMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgOiBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBkZWNsYXJhdG9yLmlkLm5hbWUsXG4gICAgdHlwZTogYmluZGluZ1R5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hTdGF0ZW1lbnRcIiksXG4gICAgbGlzdDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7XG4gICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJvZlwiLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBCYWJlbCBibG9jayBvciBub3JtYWxpemVkIHNpbmdsZS1zdGF0ZW1lbnQgYm9keS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50IHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBpbnB1dCAtIFBhcnNlciBibG9jayBvciBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBbbG9jYXRpb25dIC0gTG9jYXRpb24gZm9yIGEgc3RhdGVtZW50LWFycmF5IGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKGlucHV0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0LCBsb2NhdGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IGlucHV0LmJvZHlcbiAgY29uc3QgZGlyZWN0aXZlcyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gW10gOiBpbnB1dC5kaXJlY3RpdmVzXG4gIGNvbnN0IGJsb2NrTG9jYXRpb24gPSBsb2NhdGlvbiA/PyBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQmxvY2tTdGF0ZW1lbnR9ICovIChpbnB1dCksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGxleGljYWxWYWx1ZU5hbWVzID0gbmV3IFNldChjb250ZXh0LmxleGljYWxWYWx1ZU5hbWVzKVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgIT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpIGNvbnRpbnVlXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdG9yIG9mIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIGxleGljYWxWYWx1ZU5hbWVzLmFkZChkZWNsYXJhdG9yLmlkLm5hbWUpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJsb2NrQ29udGV4dCA9IHsuLi5jb250ZXh0LCBsZXhpY2FsVmFsdWVOYW1lc31cblxuICBpZiAoZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImRpcmVjdGl2ZVwiLCBub2RlTG9jYXRpb24oZGlyZWN0aXZlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtpbmQ6IFwiQmxvY2tcIixcbiAgICBsb2NhdGlvbjogYmxvY2tMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBzdGF0ZW1lbnRzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYmxvY2tDb250ZXh0KSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIEphdmFTY3JpcHQgSlNEb2MgdHlwZXMgZnJvbSBhIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eSBmb3IgdHlwZS1wYXJhbWV0ZXIgSURzLlxuICogQHJldHVybnMge3twYXJhbWV0ZXJzOiBNYXA8c3RyaW5nLCB7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9PiwgcmV0dXJuVHlwZToge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfSB8IHVuZGVmaW5lZCwgdHlwZVBhcmFtZXRlcnM/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119fSBQYXJzZWQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIGpzZG9jVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkge1xuICBjb25zdCBjb21tZW50ID0gbm9kZS5sZWFkaW5nQ29tbWVudHM/LmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJiBjYW5kaWRhdGUudmFsdWUuc3RhcnRzV2l0aChcIipcIikpXG5cbiAgaWYgKCFjb21tZW50KSBtaXNzaW5nVHlwZShcImphdmFzY3JpcHRcIiwgYEZ1bmN0aW9uICcke25vZGUuaWQ/Lm5hbWUgPz8gXCJhbm9ueW1vdXNcIn0nYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGNvbnN0IGNvbW1lbnRCbG9jayA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gKi8gKGNvbW1lbnQpXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudEJsb2NrLnZhbHVlfSovYClbMF1cbiAgY29uc3QgcGFyYW1ldGVyVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJwYXJhbVwiKVxuICBjb25zdCByZXR1cm5UYWdzID0gYmxvY2sudGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLnRhZyA9PSBcInJldHVybnNcIiB8fCB0YWcudGFnID09IFwicmV0dXJuXCIpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50QmxvY2ssIGJsb2NrLnRhZ3MsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5ldyBTZXQocGFyYW1ldGVyVGFncy5tYXAoKHRhZykgPT4gdGFnLm5hbWUpKS5zaXplICE9IHBhcmFtZXRlclRhZ3MubGVuZ3RoKSB7XG4gICAgY29uc3QgZHVwbGljYXRlID0gcGFyYW1ldGVyVGFncy5maW5kKCh0YWcsIGluZGV4KSA9PiBwYXJhbWV0ZXJUYWdzLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSB0YWcubmFtZSkgIT0gaW5kZXgpXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEBwYXJhbSBhbm5vdGF0aW9uXCIsIGR1cGxpY2F0ZVxuICAgICAgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCBkdXBsaWNhdGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHJldHVyblRhZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJkdXBsaWNhdGUgQHJldHVybiBhbm5vdGF0aW9uXCIsXG4gICAgICBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWdzWzFdLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBNYXAocGFyYW1ldGVyVGFncy5tYXAoKHRhZykgPT4gW3RhZy5uYW1lLCB7XG4gICAgbG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50QmxvY2ssIHRhZywgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHNvdXJjZVR5cGU6IHRhZy50eXBlXG4gIH1dKSlcbiAgY29uc3QgcmV0dXJuVGFnID0gcmV0dXJuVGFnc1swXVxuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiByZXR1cm5UYWcgPyB7bG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50QmxvY2ssIHJldHVyblRhZywgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2VUeXBlOiByZXR1cm5UYWcudHlwZX0gOiB1bmRlZmluZWQsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgZXhhY3QgdW5ib3VuZGVkIGludmFyaWFudCBgQHRlbXBsYXRlIE5hbWVgIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIFBhcnNlci1vd25lZCBKU0RvYyBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiY29tbWVudC1wYXJzZXJcIikuU3BlY1tdfSB0YWdzIC0gUGFyc2VkIHRhZ3MuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gb3duZXJJZCAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMgd2hlbiBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVQYXJhbWV0ZXJzKGNvbW1lbnQsIHRhZ3MsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbWFsZm9ybWVkID0gdGFncy5maW5kKCh0YWcpID0+IHRhZy50YWcuc3RhcnRzV2l0aChcInRlbXBsYXRlXCIpICYmIHRhZy50YWcgIT0gXCJ0ZW1wbGF0ZVwiKVxuXG4gIGlmIChtYWxmb3JtZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB2YXJpYW5jZVwiLCBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgbWFsZm9ybWVkLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHRlbXBsYXRlVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0ZW1wbGF0ZVwiKVxuXG4gIGlmICh0ZW1wbGF0ZVRhZ3MubGVuZ3RoID09IDApIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKCFvd25lcklkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidHlwZSBwYXJhbWV0ZXIgb3V0c2lkZSBhIGRlY2xhcmF0aW9uXCIsXG4gICAgbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjb21tZW50KSksIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiB0ZW1wbGF0ZVRhZ3MubWFwKCh0YWcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICghL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokL3UudGVzdCh0YWcubmFtZSkgfHwgdGFnLnR5cGUgfHwgdGFnLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCBvciBtYWxmb3JtZWQgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHRhZy5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZWFkcyBhbiBvcHRpb25hbCBjbGFzcy1sZXZlbCBKU0RvYyB0ZW1wbGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gUmVjb3JkIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IE9yZGVyZWQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NKc2RvY1R5cGVQYXJhbWV0ZXJzKG5vZGUsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY29tbWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9jayB8IHVuZGVmaW5lZH0gKi8gKFxuICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSlcblxuICBpZiAoIWNvbW1lbnQpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgYmxvY2sgPSBwYXJzZUNvbW1lbnQoYC8qJHtjb21tZW50LnZhbHVlfSovYClbMF1cblxuICByZXR1cm4ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgc3VwcG9ydGVkIEphdmFTY3JpcHQgSlNEb2Mgc2NhbGFyIHR5cGUgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc291cmNlVHlwZSAtIFNvdXJjZS1sYW5ndWFnZSB0eXBlLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgcGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW3R5cGVMb2NhdGlvbl0gLSBFeGFjdCB0eXBlIHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBsYW5ndWFnZSwgc3ViamVjdCwgbG9jYXRpb24sIHNvdXJjZSwgdHlwZUxvY2F0aW9uID0gbG9jYXRpb24sIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIpIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShsYW5ndWFnZSwgc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2UsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IEphdmFTY3JpcHQgZnVuY3Rpb24gcmV0dXJuIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc291cmNlVHlwZSAtIEpTRG9jIHR5cGUgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgcGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW3R5cGVMb2NhdGlvbl0gLSBFeGFjdCBhbm5vdGF0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVyblR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKHNvdXJjZVR5cGUgPT0gXCJ2b2lkXCIpIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShsYW5ndWFnZSwgc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gY29udmVydFR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IHNjYWxhciBrZXl3b3JkIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vb3AgfCBudWxsIHwgdW5kZWZpbmVkfSBhbm5vdGF0aW9uIC0gVHlwZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0VHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJ0eXBlc2NyaXB0XCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24pXG4gIGlmIChhbm5vdGF0aW9uLnR5cGUgIT0gXCJUU1R5cGVBbm5vdGF0aW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKGFubm90YXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGJvdW5kZWQgcmVjdXJzaXZlIFR5cGVTY3JpcHQgdmFsdWUtdHlwZSB0cmVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlfSB0eXBlTm9kZSAtIFBhcnNlci1vd25lZCB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gT3duaW5nIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHR5cGVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgY29uc3Qgc291cmNlVHlwZSA9IHR5cGVOb2RlLnR5cGUgPT0gXCJUU051bWJlcktleXdvcmRcIiA/IFwibnVtYmVyXCIgOlxuICAgIHR5cGVOb2RlLnR5cGUgPT0gXCJUU0Jvb2xlYW5LZXl3b3JkXCIgPyBcImJvb2xlYW5cIiA6IHR5cGVOb2RlLnR5cGUgPT0gXCJUU1N0cmluZ0tleXdvcmRcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoc291cmNlVHlwZSkge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShcInR5cGVzY3JpcHRcIiwgc291cmNlVHlwZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZVJlZmVyZW5jZVwiICYmIHR5cGVOb2RlLnR5cGVOYW1lLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgIXR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgdHlwZVBhcmFtZXRlcnMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyfSAqLyAodHlwZVBhcmFtZXRlcnMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgcmV0dXJuIHR5cGVWYXJpYWJsZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhcmFtZXRlci5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgcmVjb3JkTmFtZXMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb259ICovIChyZWNvcmROYW1lcy5nZXQodHlwZU5vZGUudHlwZU5hbWUubmFtZSkpXG5cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiZ2VuZXJpYyBvd25lZCByZXNvdXJjZSB0eXBlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gb3duZWRSZXNvdXJjZVR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAodHlwZU5vZGUudHlwZVBhcmFtZXRlcnMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJnZW5lcmljIHJlZmVyZW5jZSBjbGFzcyB0eXBlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgPyBvd25lZFJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGxvY2F0aW9uKVxuICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBhcmd1bWVudHNfID0gdHlwZU5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT5cbiAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycykpXG5cbiAgICByZXR1cm4gcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLnR5cGVOYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgYXJndW1lbnRzXylcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVW5pb25UeXBlXCIpIHtcbiAgICBpZiAodHlwZU5vZGUudHlwZXMubGVuZ3RoICE9IDIgfHwgdHlwZU5vZGUudHlwZXNbMV0udHlwZSAhPSBcIlRTTnVsbEtleXdvcmRcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgICBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgdHlwZU5vZGUudHlwZXMuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIlRTTnVsbEtleXdvcmRcIilcbiAgICAgICAgICA/IFwiYXJiaXRyYXJ5IHVuaW9uIHR5cGVcIlxuICAgICAgICAgIDogXCJ1bnN1cHBvcnRlZCBjb2xsZWN0aW9uIG9yIHNjYWxhciB0eXBlXCIsXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdmFsdWVOb2RlID0gdHlwZU5vZGUudHlwZXNbMF1cblxuICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUodmFsdWVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5vZGVMb2NhdGlvbih2YWx1ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlT3BlcmF0b3JcIiAmJiB0eXBlTm9kZS5vcGVyYXRvciA9PSBcInJlYWRvbmx5XCIgJiYgdHlwZU5vZGUudHlwZUFubm90YXRpb24udHlwZSA9PSBcIlRTQXJyYXlUeXBlXCIpIHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZSA9IHR5cGVOb2RlLnR5cGVBbm5vdGF0aW9uLmVsZW1lbnRUeXBlXG5cbiAgICByZXR1cm4gbGlzdFR5cGUoXG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoZWxlbWVudE5vZGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbm9kZUxvY2F0aW9uKGVsZW1lbnROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIClcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZVJlZmVyZW5jZVwiICYmIHR5cGVOb2RlLnR5cGVOYW1lLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBbXCJSZWFkb25seUFycmF5XCIsIFwiUmVhZG9ubHlNYXBcIl0uaW5jbHVkZXModHlwZU5vZGUudHlwZU5hbWUubmFtZSkpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdHlwZU5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtcyA/PyBbXVxuXG4gICAgaWYgKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUgPT0gXCJSZWFkb25seUFycmF5XCIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyc1swXSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICAgIGlmICh0eXBlTm9kZS50eXBlTmFtZS5uYW1lID09IFwiUmVhZG9ubHlNYXBcIiAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBjb25zdCBrZXlUeXBlID0gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMF0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcblxuICAgICAgaWYgKGtleVR5cGUua2luZCAhPSBcIlR5cGVSZWZlcmVuY2VcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwibWFwIGtleSB0eXBlIG90aGVyIHRoYW4gc3RyaW5nXCIsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXBUeXBlKFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyc1sxXSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiBvciBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IGZ1bmN0aW9uIHJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob29wIHwgbnVsbCB8IHVuZGVmaW5lZH0gYW5ub3RhdGlvbiAtIFJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHRSZXR1cm5UeXBlKGFubm90YXRpb24sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIWFubm90YXRpb24pIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcInR5cGVzY3JpcHRcIiwgdW5kZWZpbmVkLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHJldHVybiB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCB0eXBlTm9kZSA9IGFubm90YXRpb24udHlwZUFubm90YXRpb25cblxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVm9pZEtleXdvcmRcIikge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcInR5cGVzY3JpcHRcIiwgXCJ2b2lkXCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHR5cGVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IFR5cGVTY3JpcHQgcGFyYW1ldGVyIGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IGRlY2xhcmF0aW9uIC0gUGFyc2VyLW93bmVkIGxpc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gdHlwZVNjcmlwdFR5cGVQYXJhbWV0ZXJzKGRlY2xhcmF0aW9uLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghZGVjbGFyYXRpb24pIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gZGVjbGFyYXRpb24ucGFyYW1zLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIuY29uc3RyYWludCB8fCBwYXJhbWV0ZXIuZGVmYXVsdCB8fCBSZWZsZWN0LmdldChwYXJhbWV0ZXIsIFwiaW5cIikgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcIm91dFwiKSB8fFxuICAgICAgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImNvbnN0XCIpIHx8IHR5cGVvZiBwYXJhbWV0ZXIubmFtZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCB2YXJpYW50LCBvciBjb25zdCB0eXBlIHBhcmFtZXRlclwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7aWQ6IGAke293bmVySWR9OnR5cGU6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUGFyYW1ldGVyXCIpLCBsb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWV9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZSBiZWZvcmUgYW55IGJvZHkgZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBub2RlIC0gQmFiZWwgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gU3RhYmxlIGZ1bmN0aW9uIGlkZW50aXR5LlxuICogQHJldHVybnMge0phdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYW5vbnltb3VzIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5hc3luYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFzeW5jIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5nZW5lcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmF0b3IgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIGNvbnN0IG5hdGl2ZVR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9ICovIChub2RlLnR5cGVQYXJhbWV0ZXJzKSwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IG5vZGUudHlwZVBhcmFtZXRlcnMgPyB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJuYXRpdmUgZ2VuZXJpYyBmdW5jdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS50eXBlUGFyYW1ldGVycywgZmlsZW5hbWUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRvY3VtZW50ZWRUeXBlcyA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8ganNkb2NUeXBlcyhub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKSA6IHVuZGVmaW5lZFxuICBjb25zdCB0eXBlUGFyYW1ldGVyc18gPSBuYXRpdmVUeXBlUGFyYW1ldGVycyA/PyBkb2N1bWVudGVkVHlwZXM/LnR5cGVQYXJhbWV0ZXJzXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHR5cGVQYXJhbWV0ZXJzXyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKHBhcmFtZXRlci5vcHRpb25hbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm9wdGlvbmFsIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcblxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZFR5cGVzPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLCBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgICA6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShwYXJhbWV0ZXIudHlwZUFubm90YXRpb24sIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlXG4gICAgfSwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyID0gZG9jdW1lbnRlZFR5cGVzICYmIFsuLi5kb2N1bWVudGVkVHlwZXMucGFyYW1ldGVycy5rZXlzKCldXG4gICAgLmZpbmQoKG5hbWUpID0+ICFub2RlLnBhcmFtcy5zb21lKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlID09IFwiSWRlbnRpZmllclwiICYmIHBhcmFtZXRlci5uYW1lID09IG5hbWUpKVxuXG4gIGlmIChleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGFubm90YXRpb24gZm9yIHVua25vd24gcGFyYW1ldGVyICcke2V4dHJhRG9jdW1lbnRlZFBhcmFtZXRlcn0nYCwgbG9jYXRpb24pXG4gIGNvbnN0IHJldHVybkFubm90YXRpb24gPSBub2RlLnJldHVyblR5cGVcbiAgY29uc3QgcmV0dXJuVHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0UmV0dXJuVHlwZShkb2N1bWVudGVkVHlwZXM/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICA6IGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShyZXR1cm5Bbm5vdGF0aW9uLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5pZC5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZSxcbiAgICAuLi4odHlwZVBhcmFtZXRlcnNfID8ge3R5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVyc199IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IHNpZ25hdHVyZSAtIENvbnZlcnRlZCBzaWduYXR1cmUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIE1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSB2YWx1ZVJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYXZhaWxhYmxlIGluIHZhbHVlIHBvc2l0aW9ucy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IFNlbWFudGljIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQpIHtcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBiaW5kaW5nczogbmV3IE1hcChzaWduYXR1cmUucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICBvcmRlcmVkTWFwRGVjbGFyYXRpb25zOiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yKG5vZGUuYm9keSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSksXG4gICAgdmFsdWVSZWNvcmROYW1lc1xuICB9XG4gIGNvbnN0IGJvZHkgPSBjb252ZXJ0QmxvY2sobm9kZS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgbG9vcHMgdG8gZXhhY3QgZGVjbGFyYXRpb25zIGluc2lkZSBvbmUgbGV4aWNhbCBvd25lci5cbiAqIEFtYmlndW91cyBzYW1lLW5hbWUgZGVjbGFyYXRpb25zIHByb2R1Y2Ugbm8gZXZpZGVuY2UgYW5kIGZhaWwgZHVyaW5nIGxvb3AgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHN1YnRyZWUuXG4gKiBAcmV0dXJucyB7U2V0PG9iamVjdD59IEV4YWN0IHBhaXItaXRlcmF0ZWQgcGFyc2VyIGRlY2xhcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gb3JkZXJlZE1hcERlY2xhcmF0aW9uc0Zvcih2YWx1ZSkge1xuICAvKiogQHR5cGUge3tkZWNsYXJhdGlvbjogb2JqZWN0LCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFBhcnNlciBjYW5kaWRhdGUuXG4gICAqL1xuICBjb25zdCB2aXNpdCA9IChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoIWNhbmRpZGF0ZSB8fCB0eXBlb2YgY2FuZGlkYXRlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXMoY2FuZGlkYXRlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQoY2FuZGlkYXRlKVxuICAgIGNvbnN0IHR5cGUgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwidHlwZVwiKVxuXG4gICAgaWYgKHR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgdHlwZSA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0b3JcIikge1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJpZFwiKVxuXG4gICAgICBpZiAoUmVmbGVjdC5nZXQoaWRlbnRpZmllciwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBjYW5kaWRhdGUsXG4gICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KGlkZW50aWZpZXIsIFwibmFtZVwiKSxcbiAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwic3RhcnRcIilcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiRm9yT2ZTdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgbGVmdCA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJsZWZ0XCIpXG4gICAgICBjb25zdCByaWdodCA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJyaWdodFwiKVxuICAgICAgY29uc3QgbG9vcERlY2xhcmF0aW9ucyA9IGxlZnQgJiYgdHlwZW9mIGxlZnQgPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KGxlZnQsIFwiZGVjbGFyYXRpb25zXCIpIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBwYXR0ZXJuID0gQXJyYXkuaXNBcnJheShsb29wRGVjbGFyYXRpb25zKSAmJiBsb29wRGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxID8gUmVmbGVjdC5nZXQobG9vcERlY2xhcmF0aW9uc1swXSwgXCJpZFwiKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgZWxlbWVudHMgPSBwYXR0ZXJuICYmIHR5cGVvZiBwYXR0ZXJuID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChwYXR0ZXJuLCBcImVsZW1lbnRzXCIpIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChSZWZsZWN0LmdldChsZWZ0LCBcImtpbmRcIikgPT0gXCJjb25zdFwiICYmIFJlZmxlY3QuZ2V0KHBhdHRlcm4sIFwidHlwZVwiKSA9PSBcIkFycmF5UGF0dGVyblwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoZWxlbWVudHMpICYmIGVsZW1lbnRzLmxlbmd0aCA9PSAyICYmIGVsZW1lbnRzLmV2ZXJ5KChlbGVtZW50KSA9PiBSZWZsZWN0LmdldChlbGVtZW50LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIpICYmXG4gICAgICAgIFJlZmxlY3QuZ2V0KHJpZ2h0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgICAgbmFtZTogUmVmbGVjdC5nZXQocmlnaHQsIFwibmFtZVwiKSxcbiAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwic3RhcnRcIilcbiAgICAgIH0pXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGNhbmRpZGF0ZSkpIHtcbiAgICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB2aXNpdChpdGVtKVxuICAgICAgfSBlbHNlIHZpc2l0KGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0KHZhbHVlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBuYXRpdmUgRXJyb3Igc3ViY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQmFiZWwgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgc2VtYW50aWMgZXJyb3IuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IFNlbWFudGljIGVycm9yIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVNjcmlwdEVycm9yKG5vZGUsIGRlY2xhcmF0aW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3M/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZS5zdXBlckNsYXNzLm5hbWUgIT0gXCJFcnJvclwiIHx8XG4gICAgbm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDAgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5zdXBlckNsYXNzLCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFByZWRlY2xhcmVzIHRoZSBib3VuZGVkIG5hdGl2ZSBwcml2YXRlLWZpZWxkIHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlIGFuZCBhbGwgY2FsbGFibGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBQYXJzZXIgY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBOb21pbmFsIHR5cGVzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gcHJlZGVjbGFyZVJlZmVyZW5jZUNsYXNzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkIHx8IG5vZGUuc3VwZXJDbGFzcyB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaW1wbGVtZW50c1wiKT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBpbmhlcml0YW5jZSwgZ2VuZXJpY3MsIGRlY29yYXRpb24sIG9yIG1vZGlmaWVyXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcImNvbnN0cnVjdG9yXCIpKVxuICBjb25zdCBmaWVsZE5vZGVzID0gbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIilcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcblxuICBpZiAoY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGVzLmxlbmd0aCA9PSAwIHx8XG4gICAgZmllbGROb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggKyBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aCAhPSBub2RlLmJvZHkuYm9keS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIHByaXZhdGUgZmllbGRzLCBvbmUgY29uc3RydWN0b3IsIGFuZCBvcmRpbmFyeSBtZXRob2RzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkTm9kZXMubWFwKChtZW1iZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgbGV0IG5hbWVcbiAgICBsZXQgbmFtZUxvY2F0aW9uXG4gICAgbGV0IHR5cGVcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgICAgaWYgKG1lbWJlci50eXBlICE9IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBtZW1iZXIuY29tcHV0ZWQgfHwgbWVtYmVyLnN0YXRpYyB8fFxuICAgICAgICBtZW1iZXIuYWNjZXNzaWJpbGl0eSAhPSBcInByaXZhdGVcIiB8fCBtZW1iZXIucmVhZG9ubHkgfHwgbWVtYmVyLnZhbHVlIHx8IG1lbWJlci5vcHRpb25hbCB8fCBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgICAgIFJlZmxlY3QuZ2V0KG1lbWJlciwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChtZW1iZXIsIFwiZGVjbGFyZVwiKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBtZW1iZXIua2V5Lm5hbWVcbiAgICAgIG5hbWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihtZW1iZXIua2V5LCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgdHlwZSA9IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShtZW1iZXIudHlwZUFubm90YXRpb24sIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1lbWJlci50eXBlICE9IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJQcml2YXRlTmFtZVwiIHx8IG1lbWJlci5zdGF0aWMgfHwgbWVtYmVyLnZhbHVlIHx8XG4gICAgICAgIG1lbWJlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5pZC5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleS5pZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBtZW1iZXIubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcbiAgICAgIGNvbnN0IGdhcCA9IGNvbW1lbnQgPyBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbWVtYmVyLnN0YXJ0ID8/IDApIDogXCJcIlxuICAgICAgY29uc3QgYmxvY2sgPSBjb21tZW50Py50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSAmJiAvXlxccyokL3UudGVzdChnYXApXG4gICAgICAgID8gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgICAgIGlmICghY29tbWVudCB8fCB0YWdzLmxlbmd0aCAhPSAxIHx8IHRhZ3NbMF0ubmFtZSB8fCB0YWdzWzBdLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBtaXNzaW5nVHlwZShsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZSh0YWdzWzBdLnR5cGUsIGxhbmd1YWdlLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGNvbW1lbnRUYWdMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KSwgdGFnc1swXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBub21pbmFsTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbiwgbmFtZSwgdHlwZX0sIHtuYW1lOiBuYW1lTG9jYXRpb259KVxuICB9KVxuICBjb25zdCBvd25lZEZpZWxkcyA9IGRlY2xhcmF0aW9uLmZpZWxkcy5maWx0ZXIoKHt0eXBlfSkgPT4gdHlwZS5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIilcblxuICBpZiAob3duZWRGaWVsZHMubGVuZ3RoID09IDEpIHtcbiAgICBjb25zdCBvd25lZEZpZWxkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGQgJiB7dHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3duZWRSZXNvdXJjZVR5cGV9fSAqLyAob3duZWRGaWVsZHNbMF0pXG5cbiAgICBkZWNsYXJhdGlvbi5vd25lcnNoaXAgPSB7ZmllbGRJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChvd25lZEZpZWxkLmlkKSwga2luZDogXCJvd25lZFJlc291cmNlXCIsIHJlc291cmNlSWQ6IG93bmVkRmllbGQudHlwZS5yZXNvdXJjZUlkfVxuICB9XG5cbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2R9ICovIChjb25zdHJ1Y3Rvck5vZGVzWzBdKVxuICBjb25zdCBjb25zdHJ1Y3RvclNpZ25hdHVyZSA9IGNvbnZlcnRDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKGNvbnN0cnVjdG9yTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSlcbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogY29uc3RydWN0b3JTaWduYXR1cmUucGFyYW1ldGVyc30sIHtjb25zdHJ1Y3RvcjogY29uc3RydWN0b3JTaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZE5vZGVzLm1hcCgobWV0aG9kTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShtZXRob2ROb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgZmFsc2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSwgaWQ6IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSl9LFxuICAgIHtuYW1lOiBzaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbiAgfSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHJlZmVyZW5jZSBjbGFzcyBib2R5IGFmdGVyIGV2ZXJ5IGNsYXNzIHNpZ25hdHVyZSBpcyBjb21wbGV0ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBQYXJzZXIgY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gQ29tcGxldGUgcHJlZGVjbGFyZWQgY2xhc3Mgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSB2YWx1ZU5hbWVzIC0gTm9taW5hbCBjb25zdHJ1Y3RvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBDbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IENvbXBsZXRlZCBzZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHZhbHVlTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcyxcbiAgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmluZCgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcbiAgY29uc3QgYmFzZUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlcywgY3VycmVudENsYXNzOiBkZWNsYXJhdGlvbiwgZXJyb3JOYW1lcywgZXJyb3JzLCBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3JkcywgdmFsdWVSZWNvcmROYW1lczogdmFsdWVOYW1lc31cbiAgY29uc3QgY29uc3RydWN0b3JDb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgcmV0dXJuVHlwZToge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVSZWZlcmVuY2VcIiksIG5hbWU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInZvaWRcIil9fVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHkgPSBjb252ZXJ0QmxvY2soY29uc3RydWN0b3JOb2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAgY29uc3RydWN0b3JDb250ZXh0KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cbiAgICBjb25zdCBjb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChtZXRob2QucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IG1ldGhvZC5yZXR1cm5UeXBlfVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kTm9kZXNbaW5kZXhdLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZGVjbGFyYXRpb25cbn1cblxuLyoqXG4gKiBSZWFkcyBvbmUgY29uc3RydWN0b3Igb3IgbWV0aG9kIHNpZ25hdHVyZSB3aXRob3V0IGFkbWl0dGluZyBvdmVybG9hZHMgb3IgbW9kaWZpZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2R9IG5vZGUgLSBQYXJzZXIgbWV0aG9kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIE5vbWluYWwgdHlwZXMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uc3RydWN0b3IgLSBXaGV0aGVyIHRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX19IFNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuY29tcHV0ZWQgfHwgbm9kZS5zdGF0aWMgfHwgbm9kZS5hc3luYyB8fCBub2RlLmdlbmVyYXRvciB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgbm9kZS5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3RvciAhPSAobm9kZS5raW5kID09IFwiY29uc3RydWN0b3JcIikgfHxcbiAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLmFjY2Vzc2liaWxpdHkgIT0gbnVsbCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcmVmZXJlbmNlIGNsYXNzIGNhbGxhYmxlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRvY3VtZW50ZWQgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIlxuICAgID8ganNkb2NUeXBlcygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAobm9kZSkpLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGlmIChjb25zdHJ1Y3RvciAmJiAobm9kZS5yZXR1cm5UeXBlIHx8IGRvY3VtZW50ZWQ/LnJldHVyblR5cGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbnN0cnVjdG9yIHJldHVybiBhbm5vdGF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBtZXRob2QgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWQ/LnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuICAgIGNvbnN0IHR5cGUgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgICAgPyBjb252ZXJ0VHlwZVNjcmlwdFR5cGUocGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuICAgICAgOiBjb252ZXJ0VHlwZShkb2N1bWVudGVkVHlwZT8uc291cmNlVHlwZSwgbGFuZ3VhZ2UsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRvY3VtZW50ZWRUeXBlPy5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLCBuYW1lOiBwYXJhbWV0ZXIubmFtZSwgdHlwZX0sXG4gICAgICB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBpZiAoZG9jdW1lbnRlZCAmJiBkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtZXRob2QgSlNEb2MgcGFyYW1ldGVyIG1pc21hdGNoXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWUgPSBjb25zdHJ1Y3RvciA/IFwiY29uc3RydWN0b3JcIiA6IG5vZGUua2V5Lm5hbWVcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUua2V5LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghY29uc3RydWN0b3IgJiYgcmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIG1ldGhvZCAnJHtuYW1lfSdgLCBuYW1lTG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4ge2xvY2F0aW9uLCBuYW1lLCBuYW1lTG9jYXRpb24sIHBhcmFtZXRlcnMsIC4uLihjb25zdHJ1Y3RvciA/IHt9IDoge3JldHVyblR5cGU6IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0VHlwZVNjcmlwdFJldHVyblR5cGUobm9kZS5yZXR1cm5UeXBlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuICAgIDogY29udmVydFJldHVyblR5cGUoZG9jdW1lbnRlZD8ucmV0dXJuVHlwZT8uc291cmNlVHlwZSwgbGFuZ3VhZ2UsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsXG4gICAgICBkb2N1bWVudGVkPy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBUeXBlU2NyaXB0IHJlYWRvbmx5IGNvbnN0cnVjdG9yLXBhcmFtZXRlciByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gQWxsIG5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBTZW1hbnRpYyByZWNvcmQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmVjb3JkKG5vZGUsIGRlY2xhcmF0aW9uLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbXBsZW1lbnRzXyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaW1wbGVtZW50c1wiKVxuICBjb25zdCBtaXhpbnMgPSBSZWZsZWN0LmdldChub2RlLCBcIm1peGluc1wiKVxuXG4gIGlmICghbm9kZS5pZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImFub255bW91cyByZWNvcmQgY2xhc3NcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLnN1cGVyQ2xhc3MgfHwgKEFycmF5LmlzQXJyYXkoaW1wbGVtZW50c18pICYmIGltcGxlbWVudHNfLmxlbmd0aCkgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgUmVmbGVjdC5nZXQobm9kZSwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImRlY2xhcmVcIikgfHwgKEFycmF5LmlzQXJyYXkobWl4aW5zKSAmJiBtaXhpbnMubGVuZ3RoKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgaW5oZXJpdGFuY2UsIGRlY29yYXRpb24sIG9yIG1vZGlmaWVyXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmIChub2RlLmJvZHkuYm9keS5sZW5ndGggIT0gMSB8fCBub2RlLmJvZHkuYm9keVswXS50eXBlICE9IFwiQ2xhc3NNZXRob2RcIikge1xuICAgIGNvbnN0IGV4dHJhID0gbm9kZS5ib2R5LmJvZHlbMV0gPz8gbm9kZS5ib2R5LmJvZHlbMF0gPz8gbm9kZS5ib2R5XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGV4dHJhLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5vZGUuYm9keS5ib2R5WzBdXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoY29uc3RydWN0b3Iua2luZCAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuY29tcHV0ZWQgfHwgY29uc3RydWN0b3Iuc3RhdGljIHx8IGNvbnN0cnVjdG9yLmFzeW5jIHx8IGNvbnN0cnVjdG9yLmdlbmVyYXRvciB8fFxuICAgIGNvbnN0cnVjdG9yLmtleS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNvbnN0cnVjdG9yLmtleS5uYW1lICE9IFwiY29uc3RydWN0b3JcIiB8fCBjb25zdHJ1Y3Rvci5kZWNvcmF0b3JzPy5sZW5ndGggfHxcbiAgICBjb25zdHJ1Y3Rvci5yZXR1cm5UeXBlIHx8IGNvbnN0cnVjdG9yLnR5cGVQYXJhbWV0ZXJzIHx8IFJlZmxlY3QuZ2V0KGNvbnN0cnVjdG9yLCBcImFjY2Vzc2liaWxpdHlcIikgfHxcbiAgICBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkubGVuZ3RoICE9IDAgfHwgY29uc3RydWN0b3IuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCAhPSAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBjb25zdHJ1Y3Rvci5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIlRTUGFyYW1ldGVyUHJvcGVydHlcIiB8fCBwYXJhbWV0ZXIucmVhZG9ubHkgIT09IHRydWUgfHwgcGFyYW1ldGVyLmFjY2Vzc2liaWxpdHkgfHwgcGFyYW1ldGVyLm92ZXJyaWRlIHx8XG4gICAgICBwYXJhbWV0ZXIucGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIucGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCBvdXRzaWRlIHJlYWRvbmx5IHBhcmFtZXRlci1wcm9wZXJ0eSBwcm9maWxlXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXIucGFyYW1ldGVyXG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSxcbiAgICAgIGxvY2F0aW9uOiBmaWVsZExvY2F0aW9uLFxuICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGVTY3JpcHRUeXBlKGlkZW50aWZpZXIudHlwZUFubm90YXRpb24sIGBSZWNvcmQgZmllbGQgJyR7aWRlbnRpZmllci5uYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgICByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IEpTRG9jIGNvbnN0cnVjdG9yL3JlYWRvbmx5LWFzc2lnbm1lbnQvZnJlZXplIHJlY29yZCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIENsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBub21pbmFsIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgKEFycmF5LmlzQXJyYXkoaW1wbGVtZW50c18pICYmIGltcGxlbWVudHNfLmxlbmd0aCkgfHwgKEFycmF5LmlzQXJyYXkobWl4aW5zKSAmJiBtaXhpbnMubGVuZ3RoKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgaW5oZXJpdGFuY2Ugb3IgZGVjb3JhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBjb25zdHJ1Y3Rvci5ib2R5LmRpcmVjdGl2ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3IucGFyYW1zXG5cbiAgaWYgKHBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkpIHtcbiAgICBjb25zdCBpbnZhbGlkID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3IgcGFyYW1ldGVyXCIsIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0ganNkb2NUeXBlcygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29uc3RydWN0b3IpKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZG9jdW1lbnRlZC5yZXR1cm5UeXBlIHx8IGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplICE9IHBhcmFtZXRlcnMubGVuZ3RoIHx8IGNvbnN0cnVjdG9yLmJvZHkuYm9keS5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGggKyAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImluY29tcGxldGUgcmVjb3JkIGNvbnN0cnVjdG9yIHByb2ZpbGVcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyfSAqLyAocGFyYW1ldGVyKVxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnN0cnVjdG9yLmJvZHkuYm9keVtpbmRleF1cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWQucGFyYW1ldGVycy5nZXQoaWRlbnRpZmllci5uYW1lKVxuXG4gICAgaWYgKCFkb2N1bWVudGVkVHlwZSB8fCBzdGF0ZW1lbnQudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ub3BlcmF0b3IgIT0gXCI9XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQuY29tcHV0ZWQgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQub2JqZWN0LnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eS5uYW1lICE9IGlkZW50aWZpZXIubmFtZSB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC5uYW1lICE9IGlkZW50aWZpZXIubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCByZWFkb25seUNvbW1lbnQgPSBzdGF0ZW1lbnQubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcbiAgICBjb25zdCBnYXAgPSByZWFkb25seUNvbW1lbnQgPyBzb3VyY2Uuc2xpY2UocmVhZG9ubHlDb21tZW50LmVuZCA/PyAwLCBzdGF0ZW1lbnQuc3RhcnQgPz8gMCkgOiBcIlwiXG4gICAgY29uc3QgdGFncyA9IHJlYWRvbmx5Q29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIHJlYWRvbmx5Q29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKVxuICAgICAgPyBwYXJzZUNvbW1lbnQoYC8qJHtyZWFkb25seUNvbW1lbnQudmFsdWV9Ki9gKVswXT8udGFncyA/PyBbXVxuICAgICAgOiBbXVxuXG4gICAgaWYgKCFyZWFkb25seUNvbW1lbnQgfHwgIS9eXFxzKiQvdS50ZXN0KGdhcCkgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLnRhZyAhPSBcInJlYWRvbmx5XCIgfHxcbiAgICAgIHRhZ3NbMF0ubmFtZSB8fCB0YWdzWzBdLnR5cGUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCB3aXRob3V0IGV4YWN0IEByZWFkb25seSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgXCJqYXZhc2NyaXB0XCIsIGBSZWNvcmQgZmllbGQgJyR7aWRlbnRpZmllci5uYW1lfSdgLFxuICAgICAgICBub2RlTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGUubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZmllbGQsIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBmcmVlemUgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkuYXQoLTEpXG5cbiAgaWYgKCFmcmVlemUgfHwgZnJlZXplLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgZnJlZXplLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIgfHwgZnJlZXplLmV4cHJlc3Npb24ub3B0aW9uYWwgfHxcbiAgICBmcmVlemUuZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHwgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzWzBdLnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8XG4gICAgIWlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShmcmVlemUuZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNvbnN0cnVjdG9yIHdpdGhvdXQgZmluYWwgT2JqZWN0LmZyZWV6ZSh0aGlzKVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBjYW5vbmljYWwgc291cmNlIGZyZWV6ZSBvciB0aGUgZ2VuZXJhdGVkIGlkZW50aWZpZXItZnJlZSBpbnRyaW5zaWMgb3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DYWxsRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEZpbmFsIGNvbnN0cnVjdG9yIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgY2FsbCBvd25zIHRoZSBuYXRpdmUgcmVjb3JkLWZyZWV6ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShleHByZXNzaW9uKSB7XG4gIGNvbnN0IGNhbGxlZSA9IGV4cHJlc3Npb24uY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub3B0aW9uYWwgfHxcbiAgICBjYWxsZWUucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPSBcImZyZWV6ZVwiKSByZXR1cm4gZmFsc2VcbiAgaWYgKGNhbGxlZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNhbGxlZS5vYmplY3QubmFtZSA9PSBcIk9iamVjdFwiXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgfHwgY2FsbGVlLm9iamVjdC5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0Lm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLm9iamVjdC5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5vYmplY3QucHJvcGVydHkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjYWxsZWUub2JqZWN0Lm9iamVjdC50eXBlID09IFwiT2JqZWN0RXhwcmVzc2lvblwiICYmIGNhbGxlZS5vYmplY3Qub2JqZWN0LnByb3BlcnRpZXMubGVuZ3RoID09IDAgJiZcbiAgICBjYWxsZWUub2JqZWN0Lm9iamVjdC5leHRyYT8ucGFyZW50aGVzaXplZCA9PT0gdHJ1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBpZi9lbHNlIHRlcm1pbmFsIHNoYXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWZTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnRlc3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY29uc2VxdWVudCA9IG5vZGUuY29uc2VxdWVudC50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgID8gY29udmVydEJsb2NrKG5vZGUuY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29uc2VxdWVudENvbnRleHQpXG4gICAgOiBjb252ZXJ0QmxvY2soW25vZGUuY29uc2VxdWVudF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGVcbiAgICA/IG5vZGUuYWx0ZXJuYXRlLnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiXG4gICAgICA/IGNvbnZlcnRCbG9jayhub2RlLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYWx0ZXJuYXRlQ29udGV4dClcbiAgICAgIDogY29udmVydEJsb2NrKFtub2RlLmFsdGVybmF0ZV0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQsIG5vZGVMb2NhdGlvbihub2RlLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb24sXG4gICAgY29uc2VxdWVudCxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBibG9jay1ib2RpZWQgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuV2hpbGVTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCB3aGlsZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFdoaWxlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIndoaWxlIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihub2RlLCBcIndoaWxlXCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS50ZXN0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgQmFiZWwgcGFyc2VkIGFuIG9wZXJhdGlvbiB0aGF0IG1ha2VzIGdlbmVyYXRlZCBKYXZhU2NyaXB0LWZhbWlseSBzY2FsYXIgb3V0cHV0IHJlcXVpcmUgemVybyBjYW5vbmljYWxpemF0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHBhcnNlciBzdWJ0cmVlLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc3VidHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uIHN5bnRheC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyh2YWx1ZSwgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG4gIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIHZpc2l0ZWQuYWRkKHZhbHVlKVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFJlZmxlY3QuZ2V0KHZhbHVlLCBcIm9wZXJhdG9yXCIpID09IFwiLVwiKSByZXR1cm4gdHJ1ZVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIipcIikgcmV0dXJuIHRydWVcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnNvbWUoKFtrZXksIGNoaWxkXSkgPT5cbiAgICAhW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpICYmXG4gICAgKEFycmF5LmlzQXJyYXkoY2hpbGQpXG4gICAgICA/IGNoaWxkLnNvbWUoKGl0ZW0pID0+IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oaXRlbSwgdmlzaXRlZCkpXG4gICAgICA6IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oY2hpbGQsIHZpc2l0ZWQpKSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBwYXJzZXItb3duZWQgcmVjZWl2ZXIgcGFyZW50aGVzZXMgZW1pdHRlZCBvbmx5IGZvciBjYW5vbmljYWwgaW50ZWdlciBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN1cGVyfSByZWNlaXZlciAtIFF1YWxpZmllZC1jYWxsIHJlY2VpdmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGNhbGwgLSBPdXRlciBgdG9TdHJpbmdgIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVjZWl2ZXIgaGFzIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gaGFzQ2Fub25pY2FsWmVyb1JlY2VpdmVyV3JhcHBlcihyZWNlaXZlciwgY2FsbCkge1xuICBjb25zdCBleHRyYSA9IFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCBcImV4dHJhXCIpXG4gIGNvbnN0IGV4cHJlc3Npb25QYXJlbnRoZXNlcyA9IFtcIkJpbmFyeUV4cHJlc3Npb25cIiwgXCJMb2dpY2FsRXhwcmVzc2lvblwiLCBcIlVuYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhyZWNlaXZlci50eXBlKSA/IDEgOiAwXG4gIGNvbnN0IHdyYXBwZXJQYXJlbnRoZXNlcyA9IGV4cHJlc3Npb25QYXJlbnRoZXNlcyArIDFcbiAgY29uc3QgcHJvcGVydHkgPSBjYWxsLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiID8gY2FsbC5jYWxsZWUucHJvcGVydHkgOiB1bmRlZmluZWRcblxuICByZXR1cm4gQm9vbGVhbihleHRyYSkgJiYgdHlwZW9mIGV4dHJhID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQoZXh0cmEsIFwicGFyZW50aGVzaXplZFwiKSA9PT0gdHJ1ZSAmJlxuICAgIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVuU3RhcnRcIikgPT09IGNhbGwuc3RhcnQgJiYgdHlwZW9mIGNhbGwuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgY2FsbC5lbmQgPT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiByZWNlaXZlci5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiByZWNlaXZlci5lbmQgPT0gXCJudW1iZXJcIiAmJiBwcm9wZXJ0eT8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHR5cGVvZiBwcm9wZXJ0eS5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBwcm9wZXJ0eS5lbmQgPT0gXCJudW1iZXJcIiAmJiBjYWxsLmNhbGxlZS5zdGFydCA9PT0gY2FsbC5zdGFydCAmJlxuICAgIHJlY2VpdmVyLnN0YXJ0ID09IGNhbGwuc3RhcnQgKyB3cmFwcGVyUGFyZW50aGVzZXMgJiYgcHJvcGVydHkuc3RhcnQgPT0gcmVjZWl2ZXIuZW5kICsgd3JhcHBlclBhcmVudGhlc2VzICsgMSAmJlxuICAgIHByb3BlcnR5LmVuZCA9PSBwcm9wZXJ0eS5zdGFydCArIFwidG9TdHJpbmdcIi5sZW5ndGggJiYgY2FsbC5lbmQgPT0gcHJvcGVydHkuZW5kICsgMlxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29uc29sZS5sb2cgZW50cnktcG9pbnQgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgdGhpcyBwYXJzZWQgbW9kdWxlIGNvbnRhaW5zIGEgc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBub2RlLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYWxsID0gbm9kZS5leHByZXNzaW9uXG4gIGNvbnN0IGNhbGxlZSA9IGNhbGwuY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBjYWxsZWUub2JqZWN0Lm5hbWUgIT0gXCJjb25zb2xlXCIgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJsb2dcIiB8fFxuICAgIGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICBsZXQgYXJndW1lbnQgPSBjYWxsLmFyZ3VtZW50c1swXVxuXG4gIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgYXJndW1lbnQuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIWFyZ3VtZW50LmNhbGxlZS5jb21wdXRlZCAmJlxuICAgICFhcmd1bWVudC5jYWxsZWUub3B0aW9uYWwgJiYgYXJndW1lbnQuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09IFwidG9TdHJpbmdcIiAmJiAhYXJndW1lbnQub3B0aW9uYWwgJiYgIWFyZ3VtZW50LnR5cGVBcmd1bWVudHMgJiZcbiAgICAhYXJndW1lbnQudHlwZVBhcmFtZXRlcnMgJiYgYXJndW1lbnQuYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgaWYgKCFjYW5vbmljYWxaZXJvUmVxdWlyZWQgfHwgIWhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIoYXJndW1lbnQuY2FsbGVlLm9iamVjdCwgYXJndW1lbnQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZW50cnktcG9pbnQgcXVhbGlmaWVkIGNhbGxcIiwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuY2FsbGVlLm9iamVjdFxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLCBraW5kOiBcIlByaW50U3RhdGVtZW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFBhcnNlcyBKYXZhU2NyaXB0IG9yIFR5cGVTY3JpcHQgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2YWx1ZVJlY29yZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcyA9IFtdLCBmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgcHJvZ3JhbX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBwcm9ncmFtID8gXCJtb2R1bGVcIiA6IFwic2NyaXB0XCJ9KVxuICBjb25zdCB0b2tlbnMgPSBmaWxlLnRva2VucyA/PyBbXVxuICBjb25zdCB0b2tlbkluZGV4ID0ge2J5U3RhcnQ6IG5ldyBNYXAodG9rZW5zLm1hcCgodG9rZW4pID0+IFt0b2tlbi5zdGFydCwgdG9rZW5dKSksIHRva2Vuc31cbiAgY29uc3QgY2Fub25pY2FsWmVyb1JlcXVpcmVkID0gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyhmaWxlLnByb2dyYW0pXG5cbiAgcmVtZW1iZXJUb2tlbnMoZmlsZSwgdG9rZW5JbmRleClcbiAgY29uc3QgbnVsbENoZWNrT3B0T3V0ID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGZpbGUuY29tbWVudHM/LmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwiQHRzLW5vY2hlY2tcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmIChudWxsQ2hlY2tPcHRPdXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZGlzYWJsZWQgVHlwZVNjcmlwdCBjaGVja2luZyBkaXJlY3RpdmVcIiwgbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LnN0YXJ0ID8/IDAsXG4gICAgICBudWxsQ2hlY2tPcHRPdXQuZW5kID8/IHNvdXJjZS5sZW5ndGhcbiAgICApKVxuICB9XG4gIGlmIChmaWxlLnByb2dyYW0uZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRvcC1sZXZlbCBkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGZpbGUucHJvZ3JhbS5kaXJlY3RpdmVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gKi9cbiAgbGV0IHNlbWFudGljTm9kZXMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAoIXByb2dyYW0pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbXBvcnQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZXhwb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChub2RlLnNvdXJjZSB8fCBub2RlLmRlY2xhcmF0aW9uICYmICFbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhub2RlLmRlY2xhcmF0aW9uLnR5cGUpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnQgb3IgdW5zdXBwb3J0ZWQgZXhwb3J0ZWQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgaWYgKCFub2RlLmRlY2xhcmF0aW9uLmxlYWRpbmdDb21tZW50cyAmJiBub2RlLmxlYWRpbmdDb21tZW50cykgbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50c1xuICAgICAgICBzZW1hbnRpY05vZGVzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAobm9kZS5kZWNsYXJhdGlvbikpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgc2VtYW50aWNOb2Rlcy5wdXNoKG5vZGUpXG4gIH1cbiAgc2VtYW50aWNOb2RlcyA9IHRhc2swMzRKYXZhU2NyaXB0Tm9kZXMoc2VtYW50aWNOb2RlcywgY2FwYWJpbGl0aWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2xhc3NOb2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zdXBlckNsYXNzPy50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuc3VwZXJDbGFzcy5uYW1lID09IFwiRXJyb3JcIilcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJlxuICAgIG5vZGUuYm9keS5ib2R5LnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1Byb3BlcnR5XCIgfHwgbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1ByaXZhdGVQcm9wZXJ0eVwiKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLmlkPy5uYW1lID8/IFwiXCJcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBjbGFzc0pzZG9jVHlwZVBhcmFtZXRlcnMobm9kZSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiLFxuICAgICAgLi4uKHR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+ICh7XG4gICAgY29uc3RydWN0b3I6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ29uc3RydWN0b3JEZWNsYXJhdGlvbn0gKi8gKHt9KSxcbiAgICBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2xhc3NEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBtZXRob2RzOiBbXSwgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59ICovIChcbiAgICBuZXcgTWFwKHByb2dyYW0/LnJlY29yZHMgPz8gW10pKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBjb25zdCB2YWx1ZVJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSAqLyAoXG4gICAgbmV3IE1hcChwcm9ncmFtPy52YWx1ZVJlY29yZHMgPz8gcHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YVNjcmlwdEVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgdmFsdWVSZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBjbGFzc0RlY2xhcmF0aW9ucykgdmFsdWVSZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IHZhbHVlUmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChjbGFzc0RlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhcbiAgICBub2RlLCBjbGFzc0RlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZVxuICApKVxuICBjb25zdCBmdW5jdGlvbk5vZGVzID0gc2VtYW50aWNOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSA9PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIilcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBgZnVuY3Rpb246JHtpbmRleH1gKSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4ucHJvZ3JhbT8uZnVuY3Rpb25zID8/IFtdXS5tYXAoKFtsb2NhbE5hbWUsIGRlY2xhcmF0aW9uXSkgPT4gW2xvY2FsTmFtZSwge1xuICAgIGxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBuYW1lOiBsb2NhbE5hbWUsXG4gICAgbmFtZUxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfV0pKVxuICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe29wZXJhdGlvbnN9KSA9PiBvcGVyYXRpb25zKSkge1xuICAgIGlmICghZnVuY3Rpb25TaWduYXR1cmVzLmhhcyhvcGVyYXRpb24ubmFtZSkpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQob3BlcmF0aW9uLm5hbWUsIHtcbiAgICAgIGxvY2F0aW9uOiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG9wZXJhdGlvbi5uYW1lLFxuICAgICAgbmFtZUxvY2F0aW9uOiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHBhcmFtZXRlcnM6IG9wZXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiAoey4uLnBhcmFtZXRlciwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSl9KSksXG4gICAgICByZXR1cm5UeXBlOiBvcGVyYXRpb24ucmV0dXJuVHlwZVxuICAgIH0pXG4gIH1cbiAgZm9yIChjb25zdCBzaWduYXR1cmUgb2Ygc2lnbmF0dXJlcykgZnVuY3Rpb25TaWduYXR1cmVzLnNldChzaWduYXR1cmUubmFtZSwgc2lnbmF0dXJlKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0UmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogY29udmVydEphdmFTY3JpcHRSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVmZXJlbmNlQ2xhc3NOb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb252ZXJ0UmVmZXJlbmNlQ2xhc3NCb2RpZXMocmVmZXJlbmNlQ2xhc3NOb2Rlc1tpbmRleF0sIGNsYXNzZXNbaW5kZXhdLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcyxcbiAgICAgIHZhbHVlUmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBmdW5jdGlvblNpZ25hdHVyZXMsIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgY2Fub25pY2FsWmVyb1JlcXVpcmVkKVxuICB9XG4gIGNvbnN0IGZ1bmN0aW9ucyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlc1tpbmRleF0sIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsIHZhbHVlUmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkpXG4gIGNvbnN0IGVudHJ5Tm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlICE9IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmIG5vZGUudHlwZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLmlzRW50cnkgJiYgZW50cnlOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRvcC1sZXZlbCBzaWRlIGVmZmVjdCBvdXRzaWRlIHRoZSBzZWxlY3RlZCBlbnRyeSBtb2R1bGVcIiwgbm9kZUxvY2F0aW9uKGVudHJ5Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGVudHJ5TG9jYXRpb24gPSBlbnRyeU5vZGVzLmxlbmd0aCA9PSAwID8gbG9jYXRpb24gOiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBlbnRyeU5vZGVzWzBdLnN0YXJ0ID8/IDAsXG4gICAgZW50cnlOb2Rlcy5hdCgtMSk/LmVuZCA/PyBzb3VyY2UubGVuZ3RoXG4gIClcbiAgY29uc3QgZW50cnlCbG9jayA9IGNvbnZlcnRCbG9jayhcbiAgICBlbnRyeU5vZGVzLFxuICAgIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXM6IGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnM6IGVycm9yc0J5SWQsIGZ1bmN0aW9uczogZnVuY3Rpb25TaWduYXR1cmVzLFxuICAgICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvcihlbnRyeU5vZGVzKSwgcmVjb3JkTmFtZXMsIHJlY29yZHM6IHZhbHVlUmVjb3Jkc0J5SWQsIHZhbHVlUmVjb3JkTmFtZXN9LFxuICAgIGVudHJ5TG9jYXRpb25cbiAgKVxuXG4gIGlmICghcHJvZ3JhbSAmJiBmdW5jdGlvbnMubGVuZ3RoID09IDAgJiYgY2FwYWJpbGl0aWVzLmxlbmd0aCA9PSAwICYmICFibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeShlbnRyeUJsb2NrKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtb2R1bGUgd2l0aG91dCBhIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIHJldHVybiB7XG4gICAgZW50cnlQb2ludDoge1xuICAgICAgYm9keTogZW50cnlCbG9jayxcbiAgICAgIGtpbmQ6IFwiRW50cnlQb2ludFwiLFxuICAgICAgbG9jYXRpb246IGVudHJ5TG9jYXRpb25cbiAgICB9LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksXG4gICAgLi4uKHJlY29yZHMubGVuZ3RoID4gMCA/IHtyZWNvcmRzfSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBleGFjdCBwcm90ZWN0ZWQgTm9kZSBwcm9iZSBzdXBwb3J0IGJlZm9yZSBwb3J0YWJsZSBjb252ZXJzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119IG5vZGVzIC0gUGFyc2VkIHRvcC1sZXZlbCBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119IFBvcnRhYmxlIHN0YXRlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhU2NyaXB0Tm9kZXMobm9kZXMsIGNhcGFiaWxpdGllcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBub2Rlc1xuICBjb25zdCBmaXJzdCA9IG5vZGVzWzBdXG4gIGNvbnN0IG1hcmtlciA9IGZpcnN0Py5sZWFkaW5nQ29tbWVudHM/LnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmXG4gICAgY29tbWVudC52YWx1ZS50cmltKCkgPT0gXCJzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIG5vZGVzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgbGFuZ3VhZ2UpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24oZmlyc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGV4cGVjdGVkID0gW1xuICAgIFtcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwgXCJfX3NlbWFudGlmb2xkVGFzazAzNEZzXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCJdLFxuICAgIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCJdLFxuICAgIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZVJlc291cmNlXCJdLCBbXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSxcbiAgICBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlUmVhZFwiXSwgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBkZWNsYXJhdGlvbiBuYW1lIHVzZWQgdG8gdmVyaWZ5IG9uZSBwcm90ZWN0ZWQgc3VwcG9ydCBzdGF0ZW1lbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudCB8IHVuZGVmaW5lZH0gbm9kZSAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IERlY2xhcmVkIG5hbWUuXG4gICAqL1xuICBjb25zdCBub2RlTmFtZSA9IChub2RlKSA9PiB7XG4gICAgaWYgKCFub2RlKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJiBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSAmJiBub2RlLmRlY2xhcmF0aW9uc1swXS5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQubmFtZVxuICAgIH1cbiAgICBjb25zdCBpZCA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaWRcIilcbiAgICByZXR1cm4gaWQgJiYgdHlwZW9mIGlkID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0KGlkLCBcIm5hbWVcIikgPT0gXCJzdHJpbmdcIiA/IFJlZmxlY3QuZ2V0KGlkLCBcIm5hbWVcIikgOiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFt0eXBlLCBuYW1lXSwgaW5kZXgpID0+IG5vZGVzW2luZGV4XT8udHlwZSA9PSB0eXBlICYmIG5vZGVOYW1lKG5vZGVzW2luZGV4XSkgPT0gbmFtZSlcbiAgY29uc3QgbmV4dCA9IG5vZGVzW2V4cGVjdGVkLmxlbmd0aF1cbiAgY29uc3QgZW5kZWQgPSBuZXh0Py5sZWFkaW5nQ29tbWVudHM/LnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmXG4gICAgY29tbWVudC52YWx1ZS50cmltKCkgPT0gXCJzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kXCIpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5leHQgJiYgIWVuZGVkKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24oZmlyc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBub2Rlcy5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogSW52b2tlcyBCYWJlbCBhbmQgbm9ybWFsaXplcyBzeW50YXggZmFpbHVyZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge1wibW9kdWxlXCIgfCBcInNjcmlwdFwifSBpbnB1dC5zb3VyY2VUeXBlIC0gRXhwbGljaXQgcGFyc2VyIGdvYWwuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3BhcnNlclwiKS5QYXJzZVJlc3VsdDxpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRmlsZT59IEJhYmVsIGZpbGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlfSkge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZUJhYmVsKHNvdXJjZSwge1xuICAgICAgYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbjogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gW1wiZGVjb3JhdG9ycy1sZWdhY3lcIiwgXCJ0eXBlc2NyaXB0XCJdIDogW1wiZGVjb3JhdG9ycy1sZWdhY3lcIl0sXG4gICAgICBzb3VyY2VGaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICBzb3VyY2VUeXBlLFxuICAgICAgdG9rZW5zOiB0cnVlXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKGxhbmd1YWdlLCBlcnJvciwgYmFiZWxQYXJzZXJGYWlsdXJlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgb25seSBwYXJzZXItb3duZWQgRVNNIGltcG9ydC9leHBvcnQgZGVjbGFyYXRpb25zIGZvciBwcm9ncmFtIGFzc2VtYmx5LlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBpbnB1dC5sYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge3tpbXBvcnRzOiB7ZGVjbGFyYXRpb25Mb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGltcG9ydGVkTmFtZTogc3RyaW5nLCBpbXBvcnRlZE5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGF0aExvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc3BlY2lmaWVyOiBzdHJpbmcsIHN0ZGxpYkNhbmRpZGF0ZT86IHRydWUsIHR5cGVPbmx5OiBib29sZWFufVtdLCBleHBvcnRzOiB7ZGVjbGFyYXRpb25Mb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBleHBvcnRlZE5hbWU6IHN0cmluZywgZXhwb3J0ZWROYW1lTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2FsTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGJvb2xlYW59W119fSBQYXJzZXItb3duZWQgRVNNIG1vZHVsZSBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0SmF2YVNjcmlwdFR5cGVTY3JpcHRNb2R1bGUoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlfSkge1xuICBjb25zdCBmaWxlID0gcGFyc2VCYWJlbFNvdXJjZSh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHNvdXJjZVR5cGU6IFwibW9kdWxlXCJ9KVxuICBjb25zdCB0b2tlbnMgPSBmaWxlLnRva2VucyA/PyBbXVxuXG4gIHJlbWVtYmVyVG9rZW5zKGZpbGUsIHtieVN0YXJ0OiBuZXcgTWFwKHRva2Vucy5tYXAoKHRva2VuKSA9PiBbdG9rZW4uc3RhcnQsIHRva2VuXSkpLCB0b2tlbnN9KVxuICBjb25zdCBjb21tb25KcyA9IGZpbmRDb21tb25Kc05vZGUoZmlsZS5wcm9ncmFtKVxuXG4gIGlmIChjb21tb25KcykgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiQ29tbW9uSlMgcmVxdWlyZS9tb2R1bGUgZXhwb3J0c1wiLCBub2RlTG9jYXRpb24oY29tbW9uSnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBpbXBvcnRzID0gW11cbiAgY29uc3QgZXhwb3J0cyA9IFtdXG5cbiAgZm9yIChjb25zdCBub2RlIG9mIGZpbGUucHJvZ3JhbS5ib2R5KSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkltcG9ydERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlID0gbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcIi4vXCIpIHx8IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCIuLi9cIilcbiAgICAgIGNvbnN0IHN0ZGxpYkNhbmRpZGF0ZSA9IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZDpcIikgfHwgbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcIm5vZGU6XCIpXG5cbiAgICAgIGlmICghcmVsYXRpdmUgJiYgIXN0ZGxpYkNhbmRpZGF0ZSkge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJiYXJlIHBhY2thZ2UgaW1wb3J0XCIsIG5vZGVMb2NhdGlvbihub2RlLnNvdXJjZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA9PSAwKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzaWRlLWVmZmVjdC1vbmx5IGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoKG5vZGUuYXR0cmlidXRlcz8ubGVuZ3RoID8/IDApID4gMCB8fCAobm9kZS5hc3NlcnRpb25zPy5sZW5ndGggPz8gMCkgPiAwIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwicGhhc2VcIikpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW1wb3J0IGF0dHJpYnV0ZXMgb3IgcGhhc2VcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSAhPSBcIkltcG9ydFNwZWNpZmllclwiIHx8IHNwZWNpZmllci5pbXBvcnRlZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIHNwZWNpZmllci50eXBlLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWU6IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lLFxuICAgICAgICAgIGltcG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmltcG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllci5sb2NhbC5uYW1lLFxuICAgICAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmxvY2FsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHNwZWNpZmllcjogbm9kZS5zb3VyY2UudmFsdWUsXG4gICAgICAgICAgLi4uKCFyZWxhdGl2ZSA/IHtzdGRsaWJDYW5kaWRhdGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovICh0cnVlKX0gOiB7fSksXG4gICAgICAgICAgdHlwZU9ubHk6IG5vZGUuaW1wb3J0S2luZCA9PSBcInR5cGVcIiB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PSBcInR5cGVcIlxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSAhPSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikgY29udGludWVcbiAgICBpZiAobm9kZS5zb3VyY2UpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlLWV4cG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKG5vZGUuZXhwb3J0S2luZCA9PSBcInR5cGVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHlwZS1vbmx5IGV4cG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLnR5cGUgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInVuc3VwcG9ydGVkIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLmRlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBub2RlLmRlY2xhcmF0aW9uLmlkXG5cbiAgICAgIGlmICghaWRlbnRpZmllcikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYW5vbnltb3VzIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLmRlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGV4cG9ydHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgZXhwb3J0ZWROYW1lOiBpZGVudGlmaWVyLm5hbWUsXG4gICAgICAgIGV4cG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2FsTmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgaWYgKHNwZWNpZmllci50eXBlICE9IFwiRXhwb3J0U3BlY2lmaWVyXCIgfHwgc3BlY2lmaWVyLmxvY2FsLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIHNwZWNpZmllci50eXBlLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0S2luZCA9PSBcInR5cGVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHlwZS1vbmx5IGV4cG9ydFwiLCBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGV4cG9ydHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgZXhwb3J0ZWROYW1lOiBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSxcbiAgICAgICAgZXhwb3J0ZWROYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIuZXhwb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllci5sb2NhbC5uYW1lLFxuICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5sb2NhbCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHluYW1pYyA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwiZHluYW1pY1wiLCBuZXcgU2V0KCkpXG5cbiAgaWYgKGR5bmFtaWMpIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgXCJEeW5hbWljIGltcG9ydCBjYW5ub3QgcHJvdmUgYSBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBpZGVudGl0eS5cIiwgbm9kZUxvY2F0aW9uKGR5bmFtaWMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBzdGRsaWJCaW5kaW5ncyA9IG5ldyBTZXQoaW1wb3J0cy5maWx0ZXIoKHtzdGRsaWJDYW5kaWRhdGV9KSA9PiBzdGRsaWJDYW5kaWRhdGUpLm1hcCgoe2xvY2FsTmFtZX0pID0+IGxvY2FsTmFtZSkpXG5cbiAgaWYgKHN0ZGxpYkJpbmRpbmdzLnNpemUgPiAwKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcIm11dGF0aW9uXCIsIHN0ZGxpYkJpbmRpbmdzKVxuXG4gICAgaWYgKG11dGF0aW9uKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9TSEFET1dFRFwiLFxuICAgICAgXCJBIHBhcnNlci1wcm92ZWQgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgYmluZGluZyBjYW5ub3QgYmUgcmVhc3NpZ25lZCBvciBzaGFkb3dlZC5cIiwgbm9kZUxvY2F0aW9uKG11dGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCByZWZsZWN0aW9uID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJyZWZsZWN0aW9uXCIsIHN0ZGxpYkJpbmRpbmdzKVxuXG4gICAgaWYgKHJlZmxlY3Rpb24pIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX1JFRkxFQ1RJT05fVU5TVVBQT1JURURcIixcbiAgICAgIFwiUmVmbGVjdGl2ZSBsb29rdXAgY2Fubm90IHByZXNlcnZlIGEgcHJvdmVkIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIHN5bWJvbCBpZGVudGl0eS5cIiwgbm9kZUxvY2F0aW9uKHJlZmxlY3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtleHBvcnRzLCBpbXBvcnRzfVxufVxuXG4vKipcbiAqIEZpbmRzIHBhcnNlci1vd25lZCBkeW5hbWljLCBtdXRhdGluZywgb3IgcmVmbGVjdGl2ZSBjb25zdHJ1Y3RzIHJlbGV2YW50IHRvIGZhY2FkZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBzdWJ0cmVlLlxuICogQHBhcmFtIHtcImR5bmFtaWNcIiB8IFwibXV0YXRpb25cIiB8IFwicmVmbGVjdGlvblwifSBtb2RlIC0gUmVqZWN0ZWQgY29uc3RydWN0IGNsYXNzLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gYmluZGluZ3MgLSBQYXJzZXItcHJvdmVkIG5hdGl2ZSBmYWNhZGUgYmluZGluZ3MuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgZ3VhcmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHJlamVjdGVkIHBhcnNlciBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUodmFsdWUsIG1vZGUsIGJpbmRpbmdzLCBzZWVuID0gbmV3IFdlYWtTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICBpZiAobW9kZSA9PSBcImR5bmFtaWNcIiAmJiBub2RlLnR5cGUgPT0gXCJJbXBvcnRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBzb3VyY2VOb2RlID0gbm9kZS5zb3VyY2VcblxuICAgIGlmIChpc0ZhY2FkZU1vZHVsZVN0cmluZ05vZGUoc291cmNlTm9kZSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJkeW5hbWljXCIgJiYgbm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZSAmJiB0eXBlb2Ygbm9kZS5jYWxsZWUgPT0gXCJvYmplY3RcIiAmJlxuICAgIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJbXBvcnRcIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBBcnJheS5pc0FycmF5KG5vZGUuYXJndW1lbnRzKSA/IG5vZGUuYXJndW1lbnRzIDogW11cblxuICAgIGlmIChpc0ZhY2FkZU1vZHVsZVN0cmluZ05vZGUoYXJndW1lbnRzX1swXSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJyZWZsZWN0aW9uXCIgJiYgbm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZSAmJiB0eXBlb2Ygbm9kZS5jYWxsZWUgPT0gXCJvYmplY3RcIiAmJlxuICAgIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiYgUmVmbGVjdC5nZXQobm9kZS5jYWxsZWUsIFwibmFtZVwiKSA9PSBcImV2YWxcIikge1xuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgaWYgKG1vZGUgPT0gXCJtdXRhdGlvblwiICYmIChub2RlLnR5cGUgPT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiIHx8IG5vZGUudHlwZSA9PSBcIlVwZGF0ZUV4cHJlc3Npb25cIikpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBub2RlLnR5cGUgPT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiID8gbm9kZS5sZWZ0IDogbm9kZS5hcmd1bWVudFxuXG4gICAgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQodGFyZ2V0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGJpbmRpbmdzLmhhcyhTdHJpbmcoUmVmbGVjdC5nZXQodGFyZ2V0LCBcIm5hbWVcIikpKSkgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoaXRlbSwgbW9kZSwgYmluZGluZ3MsIHNlZW4pXG5cbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoY2hpbGQsIG1vZGUsIGJpbmRpbmdzLCBzZWVuKVxuXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIGEgQmFiZWwgc3RyaW5nIGxpdGVyYWwgZm9yIG9uZSBjYXRhbG9nLXN0eWxlIHN0ZGxpYiBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgaW1wb3J0IGFyZ3VtZW50L3NvdXJjZSBub2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGV4YWN0IGxpdGVyYWwgaXMgYSBmYWNhZGUgbW9kdWxlIGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBsaXRlcmFsID0gbm9kZS52YWx1ZVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJTdHJpbmdMaXRlcmFsXCIgJiYgdHlwZW9mIGxpdGVyYWwgPT0gXCJzdHJpbmdcIiAmJlxuICAgIChsaXRlcmFsLnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZDpcIikgfHwgbGl0ZXJhbC5zdGFydHNXaXRoKFwibm9kZTpcIikpXG59XG5cbi8qKlxuICogVGhyb3dzIG9uZSBzdGFibGUgbG9jYXRlZCBmYWNhZGUgZnJvbnRlbmQgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIFN0YWJsZSBkaWFnbm9zdGljIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIERpYWdub3N0aWMgZGV0YWlsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBQYXJzZXItb3duZWQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgY29kZSwgbWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBtZXNzYWdlfSlcbn1cblxuLyoqXG4gKiBGaW5kcyBDb21tb25KUyBjb25zdHJ1Y3RzIHRocm91Z2ggQmFiZWwgbm9kZXMgcmF0aGVyIHRoYW4gc291cmNlLXRleHQgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgc3VidHJlZS5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBndWFyZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZSB8IHVuZGVmaW5lZH0gVW5zdXBwb3J0ZWQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZmluZENvbW1vbkpzTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZVxuXG4gICAgaWYgKGNhbGxlZSAmJiB0eXBlb2YgY2FsbGVlID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQoY2FsbGVlLCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiYgUmVmbGVjdC5nZXQoY2FsbGVlLCBcIm5hbWVcIikgPT0gXCJyZXF1aXJlXCIpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gICAgfVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvYmplY3QgPSBub2RlLm9iamVjdFxuXG4gICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQob2JqZWN0LCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIFtcImV4cG9ydHNcIiwgXCJtb2R1bGVcIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KG9iamVjdCwgXCJuYW1lXCIpKSkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgaWYgKFtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRDb21tb25Kc05vZGUoaXRlbSwgc2VlbilcblxuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRDb21tb25Kc05vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgQmFiZWwncyB6ZXJvLWJhc2VkIFVURi0xNiBmYWlsdXJlIG9mZnNldCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBOYXRpdmUgQmFiZWwgcGFyc2VyIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gUmVxdWVzdGVkIHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEZhaWx1cmUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIGJhYmVsUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9IFwib2JqZWN0XCIpIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBSZWZsZWN0LmdldChlcnJvciwgXCJwb3NcIilcbiAgY29uc3QgcGFyc2VyTG9jYXRpb24gPSBSZWZsZWN0LmdldChlcnJvciwgXCJsb2NcIilcbiAgY29uc3QgbG9jYXRlZCA9IHBhcnNlckxvY2F0aW9uICYmIHR5cGVvZiBwYXJzZXJMb2NhdGlvbiA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocGFyc2VyTG9jYXRpb24sIFwiaW5kZXhcIikgOiB1bmRlZmluZWRcbiAgY29uc3Qgb2Zmc2V0ID0gTnVtYmVyLmlzU2FmZUludGVnZXIoZGlyZWN0KSA/IGRpcmVjdCA6IGxvY2F0ZWRcblxuICBpZiAodHlwZW9mIG9mZnNldCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihvZmZzZXQpIHx8IG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc291cmNlLmxlbmd0aCkge1xuICAgIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgb2Zmc2V0LCBNYXRoLm1pbihvZmZzZXQgKyAxLCBzb3VyY2UubGVuZ3RoKSlcbn1cblxuLyoqXG4gKiBBc3NvY2lhdGVzIEJhYmVsIG5vZGVzIHdpdGggdGhlaXIgcGFyc2VyIHRva2VuIHN0cmVhbSB3aXRob3V0IGxlYWtpbmcgaXQgaW50byBzZW1hbnRpYyB2YWx1ZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgLSBDdXJyZW50IHBhcnNlciB2YWx1ZS5cbiAqIEBwYXJhbSB7QmFiZWxUb2tlbkluZGV4fSB0b2tlbnMgLSBJbmRleGVkIHBhcnNlciB0b2tlbnMuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3Zpc2l0ZWRdIC0gQ3ljbGUgcHJvdGVjdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1lbWJlclRva2Vucyh2YWx1ZSwgdG9rZW5zLCB2aXNpdGVkID0gbmV3IFdlYWtTZXQoKSkge1xuICBpZiAodmlzaXRlZC5oYXModmFsdWUpKSByZXR1cm5cblxuICB2aXNpdGVkLmFkZCh2YWx1ZSlcbiAgbm9kZVRva2Vucy5zZXQodmFsdWUsIHRva2VucylcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09IFwib2JqZWN0XCIpIHJlbWVtYmVyVG9rZW5zKGl0ZW0sIHRva2VucywgdmlzaXRlZClcbiAgICB9IGVsc2UgaWYgKGNoaWxkICYmIHR5cGVvZiBjaGlsZCA9PSBcIm9iamVjdFwiKSByZW1lbWJlclRva2VucyhjaGlsZCwgdG9rZW5zLCB2aXNpdGVkKVxuICB9XG59XG4iXX0=
2487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzNFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFB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Q0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUMzRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7SUFDNUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU07SUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUs7Z0JBQUUsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtvQkFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RyxDQUFDO2FBQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtZQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RGLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VCYWJlbH0gZnJvbSBcIkBiYWJlbC9wYXJzZXJcIlxuaW1wb3J0IHtwYXJzZSBhcyBwYXJzZUNvbW1lbnR9IGZyb20gXCJjb21tZW50LXBhcnNlclwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnl9IGZyb20gXCIuLi9zZW1hbnRpYy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFycywgc2NhbGFyVHlwZX0gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCByZXF1aXJlU291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2RvY3VtZW50ZWRWYWx1ZVR5cGUsIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUsIGl0ZXJhdGlvbk9wZXJhbmRUeXBlLCBrbm93bkNhbGxSZXR1cm5UeXBlLCBsaXN0VHlwZSwgbWFwVHlwZSwgb3B0aW9uYWxUeXBlLCBvcmRlcmVkTWFwVHlwZUZyb21NYXAsIG93bmVkUmVmZXJlbmNlVHlwZSwgb3duZWRSZXNvdXJjZVR5cGUsIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCB0eXBlVmFyaWFibGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcblxuLyoqIEB0eXBlZGVmIHtOb25OdWxsYWJsZTxpbXBvcnQoXCJAYmFiZWwvcGFyc2VyXCIpLlBhcnNlUmVzdWx0PGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GaWxlPltcInRva2Vuc1wiXT5bbnVtYmVyXX0gQmFiZWxUb2tlbiAqL1xuLyoqIEB0eXBlZGVmIHt7YnlTdGFydDogTWFwPG51bWJlciwgQmFiZWxUb2tlbj4sIHRva2VuczogQmFiZWxUb2tlbltdfX0gQmFiZWxUb2tlbkluZGV4ICovXG4vKiogQHR5cGVkZWYge3tuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10sIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn19IEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZSAqL1xuLyoqIEB0eXBlZGVmIHt7YmluZGluZ3M6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+LCBjYXRjaEJpbmRpbmdOYW1lcz86IFNldDxzdHJpbmc+LCBjYXRjaEJpbmRpbmdOb2Rlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZz4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+LCBsZXhpY2FsVmFsdWVOYW1lcz86IFNldDxzdHJpbmc+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZE5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPiwgdmFsdWVSZWNvcmROYW1lczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn19IEphdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dCAqL1xuXG4vKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBCYWJlbFRva2VuSW5kZXg+fSAqL1xuY29uc3Qgbm9kZVRva2VucyA9IG5ldyBXZWFrTWFwKClcbmNvbnN0IHJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19kZWZpbmVHZXR0ZXJfX1wiLCBcIl9fZGVmaW5lU2V0dGVyX19cIiwgXCJfX2xvb2t1cEdldHRlcl9fXCIsIFwiX19sb29rdXBTZXR0ZXJfX1wiLCBcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsXG4gIFwiaGFzT3duUHJvcGVydHlcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInRvU3RyaW5nXCIsIFwidmFsdWVPZlwiXG5dKVxuY29uc3QgYmFiZWxCaW5hcnlPcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIitcIiwgXCJBZGRcIl0sXG4gIFtcIi1cIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wiKlwiLCBcIk11bHRpcGx5XCJdLFxuICBbXCI9PT1cIiwgXCJFcXVhbFwiXSxcbiAgW1wiIT09XCIsIFwiTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZSBsb2NhdGlvbiBmb3IgYSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gbm9kZSAtIEJhYmVsIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBOb3JtYWxpemVkIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAodHlwZW9mIG5vZGUuc3RhcnQgIT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygbm9kZS5lbmQgIT0gXCJudW1iZXJcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQmFiZWwgb21pdHRlZCBzb3VyY2Ugb2Zmc2V0cyBmb3IgJHtub2RlLnR5cGV9LmApXG4gIH1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBub2RlLnN0YXJ0LCBub2RlLmVuZClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVyIHNwZWxsaW5nIHJhdGhlciB0aGFuIGEgdHJhaWxpbmcgVHlwZVNjcmlwdCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllcn0gbm9kZSAtIFBhcnNlciBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gSWRlbnRpZmllciBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIpIHRocm93IG5ldyBFcnJvcihcIkJhYmVsIG9taXR0ZWQgYW4gaWRlbnRpZmllciBzdGFydCBvZmZzZXQuXCIpXG4gIGNvbnN0IHRva2VuID0gbm9kZVRva2Vucy5nZXQobm9kZSk/LmJ5U3RhcnQuZ2V0KG5vZGUuc3RhcnQpXG5cbiAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlLmxhYmVsICE9IFwibmFtZVwiKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdGhlIGlkZW50aWZpZXIgdG9rZW4gZm9yICcke25vZGUubmFtZX0nLmApXG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgdG9rZW4uc3RhcnQsIHRva2VuLmVuZClcbn1cblxuLyoqXG4gKiBMb2NhdGVzIG9uZSBCYWJlbCB0b2tlbiB3aXRoaW4gcGFyc2VyLW5vZGUgYm91bmRhcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG93bmVyIC0gVG9rZW4tb3duaW5nIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gRXhhY3QgdG9rZW4gc3BlbGxpbmcuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRPZmZzZXQgLSBJbmNsdXNpdmUgYm91bmRhcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kT2Zmc2V0IC0gRXhjbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2VuTG9jYXRpb24ob3duZXIsIHZhbHVlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHRva2VucyA9IG5vZGVUb2tlbnMuZ2V0KG93bmVyKT8udG9rZW5zID8/IFtdXG4gIGxldCBsb3cgPSAwXG4gIGxldCBoaWdoID0gdG9rZW5zLmxlbmd0aFxuXG4gIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKVxuXG4gICAgaWYgKHRva2Vuc1ttaWRkbGVdLnN0YXJ0IDwgc3RhcnRPZmZzZXQpIGxvdyA9IG1pZGRsZSArIDFcbiAgICBlbHNlIGhpZ2ggPSBtaWRkbGVcbiAgfVxuICBsZXQgdG9rZW5cblxuICBmb3IgKGxldCBpbmRleCA9IGxvdzsgaW5kZXggPCB0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1tpbmRleF0uc3RhcnQgPCBlbmRPZmZzZXQ7IGluZGV4KyspIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSB0b2tlbnNbaW5kZXhdXG5cbiAgICBpZiAoY2FuZGlkYXRlLmVuZCA8PSBlbmRPZmZzZXQgJiYgKGNhbmRpZGF0ZS52YWx1ZSA9PSB2YWx1ZSB8fCBjYW5kaWRhdGUudHlwZS5sYWJlbCA9PSB2YWx1ZSkpIHtcbiAgICAgIHRva2VuID0gY2FuZGlkYXRlXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcihgQmFiZWwgb21pdHRlZCB0b2tlbiAnJHt2YWx1ZX0nIGJldHdlZW4gJHtzdGFydE9mZnNldH0gYW5kICR7ZW5kT2Zmc2V0fS5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBhIGNvbW1lbnQtcGFyc2VyIHRva2VuIGluc2lkZSBhIEJhYmVsLW93bmVkIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSBjb21tZW50IC0gQmFiZWwgZG9jIGNvbW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWN9IHRhZyAtIFBhcnNlZCBkb2MgdGFnLlxuICogQHBhcmFtIHtcIm5hbWVcIiB8IFwidHlwZVwifSBmaWVsZCAtIFRva2VuIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIGZpZWxkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxpbmUgPSB0YWcuc291cmNlWzBdXG5cbiAgaWYgKHR5cGVvZiBjb21tZW50LnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgIWxpbmUpIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gc291cmNlIHRva2VuLmApXG5cbiAgbGV0IGxpbmVTdGFydCA9IGNvbW1lbnQuc3RhcnRcblxuICBmb3IgKGxldCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmUubnVtYmVyOyBsaW5lTnVtYmVyKyspIHtcbiAgICB3aGlsZSAobGluZVN0YXJ0IDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnRdICE9IFwiXFxuXCIpIGxpbmVTdGFydCsrXG4gICAgaWYgKHNvdXJjZVtsaW5lU3RhcnRdID09IFwiXFxyXCIgJiYgc291cmNlW2xpbmVTdGFydCArIDFdID09IFwiXFxuXCIpIGxpbmVTdGFydCArPSAyXG4gICAgZWxzZSBsaW5lU3RhcnQrK1xuICB9XG5cbiAgY29uc3Qgb3JkZXJlZEZpZWxkcyA9IFtcInN0YXJ0XCIsIFwiZGVsaW1pdGVyXCIsIFwicG9zdERlbGltaXRlclwiLCBcInRhZ1wiLCBcInBvc3RUYWdcIiwgXCJ0eXBlXCIsIFwicG9zdFR5cGVcIiwgXCJuYW1lXCJdXG4gIGNvbnN0IGZpZWxkSW5kZXggPSBvcmRlcmVkRmllbGRzLmluZGV4T2YoZmllbGQpXG4gIGxldCBzdGFydCA9IGxpbmVTdGFydCArIG9yZGVyZWRGaWVsZHMuc2xpY2UoMCwgZmllbGRJbmRleCkucmVkdWNlKChsZW5ndGgsIGtleSkgPT5cbiAgICBsZW5ndGggKyBsaW5lLnRva2Vuc1svKiogQHR5cGUge2tleW9mIHR5cGVvZiBsaW5lLnRva2Vuc30gKi8gKGtleSldLmxlbmd0aCwgMClcbiAgY29uc3QgdG9rZW4gPSBsaW5lLnRva2Vuc1tmaWVsZF1cbiAgbGV0IGxlbmd0aCA9IHRva2VuLmxlbmd0aFxuXG4gIGlmIChmaWVsZCA9PSBcInR5cGVcIiAmJiB0YWcudHlwZSkge1xuICAgIGNvbnN0IG5lc3RlZE9mZnNldCA9IHRva2VuLmluZGV4T2YodGFnLnR5cGUpXG5cbiAgICBpZiAobmVzdGVkT2Zmc2V0IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBDb21tZW50IHBhcnNlciBvbWl0dGVkIHRoZSBAJHt0YWcudGFnfSB0eXBlIHNwZWxsaW5nLmApXG4gICAgc3RhcnQgKz0gbmVzdGVkT2Zmc2V0XG4gICAgbGVuZ3RoID0gdGFnLnR5cGUubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBzdGFydCwgc3RhcnQgKyBsZW5ndGgpXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGBNYXBgIHJlc29sdmVzIHRvIHRoZSBuYXRpdmUgaW50cmluc2ljIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgbmF0aXZlIE1hcCBjb25zdHJ1Y3Rpb24gaXMgdW5zaGFkb3dlZC5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpIHtcbiAgcmV0dXJuICFjb250ZXh0LmJpbmRpbmdzLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcz8uaGFzKFwiTWFwXCIpICYmXG4gICAgIWNvbnRleHQuZnVuY3Rpb25zLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC5lcnJvck5hbWVzLmhhcyhcIk1hcFwiKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9ufSBub2RlIC0gQmFiZWwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gW2NvbnRleHRdIC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBbZXhwZWN0ZWRUeXBlXSAtIEV4cGxpY2l0IGNvbnRleHR1YWwgdmFsdWUgdHlwZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZXNlcnZlT3B0aW9uYWxdIC0gV2hldGhlciBhbiBvcHRpb25hbCBpZGVudGlmaWVyIHJlbWFpbnMgd3JhcHBlZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzOiBuZXcgTWFwKCksIGVycm9yczogbmV3IE1hcCgpLCBlcnJvck5hbWVzOiBuZXcgTWFwKCksIGZ1bmN0aW9uczogbmV3IE1hcCgpLCByZWNvcmROYW1lczogbmV3IE1hcCgpLCByZWNvcmRzOiBuZXcgTWFwKCksIHZhbHVlUmVjb3JkTmFtZXM6IG5ldyBNYXAoKX0sIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLm5hbWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bmRlZmluZWQgYWJzZW5jZSB2YWx1ZVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxOb25lXCIpLCBsb2NhdGlvbn0sIHthYnNlbmNlOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUpXG4gICAgfSwge3NvbWU6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibnVsbCBvdXRzaWRlIGFuIGV4cGxpY2l0IG9wdGlvbmFsIGNvbnRleHRcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRTTm9uTnVsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgaWYgKGxhbmd1YWdlICE9IFwidHlwZXNjcmlwdFwiIHx8IGV4cHJlc3Npb24ua2luZCAhPSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1udWxsIGFzc2VydGlvbiBvdGhlciB0aGFuIE1hcC5nZXQgcmVzdWx0XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBleHByZXNzaW9uLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICByZXR1cm4gZXhwcmVzc2lvblxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGUubmFtZX0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBpZiAoIXByZXNlcnZlT3B0aW9uYWwgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kOiBpZGVudGlmaWVyfSwge3Vud3JhcDogbG9jYXRpb259KVxuICAgIH1cblxuICAgIHJldHVybiBpZGVudGlmaWVyXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIikge1xuICAgIGlmICghY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWNlaXZlciBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSxcbiAgICAgIHtyZWNlaXZlcjogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk51bWVyaWNMaXRlcmFsXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5vZGUudmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT0gXCJib29sZWFuXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIGJvb2xlYW4gbGl0ZXJhbCB2YWx1ZVwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAhaGFzT25seVVuaWNvZGVTY2FsYXJzKG5vZGUudmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkFycmF5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZWxlbWVudHMgPSBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBhcnJheSBob2xlXCIsIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhcnJheSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oZWxlbWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZWxlbWVudHMsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLCBsb2NhdGlvbn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTmV3RXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PSBcIk1hcFwiKSB7XG4gICAgaWYgKCFuYXRpdmVNYXBBdmFpbGFibGUoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzaGFkb3dlZCBNYXAgY29uc3RydWN0b3JcIiwgaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCB1c2VkIGFzIGEgc3RydWN0dXJhbCByZWNvcmQgc3Vic3RpdHV0ZVwiLCBsb2NhdGlvbilcbiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5hcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgb3IgaW52YWxpZCBNYXAgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpbml0aWFsaXplciA9IG5vZGUuYXJndW1lbnRzWzBdXG5cbiAgICBpZiAoIWluaXRpYWxpemVyKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzOiBbXSxcbiAgICAgIGtpbmQ6IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgICAgPyAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKVxuICAgICAgICA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExpdGVyYWxcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgaW5pdGlhbGl6ZXIudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBpbml0aWFsaXplci50eXBlLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbGl6ZXIudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwIGluaXRpYWxpemVyIG90aGVyIHRoYW4gYW4gZW50cnkgYXJyYXlcIiwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVudHJpZXMgPSBpbml0aWFsaXplci5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgbWFwIGluaXRpYWxpemVyXCIsIGFycmF5SG9sZUxvY2F0aW9uKGluaXRpYWxpemVyLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIHNwcmVhZFwiLCBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlICE9IFwiQXJyYXlFeHByZXNzaW9uXCIgfHwgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwIGVudHJ5IG90aGVyIHRoYW4gYSBrZXkvdmFsdWUgcGFpclwiLCBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbGVtZW50LmVsZW1lbnRzXG5cbiAgICAgIGlmICgha2V5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBrZXlcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCB2YWx1ZVwiLCBhcnJheUhvbGVMb2NhdGlvbihlbGVtZW50LCAxLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCB2YWx1ZS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IHNwcmVhZCA9IGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiID8ga2V5IDogdmFsdWVcblxuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGVudHJ5IHNwcmVhZFwiLCBub2RlTG9jYXRpb24oc3ByZWFkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChrZXkudHlwZSAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGtleSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBrZXlFeHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGtleSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICApXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBFbnRyeVwiKSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKHZhbHVlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdmFsdWVUeXBlKVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IGtleUV4cHJlc3Npb24ubG9jYXRpb24sXG4gICAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGVsZW1lbnQsIFwiLFwiLCBrZXkuZW5kID8/IGVsZW1lbnQuc3RhcnQgPz8gMCwgdmFsdWUuc3RhcnQgPz8gZWxlbWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVudHJpZXMsXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMobm9kZS5jYWxsZWUubmFtZSkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSAqLyAoY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKSlcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSlcbiAgICAgIH0pXG4gICAgICBjb25zdCBjbGFzc0xvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgICByZWZlcmVuY2U6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIlxuICAgICAgICAgID8gb3duZWRSZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKVxuICAgICAgICAgIDogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbil9LCB7Y2xhc3M6IGNsYXNzTG9jYXRpb259KVxuICAgIH1cbiAgICBjb25zdCBzb3VyY2VBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHM/LnBhcmFtcyA/PyBub2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXNcbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gc291cmNlQXJndW1lbnRzPy5tYXAoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gKi8gYXJndW1lbnQpID0+IGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShcbiAgICAgIGFyZ3VtZW50LFxuICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVyc1xuICAgICkpID8/IChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgJiYgZXhwZWN0ZWRUeXBlLmRlY2xhcmF0aW9uSWQgPT0gZGVjbGFyYXRpb24uaWQgPyBleHBlY3RlZFR5cGUuYXJndW1lbnRzIDogdW5kZWZpbmVkKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgdHlwZUFyZ3VtZW50cywgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IGFyZ3VtZW50c18sXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY29yZDogcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eS5pZFxuICAgICAgaWYgKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBub2RlLnByb3BlcnR5XG4gICAgICBpZiAoIXByb3BlcnR5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJwcml2YXRlIHJlZmVyZW5jZS1jbGFzcyBmaWVsZCBhY2Nlc3NcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgbm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibWVzc2FnZVwiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUub2JqZWN0Lm5hbWUpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5vYmplY3QsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IG5vZGUub2JqZWN0Lm5hbWV9LCB7XG4gICAgICAgICAgbmFtZTogcmVjZWl2ZXJMb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIGlmIChrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY29tcHV0ZWQgcmVjb3JkIG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS5wcm9wZXJ0eS50eXBlLCBsb2NhdGlvbilcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24obm9kZS5wcm9wZXJ0eSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgfSwge1xuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBcIltcIiwgbm9kZS5vYmplY3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5wcm9wZXJ0eS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBbXCJsZW5ndGhcIiwgXCJzaXplXCJdLmluY2x1ZGVzKG5vZGUucHJvcGVydHkubmFtZSkpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGZpZWxkOiBub2RlLnByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBjb2xsZWN0aW9uS2luZDogLyoqIEB0eXBlIHtcImxpc3RcIiB8IFwibWFwXCJ9ICovIChub2RlLnByb3BlcnR5Lm5hbWUgPT0gXCJsZW5ndGhcIiA/IFwibGlzdFwiIDogXCJtYXBcIiksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtvcGVyYXRvcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRlbXBsYXRlTGl0ZXJhbFwiKSB7XG4gICAgaWYgKG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW119ICovXG4gICAgICBjb25zdCBvcmRlcmVkID0gW11cblxuICAgICAgbm9kZS5xdWFzaXMuZm9yRWFjaCgocXVhc2ksIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcXVhc2kudmFsdWUuY29va2VkICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhxdWFzaS52YWx1ZS5jb29rZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBub2RlTG9jYXRpb24ocXVhc2ksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1YXNpTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocXVhc2ksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgICAgaWYgKHF1YXNpLnZhbHVlLmNvb2tlZC5sZW5ndGggPiAwKSBvcmRlcmVkLnB1c2god2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb246IHF1YXNpTG9jYXRpb24sIHZhbHVlOiBxdWFzaS52YWx1ZS5jb29rZWR9LCB7bGl0ZXJhbDogcXVhc2lMb2NhdGlvbn0pKVxuICAgICAgICBpZiAoaW5kZXggPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgIG9yZGVyZWQucHVzaChjb252ZXJ0RXhwcmVzc2lvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9ufSAqLyAobm9kZS5leHByZXNzaW9uc1tpbmRleF0pLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2NhbGFyVHlwZShcInN0cmluZ1wiKSkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAob3JkZXJlZC5sZW5ndGggPT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludGVycG9sYXRlZCBzdHJpbmdcIiwgbG9jYXRpb24pXG5cbiAgICAgIGxldCBsb3dlcmVkID0gb3JkZXJlZFswXVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygb3JkZXJlZC5zbGljZSgxKSkge1xuICAgICAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCaW5hcnlFeHByZXNzaW9uXCIpLFxuICAgICAgICAgIGxlZnQ6IGxvd2VyZWQsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmlnaHQ6IHBhcnRcbiAgICAgICAgfSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKFwiU3RyaW5nQ29uY2F0XCIpKVxuXG4gICAgICAgIGxvd2VyZWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsb3dlcmVkXG4gICAgfVxuXG4gICAgY29uc3QgcXVhc2kgPSBub2RlLnF1YXNpc1swXVxuXG4gICAgaWYgKHR5cGVvZiBxdWFzaS52YWx1ZS5jb29rZWQgIT0gXCJzdHJpbmdcIiB8fCAhaGFzT25seVVuaWNvZGVTY2FsYXJzKHF1YXNpLnZhbHVlLmNvb2tlZCkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogcXVhc2kudmFsdWUuY29va2VkfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFsdGVybmF0ZTogY29udmVydEV4cHJlc3Npb24obm9kZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25zZXF1ZW50OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgYWx0ZXJuYXRlOiBub2RlTG9jYXRpb24obm9kZS5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29sb246IHRva2VuTG9jYXRpb24obm9kZSwgXCI6XCIsIG5vZGUuY29uc2VxdWVudC5lbmQgPz8gbm9kZS50ZXN0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUuYWx0ZXJuYXRlLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uZGl0aW9uOiBub2RlTG9jYXRpb24obm9kZS50ZXN0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbnNlcXVlbnQ6IG5vZGVMb2NhdGlvbihub2RlLmNvbnNlcXVlbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCI/XCIsIG5vZGUudGVzdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLmNvbnNlcXVlbnQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgW1wiIVwiLCBcIi1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICBjb25zdCBvcGVyYW5kID0gY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLnN0YXJ0ID8/IDAsIG5vZGUuYXJndW1lbnQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSwgbm9kZS5vcGVyYXRvciA9PSBcIiFcIiA/IFwiTm90XCIgOiBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJMb2dpY2FsRXhwcmVzc2lvblwiICYmIFtcIiYmXCIsIFwifHxcIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCImJlwiID8gXCJBbmRcIiA6IFwiT3JcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIG5vZGUub3BlcmF0b3IgPT0gXCIhPT1cIiAmJiBub2RlLmxlZnQudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIG5vZGUucmlnaHQudHlwZSA9PSBcIk51bGxMaXRlcmFsXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIClcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbElzUHJlc2VudFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIGJhYmVsQmluYXJ5T3BlcmF0aW9ucy5oYXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS5sZWZ0LnR5cGUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgbGVmdCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgY29uc3QgcmlnaHQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0XG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGJhYmVsQmluYXJ5T3BlcmF0aW9ucy5nZXQobm9kZS5vcGVyYXRvcikpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgW1wiPT1cIiwgXCIhPVwiXS5pbmNsdWRlcyhub2RlLm9wZXJhdG9yKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGNvZXJjaXZlIGVxdWFsaXR5ICR7bm9kZS5vcGVyYXRvcn1gLCBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBpZiAobm9kZS5vcHRpb25hbCB8fCBub2RlLmNhbGxlZS5vcHRpb25hbCB8fCBub2RlLnR5cGVBcmd1bWVudHMgfHwgbm9kZS50eXBlUGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm9wdGlvbmFsIG9yIGdlbmVyaWMgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG4gICAgY29uc3QgYXJndW1lbnRzXyA9IG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2lnbmF0dXJlPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSxcbiAgICAgICAgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2Uoc2lnbmF0dXJlLCBpbmRleCkpXG4gICAgfSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogbm9kZS5jYWxsZWUubmFtZSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgY2FsbGVlOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmICFub2RlLm9wdGlvbmFsICYmICFub2RlLnR5cGVBcmd1bWVudHMgJiYgIW5vZGUudHlwZVBhcmFtZXRlcnMgJiZcbiAgICBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJiAhbm9kZS5jYWxsZWUub3B0aW9uYWwgJiZcbiAgICBub2RlLmNhbGxlZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmNhbGxlZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uPy5tZXRob2RzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbWV0aG9kTmFtZSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgbWV0aG9kPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSlcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbixcbiAgICAgICAgbWV0aG9kOiBtZXRob2Q/LmlkID8/IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUsXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KX0sXG4gICAgICB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09IFwiZ2V0XCIpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJNYXAuZ2V0IGFyZ3VtZW50IGNvdW50XCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGtleSA9IG5vZGUuYXJndW1lbnRzWzBdXG5cbiAgICBpZiAoa2V5LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwga2V5LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwga2V5LnR5cGUsIG5vZGVMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuY2FsbGVlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2V5OiBjb252ZXJ0RXhwcmVzc2lvbihrZXksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExvb2t1cEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICB9LCB7b3BlcmF0b3I6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFJlc29sdmVzIG9ubHkgZXhwcmVzc2lvbiByZXN1bHQgdHlwZXMgYWxyZWFkeSBlc3RhYmxpc2hlZCBieSBleHBsaWNpdCBtb2R1bGVcbiAqIHNpZ25hdHVyZXMgYW5kIGNvbGxlY3Rpb24gYmluZGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9ufSBub2RlIC0gUGFyc2VyLW93bmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHJlc3VsdCB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmIChub2RlLnR5cGUgPT0gXCJUU05vbk51bGxFeHByZXNzaW9uXCIpIHJldHVybiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUuZXhwcmVzc2lvbiwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZS5jYWxsZWUubmFtZSlcblxuICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT5cbiAgICAgIGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIlxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSkpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnZhbHVlUmVjb3JkTmFtZXMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoZGVjbGFyYXRpb24/LmlkKSB7XG4gICAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCxcbiAgICAgICAga2luZDogZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kID09IFwib3duZWRSZXNvdXJjZVwiID8gXCJPd25lZFJlZmVyZW5jZVR5cGVcIiA6IFwiUmVmZXJlbmNlVHlwZVwifVxuICAgICAgY29uc3Qgc291cmNlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMgPz8gbm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zXG4gICAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gc291cmNlQXJndW1lbnRzPy5tYXAoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gKi8gYXJndW1lbnQpID0+XG4gICAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLFxuICAgICAgICAgIGNvbnRleHQudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgKSlcblxuICAgICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWNvcmRUeXBlXCIsIC4uLih0eXBlQXJndW1lbnRzID8ge2FyZ3VtZW50czogdHlwZUFyZ3VtZW50c30gOiB7fSl9XG4gICAgfVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzPy5pZCkge1xuICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogY29udGV4dC5jdXJyZW50Q2xhc3MuaWQsIGtpbmQ6IFwiUmVmZXJlbmNlVHlwZVwifVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmNhbGxlZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY2VpdmVyPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZVxuXG4gICAgICByZXR1cm4gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlci5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IG1ldGhvZE5hbWUpPy5yZXR1cm5UeXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikge1xuICAgICAgY29uc3QgbmFtZSA9IG5vZGUucHJvcGVydHkuaWQubmFtZVxuXG4gICAgICByZXR1cm4gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09IG5hbWUpPy50eXBlXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IHJlY2VpdmVyID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmRzLmdldChyZWNlaXZlci5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG1lbWJlck5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWVcbiAgICBjb25zdCBpbmRleCA9IGRlY2xhcmF0aW9uPy5maWVsZHMuZmluZEluZGV4KChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBtZW1iZXJOYW1lKSA/PyAtMVxuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlci5hcmd1bWVudHMsIGluZGV4KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS5lbGVtZW50VHlwZVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09IFwiZ2V0XCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmNhbGxlZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSB2YWx1ZSB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBmcm9udGVuZCdzIGltcGxpY2l0IG9wdGlvbmFsLWJpbmRpbmcgdW53cmFwLlxuICogU2VtYW50aWMgdmFsaWRhdGlvbiBzZXBhcmF0ZWx5IHByb3ZlcyB0aGF0IHRoZSB1bndyYXAgb2NjdXJzIG9ubHkgb24gYSBwcmVzZW50IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9ufSBub2RlIC0gUGFyc2VyLW93bmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IENvbnZlcnRlZCB2YWx1ZSB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgdHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiB0eXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyB0eXBlLnZhbHVlVHlwZSA6IHR5cGVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RhYmxlIHBhcnNlci1ib3VuZGVkIGxvY2F0aW9uIGZvciBvbmUgYWJzZW50IGFycmF5IGVsZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5BcnJheUV4cHJlc3Npb259IG5vZGUgLSBBcnJheSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gTWlzc2luZyBlbGVtZW50IGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gSG9sZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXJyYXlIb2xlTG9jYXRpb24obm9kZSwgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgcHJldmlvdXMgPSBub2RlLmVsZW1lbnRzLnNsaWNlKDAsIGluZGV4KS5maW5kTGFzdCgoZWxlbWVudCkgPT4gZWxlbWVudCAhPSBudWxsKVxuICBjb25zdCBuZXh0ID0gbm9kZS5lbGVtZW50cy5zbGljZShpbmRleCArIDEpLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3Qgc3RhcnQgPSBwcmV2aW91cz8uZW5kID8/IChub2RlLnN0YXJ0ID8/IDApICsgMVxuICBjb25zdCBlbmQgPSBuZXh0Py5zdGFydCA/PyBNYXRoLm1heChzdGFydCArIDEsIChub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoKSAtIDEpXG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgc3RhcnQsIE1hdGgubWF4KHN0YXJ0ICsgMSwgTWF0aC5taW4oZW5kLCBzb3VyY2UubGVuZ3RoKSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4obm9kZS5hcmd1bWVudCA/IHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihcbiAgICAgIG5vZGUuYXJndW1lbnQsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgY29udGV4dCxcbiAgICAgIGNvbnRleHQucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJiBjb250ZXh0LnJldHVyblR5cGUubmFtZSA9PSBcInZvaWRcIiA/IHVuZGVmaW5lZCA6IGNvbnRleHQucmV0dXJuVHlwZVxuICAgICl9IDoge30pLFxuICAgIGtpbmQ6IFwiUmV0dXJuU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIG9yIHByaXZhdGUtZmllbGQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS50eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XG4gICAgaWYgKCFbXCJsZXRcIiwgXCJjb25zdFwiXS5pbmNsdWRlcyhub2RlLmtpbmQpIHx8IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGAke25vZGUua2luZH0gZGVjbGFyYXRpb25gLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBkZWNsYXJhdG9yID0gbm9kZS5kZWNsYXJhdGlvbnNbMF1cbiAgICBjb25zdCBkZWNsYXJhdG9yTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgZGVjbGFyYXRvci5pZC50eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgaWYgKCFkZWNsYXJhdG9yLmluaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bmluaXRpYWxpemVkIGRlY2xhcmF0aW9uXCIsIGRlY2xhcmF0b3JMb2NhdGlvbilcblxuICAgIGxldCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb24sIGBMb2NhbCAnJHtkZWNsYXJhdG9yLmlkLm5hbWV9J2AsIGRlY2xhcmF0b3JMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgICAgIDogbG9jYWxKYXZhU2NyaXB0VHlwZShub2RlLCBkZWNsYXJhdG9yLmlkLm5hbWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgICBpZiAobm9kZS5raW5kID09IFwiY29uc3RcIiAmJiB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgJiYgY29udGV4dC5vcmRlcmVkTWFwRGVjbGFyYXRpb25zPy5oYXMoZGVjbGFyYXRvcikgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC50eXBlID09IFwiTmV3RXhwcmVzc2lvblwiICYmIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS5uYW1lID09IFwiTWFwXCIgJiYgbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpKSB7XG4gICAgICB0eXBlID0gb3JkZXJlZE1hcFR5cGVGcm9tTWFwKHR5cGUsIGRlY2xhcmF0b3JMb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgaW5pdGlhbGl6ZXI6IGNvbnZlcnRFeHByZXNzaW9uKGRlY2xhcmF0b3IuaW5pdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHR5cGUpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTG9jYWxEZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbXV0YWJsZTogbm9kZS5raW5kID09IFwibGV0XCIsXG4gICAgICBuYW1lOiBkZWNsYXJhdG9yLmlkLm5hbWUsXG4gICAgICB0eXBlXG4gICAgfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGRlY2xhcmF0b3IuaWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oZGVjbGFyYXRvciwgXCI9XCIsIGRlY2xhcmF0b3IuaWQuZW5kID8/IGRlY2xhcmF0b3Iuc3RhcnQgPz8gMCwgZGVjbGFyYXRvci5pbml0LnN0YXJ0ID8/IGRlY2xhcmF0b3IuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcblxuICAgIGNvbnRleHQuYmluZGluZ3Muc2V0KGRlY2xhcmF0b3IuaWQubmFtZSwgdHlwZSlcbiAgICByZXR1cm4gc2VtYW50aWNcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgJiYgbm9kZS5leHByZXNzaW9uLnR5cGUgPT0gXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IG5vZGUuZXhwcmVzc2lvblxuICAgIGNvbnN0IHRhcmdldExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChhc3NpZ25tZW50Lm9wZXJhdG9yICE9IFwiPVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBhc3NpZ25tZW50ICR7YXNzaWdubWVudC5vcGVyYXRvcn1gLCBsb2NhdGlvbilcbiAgICBpZiAoYXNzaWdubWVudC5sZWZ0LnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIWFzc2lnbm1lbnQubGVmdC5jb21wdXRlZCAmJlxuICAgICAgYXNzaWdubWVudC5sZWZ0Lm9iamVjdC50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllciB8IHVuZGVmaW5lZH0gKi9cbiAgICAgIGxldCBwcm9wZXJ0eVxuXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgJiYgYXNzaWdubWVudC5sZWZ0LnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSBwcm9wZXJ0eSA9IGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS5pZFxuICAgICAgaWYgKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSBwcm9wZXJ0eSA9IGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eVxuICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkIGFzc2lnbm1lbnRcIiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IHByb3BlcnR5Lm5hbWUpXG5cbiAgICAgIGlmICghZmllbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYHVua25vd24gcHJpdmF0ZSBmaWVsZCAnJHtwcm9wZXJ0eS5uYW1lfSdgLCBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhc3NpZ25tZW50LnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICAgIGZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhc3NpZ25tZW50LmxlZnQub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG4gICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIixcbiAgICAgICAgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoYXNzaWdubWVudC5sZWZ0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXNzaWdubWVudC5sZWZ0LnR5cGUsIHRhcmdldExvY2F0aW9uKVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiB0YXJnZXRMb2NhdGlvbiwgbmFtZTogYXNzaWdubWVudC5sZWZ0Lm5hbWV9LCB7XG4gICAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24oYXNzaWdubWVudC5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb25zdCBiaW5kaW5nVHlwZSA9IGNvbnRleHQuYmluZGluZ3MuZ2V0KGFzc2lnbm1lbnQubGVmdC5uYW1lKVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhc3NpZ25tZW50LnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgYmluZGluZ1R5cGU/LmtpbmQgPT0gXCJFcnJvclR5cGVcIiA/IHVuZGVmaW5lZCA6IGJpbmRpbmdUeXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRhcmdldFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGFzc2lnbm1lbnQsIFwiPVwiLCBhc3NpZ25tZW50LmxlZnQuZW5kID8/IGFzc2lnbm1lbnQuc3RhcnQgPz8gMCwgYXNzaWdubWVudC5yaWdodC5zdGFydCA/PyBhc3NpZ25tZW50LmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICByZXR1cm4gc2VtYW50aWNcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZWFkcyBhbiBpbW1lZGlhdGVseSBhc3NvY2lhdGVkIEphdmFTY3JpcHQgbG9jYWwgYEB0eXBlYCB0YWcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5WYXJpYWJsZURlY2xhcmF0aW9ufSBub2RlIC0gTG9jYWwgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2FsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBsb2NhbEphdmFTY3JpcHRUeXBlKG5vZGUsIG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBjb25zdCBjb21tZW50ID0gbm9kZS5sZWFkaW5nQ29tbWVudHM/LmF0KC0xKVxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghY29tbWVudCB8fCBjb21tZW50LnR5cGUgIT0gXCJDb21tZW50QmxvY2tcIiB8fCAhY29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSkge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFzY3JpcHRcIiwgYExvY2FsICcke25hbWV9J2AsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgZ2FwID0gc291cmNlLnNsaWNlKGNvbW1lbnQuZW5kID8/IDAsIG5vZGUuc3RhcnQgPz8gMClcblxuICBpZiAoIS9eXFxzKiQvdS50ZXN0KGdhcCkgfHwgKGdhcC5tYXRjaCgvXFxuL2d1KT8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFzY3JpcHRcIiwgYExvY2FsICcke25hbWV9J2AsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmxvY2sgPSBwYXJzZUNvbW1lbnQoYC8qJHtjb21tZW50LnZhbHVlfSovYClbMF1cbiAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidHlwZVwiKSA/PyBbXVxuXG4gIGNvbnN0IHRhZyA9IHRhZ3MubGVuZ3RoID09IDEgPyB0YWdzWzBdIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlKFxuICAgIHRhZz8udHlwZSxcbiAgICBcImphdmFzY3JpcHRcIixcbiAgICBgTG9jYWwgJyR7bmFtZX0nYCxcbiAgICBsb2NhdGlvbixcbiAgICBzb3VyY2UsXG4gICAgdGFnID8gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHRhZywgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24sXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgdHlwZVBhcmFtZXRlcnNcbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGhhdXN0aXZlIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUudHlwZSA9PSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIklmU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SWYobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRocm93U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUaHJvdyhub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRyeVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFR5cGVkVHJ5KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFdoaWxlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJGb3JPZlN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEZvckVhY2gobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgfHwgbm9kZS50eXBlID09IFwiQ29udGludWVTdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmxhYmVsKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBsYWJlbGVkICR7bm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn1gLFxuICAgICAgbm9kZUxvY2F0aW9uKG5vZGUubGFiZWwsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGtleXdvcmQgPSBub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwiXG4gICAgY29uc3QgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKG5vZGUsIGtleXdvcmQsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBub2RlLnR5cGUsIGxvY2F0aW9ufSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiAmJiBub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBpZiAobm9kZS5leHByZXNzaW9uLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIChub2RlLmV4cHJlc3Npb24uY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgIG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5leHByZXNzaW9uLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIgJiZcbiAgICAgIFtcIlJlZmVyZW5jZVR5cGVcIiwgXCJPd25lZFJlZmVyZW5jZVR5cGVcIl0uaW5jbHVkZXMoU3RyaW5nKFxuICAgICAgICBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5leHByZXNzaW9uLmNhbGxlZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKT8ua2luZCkpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk1ldGhvZENhbGxFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgKSxcbiAgICAgICAga2luZDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydFByaW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGB0aHJvdyBuZXcgRGVjbGFyZWRFcnJvcihtZXNzYWdlKWAuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UaHJvd1N0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHRocm93IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SYWlzZVN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldGhyb3dTdGF0ZW1lbnR9IFNlbWFudGljIHJhaXNlIG9yIHJldGhyb3cuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudFxuXG4gIGlmIChhcmd1bWVudD8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LmNhdGNoQmluZGluZ05hbWVzPy5oYXMoYXJndW1lbnQubmFtZSkgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQoYXJndW1lbnQubmFtZSk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgIGNvbnN0IGJpbmRpbmdOb2RlID0gY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcz8uZ2V0KGFyZ3VtZW50Lm5hbWUpXG5cbiAgICBpZiAoIWJpbmRpbmdOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidGhyb3cgb2YgYSBjYXRjaCBiaW5kaW5nIHdpdGhvdXQgYW4gZXhhY3QgaGFuZGxlciBiaW5kaW5nXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJpbmRpbmc6IGFyZ3VtZW50Lm5hbWUsXG4gICAgICBiaW5kaW5nTm9kZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJldGhyb3dTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidGhyb3dcIiwgbm9kZS5zdGFydCA/PyAwLCBhcmd1bWVudC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC50eXBlICE9IFwiTmV3RXhwcmVzc2lvblwiIHx8IGFyZ3VtZW50LmNhbGxlZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY29udGV4dC5iaW5kaW5ncy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGFyZ3VtZW50LmNhbGxlZS5uYW1lKSB8fCBhcmd1bWVudC5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIiB8fFxuICAgIGFyZ3VtZW50LnR5cGVBcmd1bWVudHMgfHwgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGFyZ3VtZW50LmNhbGxlZS5uYW1lKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQuYXJndW1lbnRzWzBdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgY2F0Y2ggd2l0aCB0aGUgY2Fub25pY2FsIGBpbnN0YW5jZW9mYCBndWFyZCBhbmQgZXhhY3QgcmV0aHJvdy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRyeVN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHRyeSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5oYW5kbGVyKSB7XG4gICAgaWYgKCFub2RlLmZpbmFsaXplcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRyeSB3aXRob3V0IGFuIGV4cGxpY2l0IGd1YXJkZWQgY2F0Y2hcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gICAgY29uc3Qgc2VtYW50aWMgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYmxvY2ssIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICAgIGhhbmRsZXJzOiBbXSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgdHJ5OiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidHJ5XCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5ibG9jay5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pKVxuXG4gICAgc2VtYW50aWMuZmluYWxseUJvZHkgPSBjb252ZXJ0QmxvY2sobm9kZS5maW5hbGl6ZXIuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCxcbiAgICAgIHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX0sIG5vZGVMb2NhdGlvbihub2RlLmZpbmFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgc2V0UGFyc2VyUmFuZ2VzKHNlbWFudGljLCB7ZmluYWxseTogbm9kZUxvY2F0aW9uKG5vZGUuZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHRyeTogdG9rZW5Mb2NhdGlvbihub2RlLCBcInRyeVwiLCBub2RlLnN0YXJ0ID8/IDAsIG5vZGUuYmxvY2suc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIHJldHVybiBzZW1hbnRpY1xuICB9XG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hIYW5kbGVyW119ICovXG4gIGNvbnN0IGhhbmRsZXJzID0gW11cbiAgY29uc3Qgc2VlbkhhbmRsZXJOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5jYXRjaEJpbmRpbmdOYW1lcyA/PyBbXSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgLy8gSmF2YVNjcmlwdCBoYXMgbm8gc2libGluZyBjYXRjaCBjbGF1c2VzLCBzbyB0aGUgZXhhY3QgbmF0aXZlIHByb2ZpbGUgZm9yIG9yZGVyZWRcbiAgLy8gbXVsdGktY2F0Y2ggaXMgYSBndWFyZGVkIGRpc3BhdGNoIGNoYWluOiBlYWNoIHVubWF0Y2hlZCBndWFyZCByZXRocm93cyBpbnRvIHRoZSBuZXh0XG4gIC8vIGNsYXVzZS4gVGhlIGNoYWluIGZsYXR0ZW5zIGJhY2sgdG8gb25lIG9yZGVyZWQgaGFuZGxlciBsaXN0IGhlcmUuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNhdGNoQ2xhdXNlIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY2xhdXNlID0gbm9kZS5oYW5kbGVyXG5cbiAgd2hpbGUgKGNsYXVzZSkge1xuICAgIGNvbnN0IGJpbmRpbmcgPSBjbGF1c2UucGFyYW1cblxuICAgIGlmIChiaW5kaW5nPy50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNsYXVzZS5ib2R5LmRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNhdGNoIHdpdGhvdXQgb25lIGV4cGxpY2l0IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChzZWVuSGFuZGxlck5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjYXRjaCBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIHNoYWRvd3MgYW4gb3V0ZXIgaGFuZGxlciBiaW5kaW5nYCxcbiAgICAgICAgaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBzZWVuSGFuZGxlck5hbWVzLmFkZChiaW5kaW5nLm5hbWUpXG5cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnQgfCB1bmRlZmluZWR9ICovXG4gICAgY29uc3QgZ3VhcmQgPSBjbGF1c2UuYm9keS5ib2R5WzBdXG5cbiAgICBpZiAoIWd1YXJkIHx8IGd1YXJkLnR5cGUgIT0gXCJJZlN0YXRlbWVudFwiIHx8IGd1YXJkLnRlc3QudHlwZSAhPSBcIlVuYXJ5RXhwcmVzc2lvblwiIHx8XG4gICAgICBndWFyZC50ZXN0Lm9wZXJhdG9yICE9IFwiIVwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQudHlwZSAhPSBcIkJpbmFyeUV4cHJlc3Npb25cIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50Lm9wZXJhdG9yICE9IFwiaW5zdGFuY2VvZlwiIHx8XG4gICAgICBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQubmFtZSAhPSBiaW5kaW5nLm5hbWUgfHxcbiAgICAgIGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUgPT0gYmluZGluZy5uYW1lIHx8XG4gICAgICBjb250ZXh0LmJpbmRpbmdzLmhhcyhndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUpIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHxcbiAgICAgIGd1YXJkLmNvbnNlcXVlbnQudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIgfHwgZ3VhcmQuY29uc2VxdWVudC5ib2R5Lmxlbmd0aCAhPSAxIHx8IGd1YXJkLmNvbnNlcXVlbnQuZGlyZWN0aXZlcy5sZW5ndGggPiAwIHx8XG4gICAgICAoZ3VhcmQuYWx0ZXJuYXRlICYmIChndWFyZC5hbHRlcm5hdGUudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIgfHwgZ3VhcmQuYWx0ZXJuYXRlLmRpcmVjdGl2ZXMubGVuZ3RoID4gMCkpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggd2l0aG91dCBleGFjdCBpbnN0YW5jZW9mIGd1YXJkXCIsIG5vZGVMb2NhdGlvbihndWFyZCA/PyBjbGF1c2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudCB8IHVuZGVmaW5lZH0gKi9cbiAgICBjb25zdCBkaXNwYXRjaCA9IGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNhdGNoQ2xhdXNlIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBuZXh0Q2xhdXNlID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119ICovXG4gICAgbGV0IGhhbmRsZXJCb2R5U3RhdGVtZW50cyA9IGNsYXVzZS5ib2R5LmJvZHkuc2xpY2UoMSlcbiAgICBsZXQgaGFuZGxlckJvZHlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihjbGF1c2UuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChkaXNwYXRjaC50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIGlmIChkaXNwYXRjaC5maW5hbGl6ZXIgfHwgIWRpc3BhdGNoLmhhbmRsZXIgfHwgZGlzcGF0Y2guYmxvY2suYm9keS5sZW5ndGggIT0gMSB8fCBkaXNwYXRjaC5ibG9jay5ib2R5WzBdLnR5cGUgIT0gXCJUaHJvd1N0YXRlbWVudFwiIHx8XG4gICAgICAgIGRpc3BhdGNoLmJsb2NrLmJvZHlbMF0uYXJndW1lbnQ/LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZGlzcGF0Y2guYmxvY2suYm9keVswXS5hcmd1bWVudC5uYW1lICE9IGJpbmRpbmcubmFtZSB8fFxuICAgICAgICAhZ3VhcmQuYWx0ZXJuYXRlIHx8IGNsYXVzZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNhdGNoIGd1YXJkIGRpc3BhdGNoIHdpdGhvdXQgZXhhY3QgcmV0aHJvdyBvZiBpdHMgb3duIGJpbmRpbmdcIixcbiAgICAgICAgICBub2RlTG9jYXRpb24oZGlzcGF0Y2gsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgbmV4dENsYXVzZSA9IGRpc3BhdGNoLmhhbmRsZXJcbiAgICAgIGhhbmRsZXJCb2R5U3RhdGVtZW50cyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50fSAqLyAoZ3VhcmQuYWx0ZXJuYXRlKS5ib2R5XG4gICAgICBoYW5kbGVyQm9keUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGd1YXJkLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9IGVsc2UgaWYgKGRpc3BhdGNoLnR5cGUgIT0gXCJUaHJvd1N0YXRlbWVudFwiIHx8IGRpc3BhdGNoLmFyZ3VtZW50Py50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGRpc3BhdGNoLmFyZ3VtZW50Lm5hbWUgIT0gYmluZGluZy5uYW1lKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggZ3VhcmQgd2l0aG91dCBleGFjdCB1bm1hdGNoZWQgcmV0aHJvd1wiLCBub2RlTG9jYXRpb24oZGlzcGF0Y2gsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH0gZWxzZSBpZiAoZ3VhcmQuYWx0ZXJuYXRlKSB7XG4gICAgICBpZiAoY2xhdXNlLmJvZHkuYm9keS5sZW5ndGggIT0gMSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY2F0Y2ggZ3VhcmQgZGlzcGF0Y2ggd2l0aG91dCBleGFjdCByZXRocm93IG9mIGl0cyBvd24gYmluZGluZ1wiLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihndWFyZC5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaGFuZGxlckJvZHlTdGF0ZW1lbnRzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQmxvY2tTdGF0ZW1lbnR9ICovIChndWFyZC5hbHRlcm5hdGUpLmJvZHlcbiAgICAgIGhhbmRsZXJCb2R5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oZ3VhcmQuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoY29udGV4dC5lcnJvck5hbWVzLmdldChndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUpKVxuICAgIGNvbnN0IGNhdWdodFR5cGVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIilcbiAgICB9LCB7dHlwZTogY2F1Z2h0VHlwZUxvY2F0aW9ufSlcbiAgICBjb25zdCBjYXRjaENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGNhdGNoQmluZGluZ05hbWVzOiBuZXcgU2V0KHNlZW5IYW5kbGVyTmFtZXMpLFxuICAgICAgY2F0Y2hCaW5kaW5nTm9kZXM6IG5ldyBNYXAoY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcyl9XG5cbiAgICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KGJpbmRpbmcubmFtZSwgY2F0Y2hUeXBlKVxuICAgIGNvbnN0IGNhdGNoQmluZGluZ05vZGUgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oYmluZGluZywgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogYmluZGluZy5uYW1lLFxuICAgICAgdHlwZTogY2F0Y2hUeXBlXG4gICAgfSwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjYXRjaENvbnRleHQuY2F0Y2hCaW5kaW5nTm9kZXMuc2V0KGJpbmRpbmcubmFtZSwgY2F0Y2hCaW5kaW5nTm9kZSlcbiAgICBoYW5kbGVycy5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgY2F0Y2hCaW5kaW5nOiBjYXRjaEJpbmRpbmdOb2RlLFxuICAgICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soaGFuZGxlckJvZHlTdGF0ZW1lbnRzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjYXRjaENvbnRleHQsXG4gICAgICAgIGhhbmRsZXJCb2R5TG9jYXRpb24pLFxuICAgICAgY2F0Y2hUeXBlLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hIYW5kbGVyXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGF1c2UsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSwge2NhdGNoOiB0b2tlbkxvY2F0aW9uKGNsYXVzZSwgXCJjYXRjaFwiLCBjbGF1c2Uuc3RhcnQgPz8gMCwgYmluZGluZy5zdGFydCA/PyBjbGF1c2UuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSkpXG4gICAgY2xhdXNlID0gbmV4dENsYXVzZVxuICB9XG4gIGNvbnN0IHNlbWFudGljID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5ibG9jaywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGhhbmRsZXJzLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7XG4gICAgdHJ5OiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidHJ5XCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5ibG9jay5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICB9KSlcblxuICBpZiAobm9kZS5maW5hbGl6ZXIpIHtcbiAgICBzZW1hbnRpYy5maW5hbGx5Qm9keSA9IGNvbnZlcnRCbG9jayhub2RlLmZpbmFsaXplci5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgICAgey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfSwgbm9kZUxvY2F0aW9uKG5vZGUuZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBzZXRQYXJzZXJSYW5nZXMoc2VtYW50aWMsIHtmaW5hbGx5OiBub2RlTG9jYXRpb24obm9kZS5maW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdHJ5OiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwidHJ5XCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5ibG9jay5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgcmV0dXJuIHNlbWFudGljXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IGJsb2NrLWJvZGllZCBgZm9yIChjb25zdCB2YWx1ZSBvZiBsaXN0KWAgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZvck9mU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgZm9yLW9mIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYXdhaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmb3Itb2ZcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLmxlZnQudHlwZSAhPSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiBhc3NpZ25tZW50IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmxlZnQua2luZCAhPSBcImNvbnN0XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGAke25vZGUubGVmdC5raW5kfSBpdGVyYXRpb24gYmluZGluZ2AsIHRva2VuTG9jYXRpb24oXG4gICAgICBub2RlLmxlZnQsXG4gICAgICBub2RlLmxlZnQua2luZCxcbiAgICAgIG5vZGUubGVmdC5zdGFydCA/PyBub2RlLnN0YXJ0ID8/IDAsXG4gICAgICBub2RlLmxlZnQuZW5kID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZVxuICAgICkpXG4gIH1cbiAgaWYgKG5vZGUubGVmdC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtdWx0aXBsZSBpdGVyYXRpb24gYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdXG5cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSA9PSBcIkFycmF5UGF0dGVyblwiKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZGVjbGFyYXRvci5pZC5lbGVtZW50c1xuXG4gICAgaWYgKGRlY2xhcmF0b3IuaWQuZWxlbWVudHMubGVuZ3RoICE9IDIgfHwgIWtleSB8fCAhdmFsdWUgfHwga2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgdmFsdWUudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvbiB8fCBrZXkudHlwZUFubm90YXRpb24gfHwgdmFsdWUudHlwZUFubm90YXRpb24gfHwga2V5Lm9wdGlvbmFsIHx8IHZhbHVlLm9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5vcmRlcmVkIG1hcCBpdGVyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiT3JkZXJlZCBtYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBrZXlMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbih2YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBrZXlUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUua2V5VHlwZSwga2V5TG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWVUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUudmFsdWVUeXBlLCB2YWx1ZUxvY2F0aW9uKVxuICAgIGNvbnN0IGtleUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IGtleUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZToga2V5Lm5hbWUsIHR5cGU6IGtleVR5cGVcbiAgICB9LCB7bmFtZToga2V5TG9jYXRpb259KVxuICAgIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjogdmFsdWVMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsIHR5cGU6IHZhbHVlVHlwZVxuICAgIH0sIHtuYW1lOiB2YWx1ZUxvY2F0aW9ufSlcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXkubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWUubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIHZhbHVlQmluZGluZ1xuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgICAgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG4gIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgZGVjbGFyYXRvci5pZC50eXBlLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvci5pZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChkZWNsYXJhdG9yLmluaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbml0aWFsaXplZCBpdGVyYXRpb24gYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiB3aXRob3V0IGtleS92YWx1ZSBwYWlyIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiSXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBjb2xsZWN0aW9uVHlwZS5lbGVtZW50VHlwZVxuICBjb25zdCBiaW5kaW5nVHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb25cbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgSXRlcmF0aW9uIGJpbmRpbmcgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBiaW5kaW5nTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIDogaXRlcmF0aW9uQmluZGluZ1R5cGUoaW5mZXJyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pXG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgIHR5cGU6IGJpbmRpbmdUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoZGVjbGFyYXRvci5pZC5uYW1lLCBiaW5kaW5nVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge1xuICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgQmFiZWwgYmxvY2sgb3Igbm9ybWFsaXplZCBzaW5nbGUtc3RhdGVtZW50IGJvZHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudCB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gaW5wdXQgLSBQYXJzZXIgYmxvY2sgb3Igc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW2xvY2F0aW9uXSAtIExvY2F0aW9uIGZvciBhIHN0YXRlbWVudC1hcnJheSBibG9jay5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhpbnB1dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCwgbG9jYXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC5ib2R5XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IFtdIDogaW5wdXQuZGlyZWN0aXZlc1xuICBjb25zdCBibG9ja0xvY2F0aW9uID0gbG9jYXRpb24gPz8gbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50fSAqLyAoaW5wdXQpLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsZXhpY2FsVmFsdWVOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcylcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKHN0YXRlbWVudC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSBjb250aW51ZVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRvciBvZiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKSB7XG4gICAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSBsZXhpY2FsVmFsdWVOYW1lcy5hZGQoZGVjbGFyYXRvci5pZC5uYW1lKVxuICAgIH1cbiAgfVxuICBjb25zdCBibG9ja0NvbnRleHQgPSB7Li4uY29udGV4dCwgbGV4aWNhbFZhbHVlTmFtZXN9XG5cbiAgaWYgKGRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGRpcmVjdGl2ZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IGJsb2NrTG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJsb2NrQ29udGV4dCkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBKYXZhU2NyaXB0IEpTRG9jIHR5cGVzIGZyb20gYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkgZm9yIHR5cGUtcGFyYW1ldGVyIElEcy5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gUGFyc2VkIHR5cGVzLlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgY29tbWVudCA9IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKVxuXG4gIGlmICghY29tbWVudCkgbWlzc2luZ1R5cGUoXCJqYXZhc2NyaXB0XCIsIGBGdW5jdGlvbiAnJHtub2RlLmlkPy5uYW1lID8/IFwiYW5vbnltb3VzXCJ9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBjb25zdCBjb21tZW50QmxvY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KVxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnRCbG9jay52YWx1ZX0qL2ApWzBdXG4gIGNvbnN0IHBhcmFtZXRlclRhZ3MgPSBibG9jay50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicGFyYW1cIilcbiAgY29uc3QgcmV0dXJuVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJyZXR1cm5zXCIgfHwgdGFnLnRhZyA9PSBcInJldHVyblwiKVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudEJsb2NrLCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChuZXcgU2V0KHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IHRhZy5uYW1lKSkuc2l6ZSAhPSBwYXJhbWV0ZXJUYWdzLmxlbmd0aCkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBhcmFtZXRlclRhZ3MuZmluZCgodGFnLCBpbmRleCkgPT4gcGFyYW1ldGVyVGFncy5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gdGFnLm5hbWUpICE9IGluZGV4KVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImR1cGxpY2F0ZSBAcGFyYW0gYW5ub3RhdGlvblwiLCBkdXBsaWNhdGVcbiAgICAgID8gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgZHVwbGljYXRlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChyZXR1cm5UYWdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEByZXR1cm4gYW5ub3RhdGlvblwiLFxuICAgICAgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgcmV0dXJuVGFnc1sxXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgTWFwKHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IFt0YWcubmFtZSwge1xuICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCB0YWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzb3VyY2VUeXBlOiB0YWcudHlwZVxuICB9XSkpXG4gIGNvbnN0IHJldHVyblRhZyA9IHJldHVyblRhZ3NbMF1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogcmV0dXJuVGFnID8ge2xvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlVHlwZTogcmV0dXJuVGFnLnR5cGV9IDogdW5kZWZpbmVkLFxuICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGV4YWN0IHVuYm91bmRlZCBpbnZhcmlhbnQgYEB0ZW1wbGF0ZSBOYW1lYCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQYXJzZXItb3duZWQgSlNEb2MgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWNbXX0gdGFncyAtIFBhcnNlZCB0YWdzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG93bmVySWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gT3JkZXJlZCBwYXJhbWV0ZXJzIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCB0YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG1hbGZvcm1lZCA9IHRhZ3MuZmluZCgodGFnKSA9PiB0YWcudGFnLnN0YXJ0c1dpdGgoXCJ0ZW1wbGF0ZVwiKSAmJiB0YWcudGFnICE9IFwidGVtcGxhdGVcIilcblxuICBpZiAobWFsZm9ybWVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgdHlwZSBwYXJhbWV0ZXIgdmFyaWFuY2VcIiwgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIG1hbGZvcm1lZCwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCB0ZW1wbGF0ZVRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidGVtcGxhdGVcIilcblxuICBpZiAodGVtcGxhdGVUYWdzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghb3duZXJJZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInR5cGUgcGFyYW1ldGVyIG91dHNpZGUgYSBkZWNsYXJhdGlvblwiLFxuICAgIG5vZGVMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29tbWVudCkpLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gdGVtcGxhdGVUYWdzLm1hcCgodGFnLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHRhZywgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoIS9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC91LnRlc3QodGFnLm5hbWUpIHx8IHRhZy50eXBlIHx8IHRhZy5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lOiB0YWcubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gb3B0aW9uYWwgY2xhc3MtbGV2ZWwgSlNEb2MgdGVtcGxhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFJlY29yZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNsYXNzSnNkb2NUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2sgfCB1bmRlZmluZWR9ICovIChcbiAgICBub2RlLmxlYWRpbmdDb21tZW50cz8uZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNhbmRpZGF0ZS52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSkpXG5cbiAgaWYgKCFjb21tZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdXG5cbiAgcmV0dXJuIGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudCwgYmxvY2sudGFncywgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IEpTRG9jIHNjYWxhciB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBTb3VyY2UtbGFuZ3VhZ2UgdHlwZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSB0b2tlbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBsYW5ndWFnZSwgc3ViamVjdCwgbG9jYXRpb24sIHNvdXJjZSwgdHlwZUxvY2F0aW9uID0gbG9jYXRpb24sIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIpIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShsYW5ndWFnZSwgc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2UsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IEphdmFTY3JpcHQgZnVuY3Rpb24gcmV0dXJuIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gc291cmNlVHlwZSAtIEpTRG9jIHR5cGUgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgcGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW3R5cGVMb2NhdGlvbl0gLSBFeGFjdCBhbm5vdGF0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBsYW5ndWFnZSwgc3ViamVjdCwgbG9jYXRpb24sIHNvdXJjZSwgdHlwZUxvY2F0aW9uID0gbG9jYXRpb24sIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoc291cmNlVHlwZSA9PSBcInZvaWRcIikgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKGxhbmd1YWdlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgdHlwZUxvY2F0aW9uKVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBsYW5ndWFnZSwgc3ViamVjdCwgbG9jYXRpb24sIHNvdXJjZSwgdHlwZUxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IFR5cGVTY3JpcHQgc2NhbGFyIGtleXdvcmQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlR5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9vcCB8IG51bGwgfCB1bmRlZmluZWR9IGFubm90YXRpb24gLSBUeXBlIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gT3duaW5nIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUoYW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghYW5ub3RhdGlvbikgcmV0dXJuIG1pc3NpbmdUeXBlKFwidHlwZXNjcmlwdFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoYW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBUeXBlU2NyaXB0IHZhbHVlLXR5cGUgdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gdHlwZU5vZGUgLSBQYXJzZXItb3duZWQgdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHR5cGVOb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgY29uc3Qgc291cmNlVHlwZSA9IHR5cGVOb2RlLnR5cGUgPT0gXCJUU051bWJlcktleXdvcmRcIiA/IFwibnVtYmVyXCIgOlxuICAgIHR5cGVOb2RlLnR5cGUgPT0gXCJUU0Jvb2xlYW5LZXl3b3JkXCIgPyBcImJvb2xlYW5cIiA6IHR5cGVOb2RlLnR5cGUgPT0gXCJUU1N0cmluZ0tleXdvcmRcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoc291cmNlVHlwZSkge1xuICAgIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShcInR5cGVzY3JpcHRcIiwgc291cmNlVHlwZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZVJlZmVyZW5jZVwiICYmIHR5cGVOb2RlLnR5cGVOYW1lLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgIXR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgdHlwZVBhcmFtZXRlcnMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyfSAqLyAodHlwZVBhcmFtZXRlcnMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgcmV0dXJuIHR5cGVWYXJpYWJsZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhcmFtZXRlci5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgcmVjb3JkTmFtZXMuaGFzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbn0gKi8gKHJlY29yZE5hbWVzLmdldCh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSlcblxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAodHlwZU5vZGUudHlwZVBhcmFtZXRlcnMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJnZW5lcmljIG93bmVkIHJlc291cmNlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLnR5cGVOYW1lLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNsYXNzIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHR5cGVOb2RlLnR5cGVOYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIlxuICAgICAgICA/IG93bmVkUmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbG9jYXRpb24pXG4gICAgICAgIDogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSB0eXBlTm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PlxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlciwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSlcblxuICAgIHJldHVybiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCBhcmd1bWVudHNfKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNVbmlvblR5cGVcIikge1xuICAgIGlmICh0eXBlTm9kZS50eXBlcy5sZW5ndGggIT0gMiB8fCB0eXBlTm9kZS50eXBlc1sxXS50eXBlICE9IFwiVFNOdWxsS2V5d29yZFwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXG4gICAgICAgIFwidHlwZXNjcmlwdFwiLFxuICAgICAgICB0eXBlTm9kZS50eXBlcy5zb21lKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiVFNOdWxsS2V5d29yZFwiKVxuICAgICAgICAgID8gXCJhcmJpdHJhcnkgdW5pb24gdHlwZVwiXG4gICAgICAgICAgOiBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gb3Igc2NhbGFyIHR5cGVcIixcbiAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cbiAgICBjb25zdCB2YWx1ZU5vZGUgPSB0eXBlTm9kZS50eXBlc1swXVxuXG4gICAgcmV0dXJuIG9wdGlvbmFsVHlwZShcbiAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh2YWx1ZU5vZGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbm9kZUxvY2F0aW9uKHZhbHVlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVPcGVyYXRvclwiICYmIHR5cGVOb2RlLm9wZXJhdG9yID09IFwicmVhZG9ubHlcIiAmJiB0eXBlTm9kZS50eXBlQW5ub3RhdGlvbi50eXBlID09IFwiVFNBcnJheVR5cGVcIikge1xuICAgIGNvbnN0IGVsZW1lbnROb2RlID0gdHlwZU5vZGUudHlwZUFubm90YXRpb24uZWxlbWVudFR5cGVcblxuICAgIHJldHVybiBsaXN0VHlwZShcbiAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShlbGVtZW50Tm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBub2RlTG9jYXRpb24oZWxlbWVudE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlUmVmZXJlbmNlXCIgJiYgdHlwZU5vZGUudHlwZU5hbWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIFtcIlJlYWRvbmx5QXJyYXlcIiwgXCJSZWFkb25seU1hcFwiXS5pbmNsdWRlcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0eXBlTm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zID8/IFtdXG5cbiAgICBpZiAodHlwZU5vZGUudHlwZU5hbWUubmFtZSA9PSBcIlJlYWRvbmx5QXJyYXlcIiAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gbGlzdFR5cGUoXG4gICAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXJzWzBdLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUgPT0gXCJSZWFkb25seU1hcFwiICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDIpIHtcbiAgICAgIGNvbnN0IGtleVR5cGUgPSBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyc1swXSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgICBpZiAoa2V5VHlwZS5raW5kICE9IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJtYXAga2V5IHR5cGUgb3RoZXIgdGhhbiBzdHJpbmdcIiwgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcFR5cGUoXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXJzWzFdLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCBjb2xsZWN0aW9uIG9yIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IFR5cGVTY3JpcHQgZnVuY3Rpb24gcmV0dXJuIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vb3AgfCBudWxsIHwgdW5kZWZpbmVkfSBhbm5vdGF0aW9uIC0gUmV0dXJuIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgaWYgKGFubm90YXRpb24udHlwZSAhPSBcIlRTVHlwZUFubm90YXRpb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZVwiLCBub2RlTG9jYXRpb24oYW5ub3RhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZU5vZGUgPSBhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uXG5cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1ZvaWRLZXl3b3JkXCIpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIFwidm9pZFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBuYXRpdmUgdW5ib3VuZGVkIGludmFyaWFudCBUeXBlU2NyaXB0IHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBkZWNsYXJhdGlvbiAtIFBhcnNlci1vd25lZCBsaXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgb3duaW5nIGRlY2xhcmF0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycyhkZWNsYXJhdGlvbiwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWRlY2xhcmF0aW9uKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uLnBhcmFtcy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLmNvbnN0cmFpbnQgfHwgcGFyYW1ldGVyLmRlZmF1bHQgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImluXCIpIHx8IFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJvdXRcIikgfHxcbiAgICAgIFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJjb25zdFwiKSB8fCB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgY29uc3QgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlci5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFueSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gU3RhYmxlIGZ1bmN0aW9uIGlkZW50aXR5LlxuICogQHJldHVybnMge0phdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYW5vbnltb3VzIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5hc3luYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFzeW5jIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5nZW5lcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmF0b3IgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIGNvbnN0IG5hdGl2ZVR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9ICovIChub2RlLnR5cGVQYXJhbWV0ZXJzKSwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IG5vZGUudHlwZVBhcmFtZXRlcnMgPyB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJuYXRpdmUgZ2VuZXJpYyBmdW5jdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS50eXBlUGFyYW1ldGVycywgZmlsZW5hbWUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRvY3VtZW50ZWRUeXBlcyA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8ganNkb2NUeXBlcyhub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKSA6IHVuZGVmaW5lZFxuICBjb25zdCB0eXBlUGFyYW1ldGVyc18gPSBuYXRpdmVUeXBlUGFyYW1ldGVycyA/PyBkb2N1bWVudGVkVHlwZXM/LnR5cGVQYXJhbWV0ZXJzXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHR5cGVQYXJhbWV0ZXJzXyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLnBhcmFtcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKHBhcmFtZXRlci5vcHRpb25hbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm9wdGlvbmFsIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcblxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZFR5cGVzPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLCBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgICA6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShwYXJhbWV0ZXIudHlwZUFubm90YXRpb24sIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlXG4gICAgfSwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyID0gZG9jdW1lbnRlZFR5cGVzICYmIFsuLi5kb2N1bWVudGVkVHlwZXMucGFyYW1ldGVycy5rZXlzKCldXG4gICAgLmZpbmQoKG5hbWUpID0+ICFub2RlLnBhcmFtcy5zb21lKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlID09IFwiSWRlbnRpZmllclwiICYmIHBhcmFtZXRlci5uYW1lID09IG5hbWUpKVxuXG4gIGlmIChleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGFubm90YXRpb24gZm9yIHVua25vd24gcGFyYW1ldGVyICcke2V4dHJhRG9jdW1lbnRlZFBhcmFtZXRlcn0nYCwgbG9jYXRpb24pXG4gIGNvbnN0IHJldHVybkFubm90YXRpb24gPSBub2RlLnJldHVyblR5cGVcbiAgY29uc3QgcmV0dXJuVHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0UmV0dXJuVHlwZShkb2N1bWVudGVkVHlwZXM/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICA6IGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShyZXR1cm5Bbm5vdGF0aW9uLCBgRnVuY3Rpb24gJyR7bm9kZS5pZC5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5pZC5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZSxcbiAgICAuLi4odHlwZVBhcmFtZXRlcnNfID8ge3R5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVyc199IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IHNpZ25hdHVyZSAtIENvbnZlcnRlZCBzaWduYXR1cmUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIE1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IHZhbHVlUmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBhdmFpbGFibGUgaW4gdmFsdWUgcG9zaXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkge1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3Iobm9kZS5ib2R5KSxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIHR5cGVQYXJhbWV0ZXJzOiBuZXcgTWFwKChzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKSxcbiAgICB2YWx1ZVJlY29yZE5hbWVzXG4gIH1cbiAgY29uc3QgYm9keSA9IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHksXG4gICAga2luZDogXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsXG4gICAgbG9jYXRpb246IHNpZ25hdHVyZS5sb2NhdGlvbixcbiAgICBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICBwYXJhbWV0ZXJzOiBzaWduYXR1cmUucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICAuLi4oc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiBzaWduYXR1cmUudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH0sIHtuYW1lOiBzaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBwYXJzZXItb3duZWQgcGFpciBsb29wcyB0byBleGFjdCBkZWNsYXJhdGlvbnMgaW5zaWRlIG9uZSBsZXhpY2FsIG93bmVyLlxuICogQW1iaWd1b3VzIHNhbWUtbmFtZSBkZWNsYXJhdGlvbnMgcHJvZHVjZSBubyBldmlkZW5jZSBhbmQgZmFpbCBkdXJpbmcgbG9vcCBjb252ZXJzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEZ1bmN0aW9uIGJvZHkgb3IgZW50cnktcG9pbnQgc3VidHJlZS5cbiAqIEByZXR1cm5zIHtTZXQ8b2JqZWN0Pn0gRXhhY3QgcGFpci1pdGVyYXRlZCBwYXJzZXIgZGVjbGFyYXRpb25zLlxuICovXG5mdW5jdGlvbiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yKHZhbHVlKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBvYmplY3QsIG5hbWU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXJ9W119ICovXG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdXG4gIC8qKiBAdHlwZSB7e25hbWU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXJ9W119ICovXG4gIGNvbnN0IHJlY2VpdmVycyA9IFtdXG4gIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBjYW5kaWRhdGUuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUGFyc2VyIGNhbmRpZGF0ZS5cbiAgICovXG4gIGNvbnN0IHZpc2l0ID0gKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmICghY2FuZGlkYXRlIHx8IHR5cGVvZiBjYW5kaWRhdGUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyhjYW5kaWRhdGUpKSByZXR1cm5cbiAgICBzZWVuLmFkZChjYW5kaWRhdGUpXG4gICAgY29uc3QgdHlwZSA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJ0eXBlXCIpXG5cbiAgICBpZiAodHlwZSA9PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fCB0eXBlID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSByZXR1cm5cbiAgICBpZiAodHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRvclwiKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcImlkXCIpXG5cbiAgICAgIGlmIChSZWZsZWN0LmdldChpZGVudGlmaWVyLCBcInR5cGVcIikgPT0gXCJJZGVudGlmaWVyXCIpIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgZGVjbGFyYXRpb246IGNhbmRpZGF0ZSxcbiAgICAgICAgbmFtZTogUmVmbGVjdC5nZXQoaWRlbnRpZmllciwgXCJuYW1lXCIpLFxuICAgICAgICBvZmZzZXQ6IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJzdGFydFwiKVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJGb3JPZlN0YXRlbWVudFwiKSB7XG4gICAgICBjb25zdCBsZWZ0ID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcImxlZnRcIilcbiAgICAgIGNvbnN0IHJpZ2h0ID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInJpZ2h0XCIpXG4gICAgICBjb25zdCBsb29wRGVjbGFyYXRpb25zID0gbGVmdCAmJiB0eXBlb2YgbGVmdCA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQobGVmdCwgXCJkZWNsYXJhdGlvbnNcIikgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KGxvb3BEZWNsYXJhdGlvbnMpICYmIGxvb3BEZWNsYXJhdGlvbnMubGVuZ3RoID09IDEgPyBSZWZsZWN0LmdldChsb29wRGVjbGFyYXRpb25zWzBdLCBcImlkXCIpIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBlbGVtZW50cyA9IHBhdHRlcm4gJiYgdHlwZW9mIHBhdHRlcm4gPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KHBhdHRlcm4sIFwiZWxlbWVudHNcIikgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KGxlZnQsIFwia2luZFwiKSA9PSBcImNvbnN0XCIgJiYgUmVmbGVjdC5nZXQocGF0dGVybiwgXCJ0eXBlXCIpID09IFwiQXJyYXlQYXR0ZXJuXCIgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShlbGVtZW50cykgJiYgZWxlbWVudHMubGVuZ3RoID09IDIgJiYgZWxlbWVudHMuZXZlcnkoKGVsZW1lbnQpID0+IFJlZmxlY3QuZ2V0KGVsZW1lbnQsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIikgJiZcbiAgICAgICAgUmVmbGVjdC5nZXQocmlnaHQsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIikgcmVjZWl2ZXJzLnB1c2goe1xuICAgICAgICBuYW1lOiBSZWZsZWN0LmdldChyaWdodCwgXCJuYW1lXCIpLFxuICAgICAgICBvZmZzZXQ6IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJzdGFydFwiKVxuICAgICAgfSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMoY2FuZGlkYXRlKSkge1xuICAgICAgaWYgKFtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHZpc2l0KGl0ZW0pXG4gICAgICB9IGVsc2UgdmlzaXQoY2hpbGQpXG4gICAgfVxuICB9XG5cbiAgdmlzaXQodmFsdWUpXG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IFNldCgpXG4gIGZvciAoY29uc3QgcmVjZWl2ZXIgb2YgcmVjZWl2ZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5maWx0ZXIoKHtuYW1lLCBvZmZzZXR9KSA9PiBuYW1lID09IHJlY2VpdmVyLm5hbWUgJiYgb2Zmc2V0IDwgcmVjZWl2ZXIub2Zmc2V0KVxuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID09IDEpIHNlbGVjdGVkLmFkZChtYXRjaGVzWzBdLmRlY2xhcmF0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGVkXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGVtcHR5IG5hdGl2ZSBFcnJvciBzdWJjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBzZW1hbnRpYyBlcnJvci5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhU2NyaXB0RXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFub2RlLmlkIHx8IG5vZGUuc3VwZXJDbGFzcz8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlLnN1cGVyQ2xhc3MubmFtZSAhPSBcIkVycm9yXCIgfHxcbiAgICBub2RlLmJvZHkuYm9keS5sZW5ndGggIT0gMCB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaW1wbGVtZW50c1wiKT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHR5cGU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnN1cGVyQ2xhc3MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogUHJlZGVjbGFyZXMgdGhlIGJvdW5kZWQgbmF0aXZlIHByaXZhdGUtZmllbGQgcmVmZXJlbmNlLWNsYXNzIHByb2ZpbGUgYW5kIGFsbCBjYWxsYWJsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIFBhcnNlciBjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3MgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgaW5oZXJpdGFuY2UsIGdlbmVyaWNzLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG5cbiAgaWYgKGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgbWV0aG9kTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gbm9kZS5ib2R5LmJvZHkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyByZXF1aXJlcyBwcml2YXRlIGZpZWxkcywgb25lIGNvbnN0cnVjdG9yLCBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBmaWVsZE5vZGVzLm1hcCgobWVtYmVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGxldCBuYW1lXG4gICAgbGV0IG5hbWVMb2NhdGlvblxuICAgIGxldCB0eXBlXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbWVtYmVyLmNvbXB1dGVkIHx8IG1lbWJlci5zdGF0aWMgfHxcbiAgICAgICAgbWVtYmVyLmFjY2Vzc2liaWxpdHkgIT0gXCJwcml2YXRlXCIgfHwgbWVtYmVyLnJlYWRvbmx5IHx8IG1lbWJlci52YWx1ZSB8fCBtZW1iZXIub3B0aW9uYWwgfHwgbWVtYmVyLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgICAgICBSZWZsZWN0LmdldChtZW1iZXIsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobWVtYmVyLCBcImRlY2xhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZVNjcmlwdFR5cGUobWVtYmVyLnR5cGVBbm5vdGF0aW9uLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIgfHwgbWVtYmVyLmtleS50eXBlICE9IFwiUHJpdmF0ZU5hbWVcIiB8fCBtZW1iZXIuc3RhdGljIHx8IG1lbWJlci52YWx1ZSB8fFxuICAgICAgICBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZFwiLCBmaWVsZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgbmFtZSA9IG1lbWJlci5rZXkuaWQubmFtZVxuICAgICAgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG1lbWJlci5rZXkuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb25zdCBjb21tZW50ID0gbWVtYmVyLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgICBjb25zdCBnYXAgPSBjb21tZW50ID8gc291cmNlLnNsaWNlKGNvbW1lbnQuZW5kID8/IDAsIG1lbWJlci5zdGFydCA/PyAwKSA6IFwiXCJcbiAgICAgIGNvbnN0IGJsb2NrID0gY29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIikgJiYgL15cXHMqJC91LnRlc3QoZ2FwKVxuICAgICAgICA/IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidHlwZVwiKSA/PyBbXVxuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB0eXBlID0gY29udmVydFR5cGUodGFnc1swXS50eXBlLCBsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBjb21tZW50VGFnTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSAqLyAoY29tbWVudCksIHRhZ3NbMF0sIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgbm9taW5hbE5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcbiAgfSlcbiAgY29uc3Qgb3duZWRGaWVsZHMgPSBkZWNsYXJhdGlvbi5maWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpXG5cbiAgaWYgKG93bmVkRmllbGRzLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgb3duZWRGaWVsZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkICYge3R5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfX0gKi8gKG93bmVkRmllbGRzWzBdKVxuXG4gICAgZGVjbGFyYXRpb24ub3duZXJzaGlwID0ge2ZpZWxkSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAob3duZWRGaWVsZC5pZCksIGtpbmQ6IFwib3duZWRSZXNvdXJjZVwiLCByZXNvdXJjZUlkOiBvd25lZEZpZWxkLnR5cGUucmVzb3VyY2VJZH1cbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoY29uc3RydWN0b3JOb2Rlc1swXSlcbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShjb25zdHJ1Y3Rvck5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSwgbG9jYXRpb246IGNvbnN0cnVjdG9yU2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbHNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2JvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZERlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLCBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSAqLyAoc2lnbmF0dXJlLnJldHVyblR5cGUpfSxcbiAgICB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSByZWZlcmVuY2UgY2xhc3MgYm9keSBhZnRlciBldmVyeSBjbGFzcyBzaWduYXR1cmUgaXMgY29tcGxldGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENvbXBsZXRlIHByZWRlY2xhcmVkIGNsYXNzIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSB2YWx1ZU5hbWVzIC0gTm9taW5hbCBjb25zdHJ1Y3RvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBDbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IENvbXBsZXRlZCBzZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHZhbHVlTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcyxcbiAgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmluZCgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZFtdfSAqLyAoXG4gICAgbm9kZS5ib2R5LmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NNZXRob2RcIiAmJiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcbiAgY29uc3QgYmFzZUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlcywgY3VycmVudENsYXNzOiBkZWNsYXJhdGlvbiwgZXJyb3JOYW1lcywgZXJyb3JzLCBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3JkcywgdmFsdWVSZWNvcmROYW1lczogdmFsdWVOYW1lc31cbiAgY29uc3QgY29uc3RydWN0b3JDb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgcmV0dXJuVHlwZToge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVSZWZlcmVuY2VcIiksIG5hbWU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInZvaWRcIil9fVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHkgPSBjb252ZXJ0QmxvY2soY29uc3RydWN0b3JOb2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsXG4gICAgY29uc3RydWN0b3JDb250ZXh0KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cbiAgICBjb25zdCBjb250ZXh0ID0gey4uLmJhc2VDb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChtZXRob2QucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IG1ldGhvZC5yZXR1cm5UeXBlfVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kTm9kZXNbaW5kZXhdLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZGVjbGFyYXRpb25cbn1cblxuLyoqXG4gKiBSZWFkcyBvbmUgY29uc3RydWN0b3Igb3IgbWV0aG9kIHNpZ25hdHVyZSB3aXRob3V0IGFkbWl0dGluZyBvdmVybG9hZHMgb3IgbW9kaWZpZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2R9IG5vZGUgLSBQYXJzZXIgbWV0aG9kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjb25zdHJ1Y3RvciAtIFdoZXRoZXIgdGhpcyBpcyB0aGUgY29uc3RydWN0b3IuXG4gKiBAcmV0dXJucyB7e2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmFtZTogc3RyaW5nLCBuYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXJhbWV0ZXJzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXSwgcmV0dXJuVHlwZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfX0gU2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc3RydWN0b3IpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5jb21wdXRlZCB8fCBub2RlLnN0YXRpYyB8fCBub2RlLmFzeW5jIHx8IG5vZGUuZ2VuZXJhdG9yIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHxcbiAgICBub2RlLmtleS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNvbnN0cnVjdG9yICE9IChub2RlLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSB8fFxuICAgIGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIG5vZGUuYWNjZXNzaWJpbGl0eSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgY2FsbGFibGVcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgPyBqc2RvY1R5cGVzKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChub2RlKSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgOiB1bmRlZmluZWRcbiAgaWYgKGNvbnN0cnVjdG9yICYmIChub2RlLnJldHVyblR5cGUgfHwgZG9jdW1lbnRlZD8ucmV0dXJuVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY29uc3RydWN0b3IgcmV0dXJuIGFubm90YXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5vZGUucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKHBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIG1ldGhvZCBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZD8ucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG4gICAgY29uc3QgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShwYXJhbWV0ZXIudHlwZUFubm90YXRpb24sIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgICA6IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgZG9jdW1lbnRlZFR5cGU/LmxvY2F0aW9uLCBub21pbmFsTmFtZXMpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlci5uYW1lLCB0eXBlfSxcbiAgICAgIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGlmIChkb2N1bWVudGVkICYmIGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1ldGhvZCBKU0RvYyBwYXJhbWV0ZXIgbWlzbWF0Y2hcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IGNvbnN0cnVjdG9yID8gXCJjb25zdHJ1Y3RvclwiIDogbm9kZS5rZXkubmFtZVxuICBjb25zdCBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5rZXksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb25zdHJ1Y3RvciAmJiByZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke25hbWV9J2AsIG5hbWVMb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7bG9jYXRpb24sIG5hbWUsIG5hbWVMb2NhdGlvbiwgcGFyYW1ldGVycywgLi4uKGNvbnN0cnVjdG9yID8ge30gOiB7cmV0dXJuVHlwZTogbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShub2RlLnJldHVyblR5cGUsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgOiBjb252ZXJ0UmV0dXJuVHlwZShkb2N1bWVudGVkPy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYE1ldGhvZCAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSxcbiAgICAgIGRvY3VtZW50ZWQ/LnJldHVyblR5cGU/LmxvY2F0aW9uLCBub21pbmFsTmFtZXMpfSl9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IFR5cGVTY3JpcHQgcmVhZG9ubHkgY29uc3RydWN0b3ItcGFyYW1ldGVyIHJlY29yZCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIENsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBub21pbmFsIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIEFsbCBub21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICBjb25zdCBleHRyYSA9IG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihleHRyYSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBSZWZsZWN0LmdldChjb25zdHJ1Y3RvciwgXCJhY2Nlc3NpYmlsaXR5XCIpIHx8XG4gICAgY29uc3RydWN0b3IuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IGNvbnN0cnVjdG9yLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggIT0gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gY29uc3RydWN0b3IucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJUU1BhcmFtZXRlclByb3BlcnR5XCIgfHwgcGFyYW1ldGVyLnJlYWRvbmx5ICE9PSB0cnVlIHx8IHBhcmFtZXRlci5hY2Nlc3NpYmlsaXR5IHx8IHBhcmFtZXRlci5vdmVycmlkZSB8fFxuICAgICAgcGFyYW1ldGVyLnBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5wYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSByZWFkb25seSBwYXJhbWV0ZXItcHJvcGVydHkgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyLnBhcmFtZXRlclxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShpZGVudGlmaWVyLnR5cGVBbm5vdGF0aW9uLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKU0RvYyBjb25zdHJ1Y3Rvci9yZWFkb25seS1hc3NpZ25tZW50L2ZyZWV6ZSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgKEFycmF5LmlzQXJyYXkoaW1wbGVtZW50c18pICYmIGltcGxlbWVudHNfLmxlbmd0aCkgfHwgKEFycmF5LmlzQXJyYXkobWl4aW5zKSAmJiBtaXhpbnMubGVuZ3RoKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgaW5oZXJpdGFuY2Ugb3IgZGVjb3JhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBjb25zdHJ1Y3Rvci5ib2R5LmRpcmVjdGl2ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3IucGFyYW1zXG5cbiAgaWYgKHBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aCkpIHtcbiAgICBjb25zdCBpbnZhbGlkID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5vcHRpb25hbCB8fCBwYXJhbWV0ZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3IgcGFyYW1ldGVyXCIsIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0ganNkb2NUeXBlcygvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29uc3RydWN0b3IpKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZG9jdW1lbnRlZC5yZXR1cm5UeXBlIHx8IGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplICE9IHBhcmFtZXRlcnMubGVuZ3RoIHx8IGNvbnN0cnVjdG9yLmJvZHkuYm9keS5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGggKyAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImluY29tcGxldGUgcmVjb3JkIGNvbnN0cnVjdG9yIHByb2ZpbGVcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyfSAqLyAocGFyYW1ldGVyKVxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnN0cnVjdG9yLmJvZHkuYm9keVtpbmRleF1cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWQucGFyYW1ldGVycy5nZXQoaWRlbnRpZmllci5uYW1lKVxuXG4gICAgaWYgKCFkb2N1bWVudGVkVHlwZSB8fCBzdGF0ZW1lbnQudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ub3BlcmF0b3IgIT0gXCI9XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQuY29tcHV0ZWQgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQub2JqZWN0LnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eS5uYW1lICE9IGlkZW50aWZpZXIubmFtZSB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5yaWdodC5uYW1lICE9IGlkZW50aWZpZXIubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCByZWFkb25seUNvbW1lbnQgPSBzdGF0ZW1lbnQubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcbiAgICBjb25zdCBnYXAgPSByZWFkb25seUNvbW1lbnQgPyBzb3VyY2Uuc2xpY2UocmVhZG9ubHlDb21tZW50LmVuZCA/PyAwLCBzdGF0ZW1lbnQuc3RhcnQgPz8gMCkgOiBcIlwiXG4gICAgY29uc3QgdGFncyA9IHJlYWRvbmx5Q29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIHJlYWRvbmx5Q29tbWVudC52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKVxuICAgICAgPyBwYXJzZUNvbW1lbnQoYC8qJHtyZWFkb25seUNvbW1lbnQudmFsdWV9Ki9gKVswXT8udGFncyA/PyBbXVxuICAgICAgOiBbXVxuXG4gICAgaWYgKCFyZWFkb25seUNvbW1lbnQgfHwgIS9eXFxzKiQvdS50ZXN0KGdhcCkgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLnRhZyAhPSBcInJlYWRvbmx5XCIgfHxcbiAgICAgIHRhZ3NbMF0ubmFtZSB8fCB0YWdzWzBdLnR5cGUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBmaWVsZCB3aXRob3V0IGV4YWN0IEByZWFkb25seSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgXCJqYXZhc2NyaXB0XCIsIGBSZWNvcmQgZmllbGQgJyR7aWRlbnRpZmllci5uYW1lfSdgLFxuICAgICAgICBub2RlTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGUubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZmllbGQsIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24ubGVmdC5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBmcmVlemUgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkuYXQoLTEpXG5cbiAgaWYgKCFmcmVlemUgfHwgZnJlZXplLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgZnJlZXplLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIgfHwgZnJlZXplLmV4cHJlc3Npb24ub3B0aW9uYWwgfHxcbiAgICBmcmVlemUuZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHwgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzWzBdLnR5cGUgIT0gXCJUaGlzRXhwcmVzc2lvblwiIHx8XG4gICAgIWlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShmcmVlemUuZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGNvbnN0cnVjdG9yIHdpdGhvdXQgZmluYWwgT2JqZWN0LmZyZWV6ZSh0aGlzKVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuaWQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBjYW5vbmljYWwgc291cmNlIGZyZWV6ZSBvciB0aGUgZ2VuZXJhdGVkIGlkZW50aWZpZXItZnJlZSBpbnRyaW5zaWMgb3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DYWxsRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEZpbmFsIGNvbnN0cnVjdG9yIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgY2FsbCBvd25zIHRoZSBuYXRpdmUgcmVjb3JkLWZyZWV6ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YVNjcmlwdFJlY29yZEZyZWV6ZShleHByZXNzaW9uKSB7XG4gIGNvbnN0IGNhbGxlZSA9IGV4cHJlc3Npb24uY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub3B0aW9uYWwgfHxcbiAgICBjYWxsZWUucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPSBcImZyZWV6ZVwiKSByZXR1cm4gZmFsc2VcbiAgaWYgKGNhbGxlZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNhbGxlZS5vYmplY3QubmFtZSA9PSBcIk9iamVjdFwiXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgfHwgY2FsbGVlLm9iamVjdC5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0Lm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLm9iamVjdC5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5vYmplY3QucHJvcGVydHkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjYWxsZWUub2JqZWN0Lm9iamVjdC50eXBlID09IFwiT2JqZWN0RXhwcmVzc2lvblwiICYmIGNhbGxlZS5vYmplY3Qub2JqZWN0LnByb3BlcnRpZXMubGVuZ3RoID09IDAgJiZcbiAgICBjYWxsZWUub2JqZWN0Lm9iamVjdC5leHRyYT8ucGFyZW50aGVzaXplZCA9PT0gdHJ1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBpZi9lbHNlIHRlcm1pbmFsIHNoYXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWZTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnRlc3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY29uc2VxdWVudCA9IG5vZGUuY29uc2VxdWVudC50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgID8gY29udmVydEJsb2NrKG5vZGUuY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29uc2VxdWVudENvbnRleHQpXG4gICAgOiBjb252ZXJ0QmxvY2soW25vZGUuY29uc2VxdWVudF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGVcbiAgICA/IG5vZGUuYWx0ZXJuYXRlLnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiXG4gICAgICA/IGNvbnZlcnRCbG9jayhub2RlLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYWx0ZXJuYXRlQ29udGV4dClcbiAgICAgIDogY29udmVydEJsb2NrKFtub2RlLmFsdGVybmF0ZV0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQsIG5vZGVMb2NhdGlvbihub2RlLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb24sXG4gICAgY29uc2VxdWVudCxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBibG9jay1ib2RpZWQgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuV2hpbGVTdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCB3aGlsZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIGdlbmVyYXRlZCBzY2FsYXIgb3V0cHV0IG1heSBjb250YWluIHNpZ25lZCB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFdoaWxlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIndoaWxlIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihub2RlLCBcIndoaWxlXCIsIG5vZGUuc3RhcnQgPz8gMCwgbm9kZS50ZXN0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgQmFiZWwgcGFyc2VkIGFuIG9wZXJhdGlvbiB0aGF0IG1ha2VzIGdlbmVyYXRlZCBKYXZhU2NyaXB0LWZhbWlseSBzY2FsYXIgb3V0cHV0IHJlcXVpcmUgemVybyBjYW5vbmljYWxpemF0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHBhcnNlciBzdWJ0cmVlLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc3VidHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uIHN5bnRheC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyh2YWx1ZSwgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG4gIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIHZpc2l0ZWQuYWRkKHZhbHVlKVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFJlZmxlY3QuZ2V0KHZhbHVlLCBcIm9wZXJhdG9yXCIpID09IFwiLVwiKSByZXR1cm4gdHJ1ZVxuICBpZiAoUmVmbGVjdC5nZXQodmFsdWUsIFwidHlwZVwiKSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIipcIikgcmV0dXJuIHRydWVcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnNvbWUoKFtrZXksIGNoaWxkXSkgPT5cbiAgICAhW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpICYmXG4gICAgKEFycmF5LmlzQXJyYXkoY2hpbGQpXG4gICAgICA/IGNoaWxkLnNvbWUoKGl0ZW0pID0+IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oaXRlbSwgdmlzaXRlZCkpXG4gICAgICA6IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oY2hpbGQsIHZpc2l0ZWQpKSlcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIHRoZSBwYXJzZXItb3duZWQgcmVjZWl2ZXIgcGFyZW50aGVzZXMgZW1pdHRlZCBvbmx5IGZvciBjYW5vbmljYWwgaW50ZWdlciBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN1cGVyfSByZWNlaXZlciAtIFF1YWxpZmllZC1jYWxsIHJlY2VpdmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGNhbGwgLSBPdXRlciBgdG9TdHJpbmdgIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVjZWl2ZXIgaGFzIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gaGFzQ2Fub25pY2FsWmVyb1JlY2VpdmVyV3JhcHBlcihyZWNlaXZlciwgY2FsbCkge1xuICBjb25zdCBleHRyYSA9IFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCBcImV4dHJhXCIpXG4gIGNvbnN0IGV4cHJlc3Npb25QYXJlbnRoZXNlcyA9IFtcIkJpbmFyeUV4cHJlc3Npb25cIiwgXCJMb2dpY2FsRXhwcmVzc2lvblwiLCBcIlVuYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhyZWNlaXZlci50eXBlKSA/IDEgOiAwXG4gIGNvbnN0IHdyYXBwZXJQYXJlbnRoZXNlcyA9IGV4cHJlc3Npb25QYXJlbnRoZXNlcyArIDFcbiAgY29uc3QgcHJvcGVydHkgPSBjYWxsLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiID8gY2FsbC5jYWxsZWUucHJvcGVydHkgOiB1bmRlZmluZWRcblxuICByZXR1cm4gQm9vbGVhbihleHRyYSkgJiYgdHlwZW9mIGV4dHJhID09IFwib2JqZWN0XCIgJiYgUmVmbGVjdC5nZXQoZXh0cmEsIFwicGFyZW50aGVzaXplZFwiKSA9PT0gdHJ1ZSAmJlxuICAgIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVuU3RhcnRcIikgPT09IGNhbGwuc3RhcnQgJiYgdHlwZW9mIGNhbGwuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgY2FsbC5lbmQgPT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiByZWNlaXZlci5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiByZWNlaXZlci5lbmQgPT0gXCJudW1iZXJcIiAmJiBwcm9wZXJ0eT8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHR5cGVvZiBwcm9wZXJ0eS5zdGFydCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBwcm9wZXJ0eS5lbmQgPT0gXCJudW1iZXJcIiAmJiBjYWxsLmNhbGxlZS5zdGFydCA9PT0gY2FsbC5zdGFydCAmJlxuICAgIHJlY2VpdmVyLnN0YXJ0ID09IGNhbGwuc3RhcnQgKyB3cmFwcGVyUGFyZW50aGVzZXMgJiYgcHJvcGVydHkuc3RhcnQgPT0gcmVjZWl2ZXIuZW5kICsgd3JhcHBlclBhcmVudGhlc2VzICsgMSAmJlxuICAgIHByb3BlcnR5LmVuZCA9PSBwcm9wZXJ0eS5zdGFydCArIFwidG9TdHJpbmdcIi5sZW5ndGggJiYgY2FsbC5lbmQgPT0gcHJvcGVydHkuZW5kICsgMlxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29uc29sZS5sb2cgZW50cnktcG9pbnQgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgdGhpcyBwYXJzZWQgbW9kdWxlIGNvbnRhaW5zIGEgc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBub2RlLmV4cHJlc3Npb24udHlwZSAhPSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYWxsID0gbm9kZS5leHByZXNzaW9uXG4gIGNvbnN0IGNhbGxlZSA9IGNhbGwuY2FsbGVlXG5cbiAgaWYgKGNhbGxlZS50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5jb21wdXRlZCB8fCBjYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICBjYWxsZWUub2JqZWN0Lm5hbWUgIT0gXCJjb25zb2xlXCIgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJsb2dcIiB8fFxuICAgIGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICBsZXQgYXJndW1lbnQgPSBjYWxsLmFyZ3VtZW50c1swXVxuXG4gIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgYXJndW1lbnQuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIWFyZ3VtZW50LmNhbGxlZS5jb21wdXRlZCAmJlxuICAgICFhcmd1bWVudC5jYWxsZWUub3B0aW9uYWwgJiYgYXJndW1lbnQuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09IFwidG9TdHJpbmdcIiAmJiAhYXJndW1lbnQub3B0aW9uYWwgJiYgIWFyZ3VtZW50LnR5cGVBcmd1bWVudHMgJiZcbiAgICAhYXJndW1lbnQudHlwZVBhcmFtZXRlcnMgJiYgYXJndW1lbnQuYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgaWYgKCFjYW5vbmljYWxaZXJvUmVxdWlyZWQgfHwgIWhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIoYXJndW1lbnQuY2FsbGVlLm9iamVjdCwgYXJndW1lbnQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZW50cnktcG9pbnQgcXVhbGlmaWVkIGNhbGxcIiwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuY2FsbGVlLm9iamVjdFxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLCBraW5kOiBcIlByaW50U3RhdGVtZW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFBhcnNlcyBKYXZhU2NyaXB0IG9yIFR5cGVTY3JpcHQgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2YWx1ZVJlY29yZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcyA9IFtdLCBmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgcHJvZ3JhbX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBwcm9ncmFtID8gXCJtb2R1bGVcIiA6IFwic2NyaXB0XCJ9KVxuICBjb25zdCB0b2tlbnMgPSBmaWxlLnRva2VucyA/PyBbXVxuICBjb25zdCB0b2tlbkluZGV4ID0ge2J5U3RhcnQ6IG5ldyBNYXAodG9rZW5zLm1hcCgodG9rZW4pID0+IFt0b2tlbi5zdGFydCwgdG9rZW5dKSksIHRva2Vuc31cbiAgY29uc3QgY2Fub25pY2FsWmVyb1JlcXVpcmVkID0gcGFyc2VyVHJlZVJlcXVpcmVzQ2Fub25pY2FsWmVybyhmaWxlLnByb2dyYW0pXG5cbiAgcmVtZW1iZXJUb2tlbnMoZmlsZSwgdG9rZW5JbmRleClcbiAgY29uc3QgbnVsbENoZWNrT3B0T3V0ID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICA/IGZpbGUuY29tbWVudHM/LmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwiQHRzLW5vY2hlY2tcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmIChudWxsQ2hlY2tPcHRPdXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZGlzYWJsZWQgVHlwZVNjcmlwdCBjaGVja2luZyBkaXJlY3RpdmVcIiwgbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LnN0YXJ0ID8/IDAsXG4gICAgICBudWxsQ2hlY2tPcHRPdXQuZW5kID8/IHNvdXJjZS5sZW5ndGhcbiAgICApKVxuICB9XG4gIGlmIChmaWxlLnByb2dyYW0uZGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInRvcC1sZXZlbCBkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGZpbGUucHJvZ3JhbS5kaXJlY3RpdmVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gKi9cbiAgbGV0IHNlbWFudGljTm9kZXMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAoIXByb2dyYW0pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbXBvcnQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZXhwb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChub2RlLnNvdXJjZSB8fCBub2RlLmRlY2xhcmF0aW9uICYmICFbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhub2RlLmRlY2xhcmF0aW9uLnR5cGUpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnQgb3IgdW5zdXBwb3J0ZWQgZXhwb3J0ZWQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgaWYgKCFub2RlLmRlY2xhcmF0aW9uLmxlYWRpbmdDb21tZW50cyAmJiBub2RlLmxlYWRpbmdDb21tZW50cykgbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50c1xuICAgICAgICBzZW1hbnRpY05vZGVzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAobm9kZS5kZWNsYXJhdGlvbikpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgc2VtYW50aWNOb2Rlcy5wdXNoKG5vZGUpXG4gIH1cbiAgc2VtYW50aWNOb2RlcyA9IHRhc2swMzRKYXZhU2NyaXB0Tm9kZXMoc2VtYW50aWNOb2RlcywgY2FwYWJpbGl0aWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2xhc3NOb2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zdXBlckNsYXNzPy50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuc3VwZXJDbGFzcy5uYW1lID09IFwiRXJyb3JcIilcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJlxuICAgIG5vZGUuYm9keS5ib2R5LnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1Byb3BlcnR5XCIgfHwgbWVtYmVyLnR5cGUgPT0gXCJDbGFzc1ByaXZhdGVQcm9wZXJ0eVwiKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLmlkPy5uYW1lID8/IFwiXCJcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBjbGFzc0pzZG9jVHlwZVBhcmFtZXRlcnMobm9kZSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiLFxuICAgICAgLi4uKHR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+ICh7XG4gICAgY29uc3RydWN0b3I6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ29uc3RydWN0b3JEZWNsYXJhdGlvbn0gKi8gKHt9KSxcbiAgICBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2xhc3NEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBtZXRob2RzOiBbXSwgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGNvbnN0IHZhbHVlUmVjb3JkTmFtZXMgPSAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59ICovIChcbiAgICBuZXcgTWFwKHByb2dyYW0/LnZhbHVlUmVjb3JkcyA/PyBwcm9ncmFtPy5yZWNvcmRzID8/IFtdKSlcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbT8uZXJyb3JzID8/IFtdKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZXJyb3JEZWNsYXJhdGlvbnMpIGVycm9yTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCBlcnJvcnNCeUlkID0gbmV3IE1hcChbLi4uZXJyb3JOYW1lcy52YWx1ZXMoKV0ubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBlcnJvcnMgPSBlcnJvck5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRKYXZhU2NyaXB0RXJyb3Iobm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSB2YWx1ZVJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBjbGFzc0RlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzRGVjbGFyYXRpb25zKSB2YWx1ZVJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgdmFsdWVSZWNvcmRzQnlJZCA9IG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKGNsYXNzRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3NlcyA9IHJlZmVyZW5jZUNsYXNzTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gcHJlZGVjbGFyZVJlZmVyZW5jZUNsYXNzKFxuICAgIG5vZGUsIGNsYXNzRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlXG4gICkpXG4gIGNvbnN0IGZ1bmN0aW9uTm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKVxuICBjb25zdCBzaWduYXR1cmVzID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICBjb25zdCBmdW5jdGlvblNpZ25hdHVyZXMgPSBuZXcgTWFwKFsuLi5wcm9ncmFtPy5mdW5jdGlvbnMgPz8gW11dLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMpKSB7XG4gICAgaWYgKCFmdW5jdGlvblNpZ25hdHVyZXMuaGFzKG9wZXJhdGlvbi5uYW1lKSkgZnVuY3Rpb25TaWduYXR1cmVzLnNldChvcGVyYXRpb24ubmFtZSwge1xuICAgICAgbG9jYXRpb246IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogb3BlcmF0aW9uLm5hbWUsXG4gICAgICBuYW1lTG9jYXRpb246IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgcGFyYW1ldGVyczogb3BlcmF0aW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+ICh7Li4ucGFyYW1ldGVyLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKX0pKSxcbiAgICAgIHJldHVyblR5cGU6IG9wZXJhdGlvbi5yZXR1cm5UeXBlXG4gICAgfSlcbiAgfVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IHJlY29yZHMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgID8gY29udmVydFR5cGVTY3JpcHRSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgOiBjb252ZXJ0SmF2YVNjcmlwdFJlY29yZChub2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZWZlcmVuY2VDbGFzc05vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnZlcnRSZWZlcmVuY2VDbGFzc0JvZGllcyhyZWZlcmVuY2VDbGFzc05vZGVzW2luZGV4XSwgY2xhc3Nlc1tpbmRleF0sIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLFxuICAgICAgdmFsdWVSZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICBjYW5vbmljYWxaZXJvUmVxdWlyZWQpXG4gIH1cbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcywgdmFsdWVSZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsXG4gICAgICBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSlcbiAgY29uc3QgZW50cnlOb2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgJiYgbm9kZS50eXBlICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0uaXNFbnRyeSAmJiBlbnRyeU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZW50cnlOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGVudHJ5Tm9kZXMubGVuZ3RoID09IDAgPyBsb2NhdGlvbiA6IGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgZmlsZW5hbWUsXG4gICAgc291cmNlLFxuICAgIGVudHJ5Tm9kZXNbMF0uc3RhcnQgPz8gMCxcbiAgICBlbnRyeU5vZGVzLmF0KC0xKT8uZW5kID8/IHNvdXJjZS5sZW5ndGhcbiAgKVxuICBjb25zdCBlbnRyeUJsb2NrID0gY29udmVydEJsb2NrKFxuICAgIGVudHJ5Tm9kZXMsXG4gICAgbGFuZ3VhZ2UsXG4gICAgZmlsZW5hbWUsXG4gICAgc291cmNlLFxuICAgIGNhbm9uaWNhbFplcm9SZXF1aXJlZCxcbiAgICB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yczogZXJyb3JzQnlJZCwgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgICBvcmRlcmVkTWFwRGVjbGFyYXRpb25zOiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yKGVudHJ5Tm9kZXMpLCByZWNvcmROYW1lcywgcmVjb3JkczogdmFsdWVSZWNvcmRzQnlJZCwgdmFsdWVSZWNvcmROYW1lc30sXG4gICAgZW50cnlMb2NhdGlvblxuICApXG5cbiAgaWYgKCFwcm9ncmFtICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGVycm9ycy5sZW5ndGggPiAwID8ge2Vycm9yc30gOiB7fSksXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBOb2RlIHByb2JlIHN1cHBvcnQgYmVmb3JlIHBvcnRhYmxlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gbm9kZXMgLSBQYXJzZWQgdG9wLWxldmVsIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gUG9ydGFibGUgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFTY3JpcHROb2Rlcyhub2RlcywgY2FwYWJpbGl0aWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWlzVGFzazAzNFJlc291cmNlUHJvYmUoY2FwYWJpbGl0aWVzKSkgcmV0dXJuIG5vZGVzXG4gIGNvbnN0IGZpcnN0ID0gbm9kZXNbMF1cbiAgY29uc3QgbWFya2VyID0gZmlyc3Q/LmxlYWRpbmdDb21tZW50cz8uc29tZSgoY29tbWVudCkgPT4gY29tbWVudC50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiZcbiAgICBjb21tZW50LnZhbHVlLnRyaW0oKSA9PSBcInNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydFwiKVxuXG4gIGlmICghbWFya2VyKSByZXR1cm4gbm9kZXNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBsYW5ndWFnZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihmaXJzdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgW1wiVmFyaWFibGVEZWNsYXJhdGlvblwiLCBcIl9fc2VtYW50aWZvbGRUYXNrMDM0RnNcIl0sIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIl0sIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZVJlYWRGYWlsdXJlXCJdLFxuICAgIFtcIkNsYXNzRGVjbGFyYXRpb25cIiwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIl0sXG4gICAgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlUmVzb3VyY2VcIl0sIFtcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiwgXCJfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlXCJdLFxuICAgIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSwgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSxcbiAgICBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVSZWFkXCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVDbG9zZVwiXSwgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICAvKipcbiAgICogUmVhZHMgdGhlIGRlY2xhcmF0aW9uIG5hbWUgdXNlZCB0byB2ZXJpZnkgb25lIHByb3RlY3RlZCBzdXBwb3J0IHN0YXRlbWVudC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50IHwgdW5kZWZpbmVkfSBub2RlIC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gRGVjbGFyZWQgbmFtZS5cbiAgICovXG4gIGNvbnN0IG5vZGVOYW1lID0gKG5vZGUpID0+IHtcbiAgICBpZiAoIW5vZGUpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAobm9kZS50eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiICYmIG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxICYmIG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBub2RlLmRlY2xhcmF0aW9uc1swXS5pZC5uYW1lXG4gICAgfVxuICAgIGNvbnN0IGlkID0gUmVmbGVjdC5nZXQobm9kZSwgXCJpZFwiKVxuICAgIHJldHVybiBpZCAmJiB0eXBlb2YgaWQgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5nZXQoaWQsIFwibmFtZVwiKSA9PSBcInN0cmluZ1wiID8gUmVmbGVjdC5nZXQoaWQsIFwibmFtZVwiKSA6IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBleHBlY3RlZC5ldmVyeSgoW3R5cGUsIG5hbWVdLCBpbmRleCkgPT4gbm9kZXNbaW5kZXhdPy50eXBlID09IHR5cGUgJiYgbm9kZU5hbWUobm9kZXNbaW5kZXhdKSA9PSBuYW1lKVxuICBjb25zdCBuZXh0ID0gbm9kZXNbZXhwZWN0ZWQubGVuZ3RoXVxuICBjb25zdCBlbmRlZCA9IG5leHQ/LmxlYWRpbmdDb21tZW50cz8uc29tZSgoY29tbWVudCkgPT4gY29tbWVudC50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiZcbiAgICBjb21tZW50LnZhbHVlLnRyaW0oKSA9PSBcInNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcIilcblxuICBpZiAoIW1hdGNoZXMgfHwgbmV4dCAmJiAhZW5kZWQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihmaXJzdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgcmV0dXJuIG5vZGVzLnNsaWNlKGV4cGVjdGVkLmxlbmd0aClcbn1cblxuLyoqXG4gKiBJbnZva2VzIEJhYmVsIGFuZCBub3JtYWxpemVzIHN5bnRheCBmYWlsdXJlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7XCJtb2R1bGVcIiB8IFwic2NyaXB0XCJ9IGlucHV0LnNvdXJjZVR5cGUgLSBFeHBsaWNpdCBwYXJzZXIgZ29hbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvcGFyc2VyXCIpLlBhcnNlUmVzdWx0PGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5GaWxlPn0gQmFiZWwgZmlsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VCYWJlbFNvdXJjZSh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHNvdXJjZVR5cGV9KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlQmFiZWwoc291cmNlLCB7XG4gICAgICBhbGxvd0F3YWl0T3V0c2lkZUZ1bmN0aW9uOiB0cnVlLFxuICAgICAgcGx1Z2luczogbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBbXCJkZWNvcmF0b3JzLWxlZ2FjeVwiLCBcInR5cGVzY3JpcHRcIl0gOiBbXCJkZWNvcmF0b3JzLWxlZ2FjeVwiXSxcbiAgICAgIHNvdXJjZUZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZVR5cGUsXG4gICAgICB0b2tlbnM6IHRydWVcbiAgICB9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBwYXJzZUZhaWx1cmUobGFuZ3VhZ2UsIGVycm9yLCBiYWJlbFBhcnNlckZhaWx1cmVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBvbmx5IHBhcnNlci1vd25lZCBFU00gaW1wb3J0L2V4cG9ydCBkZWNsYXJhdGlvbnMgZm9yIHByb2dyYW0gYXNzZW1ibHkuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7e2ltcG9ydHM6IHtkZWNsYXJhdGlvbkxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgaW1wb3J0ZWROYW1lOiBzdHJpbmcsIGltcG9ydGVkTmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2FsTmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzcGVjaWZpZXI6IHN0cmluZywgc3RkbGliQ2FuZGlkYXRlPzogdHJ1ZSwgdHlwZU9ubHk6IGJvb2xlYW59W10sIGV4cG9ydHM6IHtkZWNsYXJhdGlvbkxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGV4cG9ydGVkTmFtZTogc3RyaW5nLCBleHBvcnRlZE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0eXBlT25seTogYm9vbGVhbn1bXX19IFBhcnNlci1vd25lZCBFU00gbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RKYXZhU2NyaXB0VHlwZVNjcmlwdE1vZHVsZSh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2V9KSB7XG4gIGNvbnN0IGZpbGUgPSBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZTogXCJtb2R1bGVcIn0pXG4gIGNvbnN0IHRva2VucyA9IGZpbGUudG9rZW5zID8/IFtdXG5cbiAgcmVtZW1iZXJUb2tlbnMoZmlsZSwge2J5U3RhcnQ6IG5ldyBNYXAodG9rZW5zLm1hcCgodG9rZW4pID0+IFt0b2tlbi5zdGFydCwgdG9rZW5dKSksIHRva2Vuc30pXG4gIGNvbnN0IGNvbW1vbkpzID0gZmluZENvbW1vbkpzTm9kZShmaWxlLnByb2dyYW0pXG5cbiAgaWYgKGNvbW1vbkpzKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJDb21tb25KUyByZXF1aXJlL21vZHVsZSBleHBvcnRzXCIsIG5vZGVMb2NhdGlvbihjb21tb25KcywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGltcG9ydHMgPSBbXVxuICBjb25zdCBleHBvcnRzID0gW11cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgZmlsZS5wcm9ncmFtLmJvZHkpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikge1xuICAgICAgY29uc3QgcmVsYXRpdmUgPSBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwiLi9cIikgfHwgbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcIi4uL1wiKVxuICAgICAgY29uc3Qgc3RkbGliQ2FuZGlkYXRlID0gbm9kZS5zb3VyY2UudmFsdWUuc3RhcnRzV2l0aChcInNlbWFudGlmb2xkOlwiKSB8fCBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwibm9kZTpcIilcblxuICAgICAgaWYgKCFyZWxhdGl2ZSAmJiAhc3RkbGliQ2FuZGlkYXRlKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImJhcmUgcGFja2FnZSBpbXBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoID09IDApIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNpZGUtZWZmZWN0LW9ubHkgaW1wb3J0XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmICgobm9kZS5hdHRyaWJ1dGVzPy5sZW5ndGggPz8gMCkgPiAwIHx8IChub2RlLmFzc2VydGlvbnM/Lmxlbmd0aCA/PyAwKSA+IDAgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJwaGFzZVwiKSkge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbXBvcnQgYXR0cmlidXRlcyBvciBwaGFzZVwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgICAgaWYgKHNwZWNpZmllci50eXBlICE9IFwiSW1wb3J0U3BlY2lmaWVyXCIgfHwgc3BlY2lmaWVyLmltcG9ydGVkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgc3BlY2lmaWVyLnR5cGUsIG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG4gICAgICAgIGltcG9ydHMucHVzaCh7XG4gICAgICAgICAgZGVjbGFyYXRpb25Mb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIGltcG9ydGVkTmFtZTogc3BlY2lmaWVyLmltcG9ydGVkLm5hbWUsXG4gICAgICAgICAgaW1wb3J0ZWROYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIuaW1wb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIGxvY2FsTmFtZTogc3BlY2lmaWVyLmxvY2FsLm5hbWUsXG4gICAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIubG9jYWwsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3BlY2lmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBwYXRoTG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLnNvdXJjZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgc3BlY2lmaWVyOiBub2RlLnNvdXJjZS52YWx1ZSxcbiAgICAgICAgICAuLi4oIXJlbGF0aXZlID8ge3N0ZGxpYkNhbmRpZGF0ZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpfSA6IHt9KSxcbiAgICAgICAgICB0eXBlT25seTogbm9kZS5pbXBvcnRLaW5kID09IFwidHlwZVwiIHx8IHNwZWNpZmllci5pbXBvcnRLaW5kID09IFwidHlwZVwiXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlICE9IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiKSBjb250aW51ZVxuICAgIGlmIChub2RlLnNvdXJjZSkgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmUtZXhwb3J0XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5leHBvcnRLaW5kID09IFwidHlwZVwiKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0eXBlLW9ubHkgZXhwb3J0XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5kZWNsYXJhdGlvbikge1xuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24udHlwZSAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5zdXBwb3J0ZWQgZXhwb3J0ZWQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUuZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgaWRlbnRpZmllciA9IG5vZGUuZGVjbGFyYXRpb24uaWRcblxuICAgICAgaWYgKCFpZGVudGlmaWVyKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhbm9ueW1vdXMgZXhwb3J0ZWQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUuZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgZXhwb3J0cy5wdXNoKHtcbiAgICAgICAgZGVjbGFyYXRpb25Mb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBleHBvcnRlZE5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgICAgZXhwb3J0ZWROYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYWxOYW1lOiBpZGVudGlmaWVyLm5hbWUsXG4gICAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oaWRlbnRpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgICB9KVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgIT0gXCJFeHBvcnRTcGVjaWZpZXJcIiB8fCBzcGVjaWZpZXIubG9jYWwudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgc3BlY2lmaWVyLnR5cGUsIG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKHNwZWNpZmllci5leHBvcnRLaW5kID09IFwidHlwZVwiKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0eXBlLW9ubHkgZXhwb3J0XCIsIG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgZXhwb3J0cy5wdXNoKHtcbiAgICAgICAgZGVjbGFyYXRpb25Mb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBleHBvcnRlZE5hbWU6IHNwZWNpZmllci5leHBvcnRlZC5uYW1lLFxuICAgICAgICBleHBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5leHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGxvY2FsTmFtZTogc3BlY2lmaWVyLmxvY2FsLm5hbWUsXG4gICAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmxvY2FsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBkeW5hbWljID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJkeW5hbWljXCIsIG5ldyBTZXQoKSlcblxuICBpZiAoZHluYW1pYykgZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfRFlOQU1JQ19SRUZFUkVOQ0VcIixcbiAgICBcIkR5bmFtaWMgaW1wb3J0IGNhbm5vdCBwcm92ZSBhIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGlkZW50aXR5LlwiLCBub2RlTG9jYXRpb24oZHluYW1pYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHN0ZGxpYkJpbmRpbmdzID0gbmV3IFNldChpbXBvcnRzLmZpbHRlcigoe3N0ZGxpYkNhbmRpZGF0ZX0pID0+IHN0ZGxpYkNhbmRpZGF0ZSkubWFwKCh7bG9jYWxOYW1lfSkgPT4gbG9jYWxOYW1lKSlcblxuICBpZiAoc3RkbGliQmluZGluZ3Muc2l6ZSA+IDApIHtcbiAgICBjb25zdCBtdXRhdGlvbiA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwibXV0YXRpb25cIiwgc3RkbGliQmluZGluZ3MpXG5cbiAgICBpZiAobXV0YXRpb24pIGZhY2FkZUZyb250ZW5kRmFpbHVyZShsYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX1NIQURPV0VEXCIsXG4gICAgICBcIkEgcGFyc2VyLXByb3ZlZCBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBiaW5kaW5nIGNhbm5vdCBiZSByZWFzc2lnbmVkIG9yIHNoYWRvd2VkLlwiLCBub2RlTG9jYXRpb24obXV0YXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IHJlZmxlY3Rpb24gPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcInJlZmxlY3Rpb25cIiwgc3RkbGliQmluZGluZ3MpXG5cbiAgICBpZiAocmVmbGVjdGlvbikgZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfUkVGTEVDVElPTl9VTlNVUFBPUlRFRFwiLFxuICAgICAgXCJSZWZsZWN0aXZlIGxvb2t1cCBjYW5ub3QgcHJlc2VydmUgYSBwcm92ZWQgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgc3ltYm9sIGlkZW50aXR5LlwiLCBub2RlTG9jYXRpb24ocmVmbGVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHN9XG59XG5cbi8qKlxuICogRmluZHMgcGFyc2VyLW93bmVkIGR5bmFtaWMsIG11dGF0aW5nLCBvciByZWZsZWN0aXZlIGNvbnN0cnVjdHMgcmVsZXZhbnQgdG8gZmFjYWRlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1wiZHluYW1pY1wiIHwgXCJtdXRhdGlvblwiIHwgXCJyZWZsZWN0aW9uXCJ9IG1vZGUgLSBSZWplY3RlZCBjb25zdHJ1Y3QgY2xhc3MuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBiaW5kaW5ncyAtIFBhcnNlci1wcm92ZWQgbmF0aXZlIGZhY2FkZSBiaW5kaW5ncy5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBndWFyZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZSB8IHVuZGVmaW5lZH0gRmlyc3QgcmVqZWN0ZWQgcGFyc2VyIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZSh2YWx1ZSwgbW9kZSwgYmluZGluZ3MsIHNlZW4gPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIHNlZW4uYWRkKHZhbHVlKVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuXG4gIGlmIChtb2RlID09IFwiZHluYW1pY1wiICYmIG5vZGUudHlwZSA9PSBcIkltcG9ydEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBub2RlLnNvdXJjZVxuXG4gICAgaWYgKGlzRmFjYWRlTW9kdWxlU3RyaW5nTm9kZShzb3VyY2VOb2RlKSkgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgfVxuICBpZiAobW9kZSA9PSBcImR5bmFtaWNcIiAmJiBub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlICYmIHR5cGVvZiBub2RlLmNhbGxlZSA9PSBcIm9iamVjdFwiICYmXG4gICAgUmVmbGVjdC5nZXQobm9kZS5jYWxsZWUsIFwidHlwZVwiKSA9PSBcIkltcG9ydFwiKSB7XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IEFycmF5LmlzQXJyYXkobm9kZS5hcmd1bWVudHMpID8gbm9kZS5hcmd1bWVudHMgOiBbXVxuXG4gICAgaWYgKGlzRmFjYWRlTW9kdWxlU3RyaW5nTm9kZShhcmd1bWVudHNfWzBdKSkgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgfVxuICBpZiAobW9kZSA9PSBcInJlZmxlY3Rpb25cIiAmJiBub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlICYmIHR5cGVvZiBub2RlLmNhbGxlZSA9PSBcIm9iamVjdFwiICYmXG4gICAgUmVmbGVjdC5nZXQobm9kZS5jYWxsZWUsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIiAmJiBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJuYW1lXCIpID09IFwiZXZhbFwiKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgfVxuICBpZiAobW9kZSA9PSBcIm11dGF0aW9uXCIgJiYgKG5vZGUudHlwZSA9PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgfHwgbm9kZS50eXBlID09IFwiVXBkYXRlRXhwcmVzc2lvblwiKSkge1xuICAgIGNvbnN0IHRhcmdldCA9IG5vZGUudHlwZSA9PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgPyBub2RlLmxlZnQgOiBub2RlLmFyZ3VtZW50XG5cbiAgICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT0gXCJvYmplY3RcIiAmJiBSZWZsZWN0LmdldCh0YXJnZXQsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgYmluZGluZ3MuaGFzKFN0cmluZyhSZWZsZWN0LmdldCh0YXJnZXQsIFwibmFtZVwiKSkpKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgaWYgKFtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShpdGVtLCBtb2RlLCBiaW5kaW5ncywgc2VlbilcblxuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShjaGlsZCwgbW9kZSwgYmluZGluZ3MsIHNlZW4pXG5cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBCYWJlbCBzdHJpbmcgbGl0ZXJhbCBmb3Igb25lIGNhdGFsb2ctc3R5bGUgc3RkbGliIG1vZHVsZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBpbXBvcnQgYXJndW1lbnQvc291cmNlIG5vZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZXhhY3QgbGl0ZXJhbCBpcyBhIGZhY2FkZSBtb2R1bGUgY2FuZGlkYXRlLlxuICovXG5mdW5jdGlvbiBpc0ZhY2FkZU1vZHVsZVN0cmluZ05vZGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IGxpdGVyYWwgPSBub2RlLnZhbHVlXG5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PSBcIlN0cmluZ0xpdGVyYWxcIiAmJiB0eXBlb2YgbGl0ZXJhbCA9PSBcInN0cmluZ1wiICYmXG4gICAgKGxpdGVyYWwuc3RhcnRzV2l0aChcInNlbWFudGlmb2xkOlwiKSB8fCBsaXRlcmFsLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSlcbn1cblxuLyoqXG4gKiBUaHJvd3Mgb25lIHN0YWJsZSBsb2NhdGVkIGZhY2FkZSBmcm9udGVuZCBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIC0gU3RhYmxlIGRpYWdub3N0aWMgY29kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRGlhZ25vc3RpYyBkZXRhaWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFBhcnNlci1vd25lZCBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBjb2RlLCBtZXNzYWdlLCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlLCBsYW5ndWFnZSwgbG9jYXRpb24sIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIEZpbmRzIENvbW1vbkpTIGNvbnN0cnVjdHMgdGhyb3VnaCBCYWJlbCBub2RlcyByYXRoZXIgdGhhbiBzb3VyY2UtdGV4dCBtYXRjaGluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBzdWJ0cmVlLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIGd1YXJkLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlIHwgdW5kZWZpbmVkfSBVbnN1cHBvcnRlZCBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uSnNOb2RlKHZhbHVlLCBzZWVuID0gbmV3IFdlYWtTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlXG5cbiAgICBpZiAoY2FsbGVlICYmIHR5cGVvZiBjYWxsZWUgPT0gXCJvYmplY3RcIiAmJiBSZWZsZWN0LmdldChjYWxsZWUsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIiAmJiBSZWZsZWN0LmdldChjYWxsZWUsIFwibmFtZVwiKSA9PSBcInJlcXVpcmVcIikge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IG9iamVjdCA9IG5vZGUub2JqZWN0XG5cbiAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT0gXCJvYmplY3RcIiAmJiBSZWZsZWN0LmdldChvYmplY3QsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgW1wiZXhwb3J0c1wiLCBcIm1vZHVsZVwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQob2JqZWN0LCBcIm5hbWVcIikpKSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9ICovICh2YWx1ZSlcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZENvbW1vbkpzTm9kZShpdGVtLCBzZWVuKVxuXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZENvbW1vbkpzTm9kZShjaGlsZCwgc2VlbilcblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBCYWJlbCdzIHplcm8tYmFzZWQgVVRGLTE2IGZhaWx1cmUgb2Zmc2V0IHdoZW4gYXZhaWxhYmxlLlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvciAtIE5hdGl2ZSBCYWJlbCBwYXJzZXIgZXJyb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBSZXF1ZXN0ZWQgc291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRmFpbHVyZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gYmFiZWxQYXJzZXJGYWlsdXJlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT0gXCJvYmplY3RcIikgcmV0dXJuIG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGRpcmVjdCA9IFJlZmxlY3QuZ2V0KGVycm9yLCBcInBvc1wiKVxuICBjb25zdCBwYXJzZXJMb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KGVycm9yLCBcImxvY1wiKVxuICBjb25zdCBsb2NhdGVkID0gcGFyc2VyTG9jYXRpb24gJiYgdHlwZW9mIHBhcnNlckxvY2F0aW9uID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChwYXJzZXJMb2NhdGlvbiwgXCJpbmRleFwiKSA6IHVuZGVmaW5lZFxuICBjb25zdCBvZmZzZXQgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihkaXJlY3QpID8gZGlyZWN0IDogbG9jYXRlZFxuXG4gIGlmICh0eXBlb2Ygb2Zmc2V0ICE9IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9mZnNldCkgfHwgb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzb3VyY2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBvZmZzZXQsIE1hdGgubWluKG9mZnNldCArIDEsIHNvdXJjZS5sZW5ndGgpKVxufVxuXG4vKipcbiAqIEFzc29jaWF0ZXMgQmFiZWwgbm9kZXMgd2l0aCB0aGVpciBwYXJzZXIgdG9rZW4gc3RyZWFtIHdpdGhvdXQgbGVha2luZyBpdCBpbnRvIHNlbWFudGljIHZhbHVlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZSAtIEN1cnJlbnQgcGFyc2VyIHZhbHVlLlxuICogQHBhcmFtIHtCYWJlbFRva2VuSW5kZXh9IHRva2VucyAtIEluZGV4ZWQgcGFyc2VyIHRva2Vucy5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbdmlzaXRlZF0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlbWVtYmVyVG9rZW5zKHZhbHVlLCB0b2tlbnMsIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSkpIHJldHVyblxuXG4gIHZpc2l0ZWQuYWRkKHZhbHVlKVxuICBub2RlVG9rZW5zLnNldCh2YWx1ZSwgdG9rZW5zKVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT0gXCJvYmplY3RcIikgcmVtZW1iZXJUb2tlbnMoaXRlbSwgdG9rZW5zLCB2aXNpdGVkKVxuICAgIH0gZWxzZSBpZiAoY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09IFwib2JqZWN0XCIpIHJlbWVtYmVyVG9rZW5zKGNoaWxkLCB0b2tlbnMsIHZpc2l0ZWQpXG4gIH1cbn1cbiJdfQ==