occam-verify-cli 1.0.792 → 1.0.799
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.
- package/lib/context/ephemeral.js +41 -11
- package/lib/context/file/nominal.js +5 -1
- package/lib/context/liminal.js +39 -16
- package/lib/context/proof.js +35 -40
- package/lib/context.js +23 -3
- package/lib/element/assertion/contained.js +10 -14
- package/lib/element/assertion/defined.js +6 -8
- package/lib/element/assumption/metaLevel.js +181 -0
- package/lib/element/assumption.js +24 -44
- package/lib/element/frame.js +12 -18
- package/lib/element/hypothesis.js +1 -1
- package/lib/element/judgement.js +19 -15
- package/lib/element/metavariable.js +73 -48
- package/lib/element/proofAssertion/step.js +5 -7
- package/lib/element/reference.js +21 -19
- package/lib/element/substitution/frame.js +12 -16
- package/lib/element/substitution/reference.js +20 -1
- package/lib/element/substitution/statement.js +22 -2
- package/lib/element/topLevelMetaAssertion.js +9 -9
- package/lib/node/assumption/metaLevel.js +27 -0
- package/lib/node/assumption.js +5 -5
- package/lib/node/declaration/metavariable.js +4 -4
- package/lib/node/frame.js +5 -2
- package/lib/nonTerminalNodeMap.js +3 -1
- package/lib/preamble.js +2 -1
- package/lib/process/instantiate.js +8 -2
- package/lib/process/unify.js +22 -35
- package/lib/ruleNames.js +5 -1
- package/lib/utilities/context.js +5 -5
- package/lib/utilities/element.js +34 -26
- package/lib/utilities/json.js +23 -1
- package/lib/utilities/string.js +25 -14
- package/lib/utilities/unification.js +3 -3
- package/lib/utilities/validation.js +9 -14
- package/package.json +4 -4
- package/src/context/ephemeral.js +63 -12
- package/src/context/file/nominal.js +6 -0
- package/src/context/liminal.js +54 -16
- package/src/context/proof.js +41 -47
- package/src/context.js +35 -2
- package/src/element/assertion/contained.js +10 -14
- package/src/element/assertion/defined.js +6 -8
- package/src/element/assumption/metaLevel.js +263 -0
- package/src/element/assumption.js +35 -63
- package/src/element/frame.js +11 -17
- package/src/element/hypothesis.js +1 -1
- package/src/element/judgement.js +18 -19
- package/src/element/metavariable.js +98 -58
- package/src/element/proofAssertion/step.js +5 -7
- package/src/element/reference.js +30 -23
- package/src/element/substitution/frame.js +11 -15
- package/src/element/substitution/reference.js +33 -0
- package/src/element/substitution/statement.js +33 -1
- package/src/element/topLevelMetaAssertion.js +15 -15
- package/src/node/assumption/metaLevel.js +23 -0
- package/src/node/assumption.js +8 -8
- package/src/node/declaration/metavariable.js +4 -4
- package/src/node/frame.js +6 -1
- package/src/nonTerminalNodeMap.js +3 -0
- package/src/preamble.js +1 -0
- package/src/process/instantiate.js +4 -0
- package/src/process/unify.js +25 -50
- package/src/ruleNames.js +1 -0
- package/src/utilities/context.js +4 -4
- package/src/utilities/element.js +47 -35
- package/src/utilities/json.js +27 -1
- package/src/utilities/string.js +34 -19
- package/src/utilities/unification.js +3 -3
- package/src/utilities/validation.js +10 -16
package/lib/utilities/element.js
CHANGED
|
@@ -21,9 +21,6 @@ _export(exports, {
|
|
|
21
21
|
get assumptionsFromFrameNode () {
|
|
22
22
|
return assumptionsFromFrameNode;
|
|
23
23
|
},
|
|
24
|
-
get assumptionsFromTopLevelMetaAssertionNode () {
|
|
25
|
-
return assumptionsFromTopLevelMetaAssertionNode;
|
|
26
|
-
},
|
|
27
24
|
get axiomFromAxiomNode () {
|
|
28
25
|
return axiomFromAxiomNode;
|
|
29
26
|
},
|
|
@@ -174,8 +171,11 @@ _export(exports, {
|
|
|
174
171
|
get metaLemmaFromMetaLemmaNode () {
|
|
175
172
|
return metaLemmaFromMetaLemmaNode;
|
|
176
173
|
},
|
|
177
|
-
get
|
|
178
|
-
return
|
|
174
|
+
get metaLevelAssumptionFromMetaLevelAssumptionNode () {
|
|
175
|
+
return metaLevelAssumptionFromMetaLevelAssumptionNode;
|
|
176
|
+
},
|
|
177
|
+
get metaLevelAssumptionsFromTopLevelMetaAssertionNode () {
|
|
178
|
+
return metaLevelAssumptionsFromTopLevelMetaAssertionNode;
|
|
179
179
|
},
|
|
180
180
|
get metaTypeFromMetavariableDeclarationNode () {
|
|
181
181
|
return metaTypeFromMetavariableDeclarationNode;
|
|
@@ -318,6 +318,9 @@ _export(exports, {
|
|
|
318
318
|
get referenceFromJSatisfiesAssertionNode () {
|
|
319
319
|
return referenceFromJSatisfiesAssertionNode;
|
|
320
320
|
},
|
|
321
|
+
get referenceFromMetaLevelAssumptionNode () {
|
|
322
|
+
return referenceFromMetaLevelAssumptionNode;
|
|
323
|
+
},
|
|
321
324
|
get referenceFromMetavariableNode () {
|
|
322
325
|
return referenceFromMetavariableNode;
|
|
323
326
|
},
|
|
@@ -402,6 +405,9 @@ _export(exports, {
|
|
|
402
405
|
get statementFromHypothesisNode () {
|
|
403
406
|
return statementFromHypothesisNode;
|
|
404
407
|
},
|
|
408
|
+
get statementFromMetaLevelAssumptionNode () {
|
|
409
|
+
return statementFromMetaLevelAssumptionNode;
|
|
410
|
+
},
|
|
405
411
|
get statementFromPremiseNode () {
|
|
406
412
|
return statementFromPremiseNode;
|
|
407
413
|
},
|
|
@@ -684,10 +690,6 @@ function theoremFromTheoremNode(theoremNode, context) {
|
|
|
684
690
|
const { Theorem } = _elements.default, topLevelAsssertionNode = theoremNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, theorem = new Theorem(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
|
|
685
691
|
return theorem;
|
|
686
692
|
}
|
|
687
|
-
function metaTypeFromMetaTypeNode(metaTypeNode, context) {
|
|
688
|
-
const metaTypeName = metaTypeNode.getMetaTypeName(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
|
|
689
|
-
return metaType;
|
|
690
|
-
}
|
|
691
693
|
function propertyFromPropertyNode(propertyNode, context) {
|
|
692
694
|
const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName; ///
|
|
693
695
|
context = null;
|
|
@@ -741,7 +743,7 @@ function judgementFromJudgementNode(judgementNode, context) {
|
|
|
741
743
|
return judgement;
|
|
742
744
|
}
|
|
743
745
|
function metaLemmaFromMetaLemmaNode(metaLemmaNode, context) {
|
|
744
|
-
const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context),
|
|
746
|
+
const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, metaLemma = new MetaLemma(context, string, node, label, suppositions, deduction, proof, metaLevelAssumptions);
|
|
745
747
|
return metaLemma;
|
|
746
748
|
}
|
|
747
749
|
function parameterFromParameterNode(parameterNode, context) {
|
|
@@ -789,9 +791,7 @@ function typePrefixFromTypePrefixNode(typePrefixNode, context) {
|
|
|
789
791
|
return typePrefix;
|
|
790
792
|
}
|
|
791
793
|
function assumptionFromAssumptionNode(assumptionNode, context) {
|
|
792
|
-
const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context);
|
|
793
|
-
context = null;
|
|
794
|
-
const assumption = new Assumption(context, string, node, reference, statement);
|
|
794
|
+
const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, reference, statement);
|
|
795
795
|
return assumption;
|
|
796
796
|
}
|
|
797
797
|
function constructorFromConstructorNode(constructorNode, context) {
|
|
@@ -811,7 +811,7 @@ function equivalenceFromEquivalenceNode(equivalenceNode, context) {
|
|
|
811
811
|
return equivalence;
|
|
812
812
|
}
|
|
813
813
|
function metatheoremFromMetatheoremNode(metatheoremNode, context) {
|
|
814
|
-
const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context),
|
|
814
|
+
const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, metatheorem = new Metatheorem(context, string, node, label, suppositions, deduction, proof, metaLevelAssumptions);
|
|
815
815
|
return metatheorem;
|
|
816
816
|
}
|
|
817
817
|
function metavariableFromMetavariableNode(metavariableNode, context) {
|
|
@@ -894,6 +894,10 @@ function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode,
|
|
|
894
894
|
const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), typeNode = variableDeclarationNode.getTypeNode(), provisional = variableDeclarationNode.isProvisional(), variableNode = variableDeclarationNode.getVariableNode(), type = typeFromTypeNode(typeNode, context), variable = variableFromVariableNode(variableNode, context), variableDeclaration = new VariableDeclaration(context, string, node, type, variable, provisional);
|
|
895
895
|
return variableDeclaration;
|
|
896
896
|
}
|
|
897
|
+
function metaLevelAssumptionFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
|
|
898
|
+
const { MetaLevelAssumption } = _elements.default, node = metaLevelAssumptionNode, string = context.nodeAsString(node), reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), metaLevelAssumption = new MetaLevelAssumption(context, string, node, reference, statement);
|
|
899
|
+
return metaLevelAssumption;
|
|
900
|
+
}
|
|
897
901
|
function typePrefixDeclarationFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
|
|
898
902
|
const { TypePrefixDeclaration } = _elements.default, node = typePrefixDeclarationNode, string = context.nodeAsString(node), typePrefix = typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context), typePrefixDeclaration = new TypePrefixDeclaration(context, string, node, typePrefix);
|
|
899
903
|
return typePrefixDeclaration;
|
|
@@ -1083,7 +1087,7 @@ function termFromMetavariableNode(metavariableNode, context) {
|
|
|
1083
1087
|
let term = null;
|
|
1084
1088
|
const termNode = metavariableNode.getTermNode();
|
|
1085
1089
|
if (termNode !== null) {
|
|
1086
|
-
term =
|
|
1090
|
+
term = context.findTermByTermNode(termNode);
|
|
1087
1091
|
}
|
|
1088
1092
|
return term;
|
|
1089
1093
|
}
|
|
@@ -1193,11 +1197,7 @@ function statementFromConclusionNode(conclusinoNode, context) {
|
|
|
1193
1197
|
return statement;
|
|
1194
1198
|
}
|
|
1195
1199
|
function statementFromAssumptionNode(assumptionNode, context) {
|
|
1196
|
-
|
|
1197
|
-
const statementNode = assumptionNode.getStatementNode();
|
|
1198
|
-
if (statementNode !== null) {
|
|
1199
|
-
statement = statementFromStatementNode(statementNode, context);
|
|
1200
|
-
}
|
|
1200
|
+
const statementNode = assumptionNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
|
|
1201
1201
|
return statement;
|
|
1202
1202
|
}
|
|
1203
1203
|
function statementFromHypothesisNode(hypothesisNode, context) {
|
|
@@ -1494,6 +1494,14 @@ function targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, context) {
|
|
|
1494
1494
|
const targetFrameNode = frameSubstitutionNode.getTargetFrameNode(), targetFrame = frameFromFrameNode(targetFrameNode, context);
|
|
1495
1495
|
return targetFrame;
|
|
1496
1496
|
}
|
|
1497
|
+
function statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
|
|
1498
|
+
const statementNode = metaLevelAssumptionNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
|
|
1499
|
+
return statement;
|
|
1500
|
+
}
|
|
1501
|
+
function referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
|
|
1502
|
+
const { Reference } = _elements.default, referenceNode = metaLevelAssumptionNode.getReferenceNode(), referenceString = context.nodeAsString(referenceNode), reference = Reference.fromReferenceString(referenceString, context);
|
|
1503
|
+
return reference;
|
|
1504
|
+
}
|
|
1497
1505
|
function suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context) {
|
|
1498
1506
|
const suppositionNodes = topLevelAsssertionNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1499
1507
|
return suppositions;
|
|
@@ -1536,13 +1544,9 @@ function combinatorFromCombinatorDeclarationNode(combinatorDeclarationNode, cont
|
|
|
1536
1544
|
return combinator;
|
|
1537
1545
|
}
|
|
1538
1546
|
function metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
|
|
1539
|
-
const
|
|
1547
|
+
const metaTypeName = metavariableDeclarationNode.getMetaTypeName(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
|
|
1540
1548
|
return metaType;
|
|
1541
1549
|
}
|
|
1542
|
-
function assumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
1543
|
-
const assumptions = [];
|
|
1544
|
-
return assumptions;
|
|
1545
|
-
}
|
|
1546
1550
|
function provisionalFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
|
|
1547
1551
|
const provisional = simpleTypeDeclarationNode.isProvisional();
|
|
1548
1552
|
return provisional;
|
|
@@ -1620,6 +1624,10 @@ function replacementStatementFromStatementSubstitutionNode(statementSubstitution
|
|
|
1620
1624
|
const replacementStatementNode = statementSubstitutionNode.getReplacementStatementNode(), replacementStatement = statementFromStatementNode(replacementStatementNode, context);
|
|
1621
1625
|
return replacementStatement;
|
|
1622
1626
|
}
|
|
1627
|
+
function metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context) {
|
|
1628
|
+
const metaLevelAssumptions = [];
|
|
1629
|
+
return metaLevelAssumptions;
|
|
1630
|
+
}
|
|
1623
1631
|
function termsFromTermNodes(termNodes, context) {
|
|
1624
1632
|
const terms = termNodes.map((termNode)=>{
|
|
1625
1633
|
const term = termFromTermNode(termNode, context);
|
|
@@ -1698,4 +1706,4 @@ function stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context) {
|
|
|
1698
1706
|
return stepsOrSubproofs;
|
|
1699
1707
|
}
|
|
1700
1708
|
|
|
1701
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZzsgIC8vL1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcnVsZVN0cmluZyA9IHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pLFxuICAgICAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gcnVsZVN0cmluZywgIC8vL1xuICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGF4aW9tTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWU7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZHVjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlLCB0b3BMZXZlbE1ldGFBc3NlcnRpb24pO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBtZXRhTGVtbWEgPSBuZXcgTWV0YUxlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgYXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhTGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpLFxuICAgICAgICBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aHNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBoeXBvaHRlc2lzID0gbmV3IEh5cG90aHNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGh5cG9odGVzaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uY2x1c2lvbiA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIG1ldGF0aGVvcmVtID0gbmV3IE1ldGF0aGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgYXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZzsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgcHJvcGVydHkpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG5ldyBTYXRpc2ZpZXNBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3Vic3RpdHV0aW9uLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gbmV3IENvbXBsZXhUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXhpb20gPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tTm9kZSA9IHNlY3Rpb25Ob2RlLmdldEF4aW9tTm9kZSgpO1xuXG4gIGlmIChheGlvbU5vZGUgIT09IG51bGwpIHtcbiAgICBheGlvbSA9IGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbW1hID0gbnVsbDtcblxuICBjb25zdCBsZW1tYU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRMZW1tYU5vZGUoKTtcblxuICBpZiAobGVtbWFOb2RlICE9PSBudWxsKSB7XG4gICAgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvcGVydHlOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4Tm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbk5vZGUgPSBwcm9vZk5vZGUuZ2V0RGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gZXF1aXZhbGVuY2VOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJhaWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGF2YXJhaWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50O1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVmaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGFyZ2V0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmlzUmVzb2x2ZWQoKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvbiA9IG51bGw7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTm9kZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShyZXBsYWNlbWVudEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSAoZnJhbWVTdWJzdGl0dXRpb24gfHwgdGVybVN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlIiwianVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsIm1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlIiwibWV0YVR5cGVGcm9tTWV0YVR5cGVOb2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwibWV0YVR5cGVOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwibWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwiYXNzdW1wdGlvbiIsImp1ZGdlbWVudCIsIm1ldGFMZW1tYU5vZGUiLCJNZXRhTGVtbWEiLCJtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJnZXROYW1lIiwiZ2V0SWRlbnRpZmllciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhzaXMiLCJoeXBvaHRlc2lzIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29tYmluYXRvck5vZGUiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJnZXRUeXBlTm9kZSIsImlzUHJvdmlzaW9uYWwiLCJnZXRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwidGFyZ2V0U3RhdGVtZW50IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJDb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZVN0cmluZyIsImZyb21SZWZlcmVuY2VTdHJpbmciLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJnZXRUaGVvcmVtTm9kZSIsImdldEZyYW1lTm9kZSIsInRlcm1Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiZ2V0VGVybU5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRUZXJtTm9kZXMiLCJtZXRhdmFyYWlibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsInN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlIiwiaXNTdGVwTm9kZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImdldEFzc3VtcHRpb25Ob2RlIiwiY29uY2x1c2lub05vZGUiLCJoeXBvdGhlc2lzTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcnZpYXRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0RGVkdWN0aW9uTm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJnZXRMYWJlbE5vZGUiLCJsYWJlbFN0cmluZyIsImZyb21MYWJlbFN0cmluZyIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwieXBvdGhlc2VzIiwic2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lTm9kZSIsImdldFRhcmdldEZyYW1lTm9kZSIsImlzUmVzb2x2ZWQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJnZXRNZXRhVHlwZU5vZGUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmciLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhl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
|
|
1709
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICBzdHJpbmcgPSB0eXBlU3RyaW5nOyAgLy8vXG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9IHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNlY3Rpb24gPSBuZXcgU2VjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOb2RlLmdldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIGlkZW50aWZpZXIsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSwgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyhsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIG1ldGFMZXZlbEFzc3VtcHRpb25zKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWl2YWxlbmNlTm9kZSwgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWl2YWxlbmNlID0gbmV3IEVxdWl2YWxlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyhsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIG1ldGFMZXZlbEFzc3VtcHRpb25zKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbWV0YXRoZW9yZW0gPSBuZXcgTWV0YXRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNhdGlzZmllc0Fzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbmV3IFNhdGlzZmllc0Fzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3Vic3RpdHV0aW9uLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gbmV3IENvbXBsZXhUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXhpb20gPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tTm9kZSA9IHNlY3Rpb25Ob2RlLmdldEF4aW9tTm9kZSgpO1xuXG4gIGlmIChheGlvbU5vZGUgIT09IG51bGwpIHtcbiAgICBheGlvbSA9IGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbW1hID0gbnVsbDtcblxuICBjb25zdCBsZW1tYU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRMZW1tYU5vZGUoKTtcblxuICBpZiAobGVtbWFOb2RlICE9PSBudWxsKSB7XG4gICAgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvcGVydHlOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4Tm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbk5vZGUgPSBwcm9vZk5vZGUuZ2V0RGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gZXF1aXZhbGVuY2VOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJhaWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGF2YXJhaWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGRlZHVjdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQganVkZ2VtZW50ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRKdWRnZW1lbnROb2RlKCk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0ganVkZ2VtZW50Tm9kZS5nZXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkgezBcbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4geXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhc2lzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IHNhc2lzZmllc0Fzc2VydGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNSZXNvbHZlZCgpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gbnVsbDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyh0YXJnZXRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcodGFyZ2V0UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUiLCJqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGFiZWxzRnJvbVJ1bGVOb2RlIiwibGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsIm1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tUHJvcGVydHlOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVHlwZVByZWZpeE5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUiLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJyZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwic3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RlcE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdGVwRnJvbVN0ZXBOb2RlIiwic3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUiLCJzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVOb2RlIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiY29udGV4dCIsInR5cGUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwic3RyaW5nIiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm1ldGF2YXJpYWJsZSIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwidG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJ0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJzZWN0aW9uTm9kZSIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsInRoZW9yZW0iLCJjb25qZWN0dXJlIiwic2VjdGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvbiIsIlNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcm9jZWR1cmVDYWxsIiwicHJlbWlzZSIsInRoZW9yZW1Ob2RlIiwiVGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwiYXNzdW1wdGlvbiIsImp1ZGdlbWVudCIsIm1ldGFMZW1tYU5vZGUiLCJNZXRhTGVtbWEiLCJtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zRGVkdWN0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbnMiLCJtZXRhTGVtbWEiLCJwYXJhbWV0ZXJOb2RlIiwiUGFyYW1ldGVyIiwiZ2V0TmFtZSIsImdldElkZW50aWZpZXIiLCJwYXJhbWV0ZXIiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3Roc2lzIiwiaHlwb2h0ZXNpcyIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidGVybUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVGcm9tVHlwZVByZWZpeE5vZGUiLCJ0eXBlUHJlZml4IiwiYXNzdW1wdGlvbk5vZGUiLCJBc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF0aGVvcmVtTm9kZSIsIk1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW0iLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YVR5cGUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJnZXRUeXBlTm9kZSIsImlzUHJvdmlzaW9uYWwiLCJnZXRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsIlNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFJlZmVyZW5jZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsInN1YnN0aXR1dGlvbiIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VTdHJpbmciLCJmcm9tUmVmZXJlbmNlU3RyaW5nIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsImdldENvbmNsdXNpb25Ob2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImdldFRlcm1Ob2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VGVybU5vZGVzIiwibWV0YXZhcmFpYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0eXBlbU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldEp1ZGdlbWVudE5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImdldFRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybU5vZGUiLCJnZXRUYXJnZXRUZXJtTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0TGFiZWxOb2RlIiwibGFiZWxTdHJpbmciLCJmcm9tTGFiZWxTdHJpbmciLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsInlwb3RoZXNlcyIsInNhc2lzZmllc0Fzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJpc1Jlc29sdmVkIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRSZXBsYWNlbWVudFRlcm1Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJnZXRUeXBlUHJlZml4Tm9kZSIsImdldENvbWJpbmF0b3JOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmciLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXljZ0JBO2VBQUFBOztRQSt1QkFDO2VBQUFBOztRQWd6QkFDO2VBQUFBOztRQW4rQkFDO2VBQUFBOztRQW4zQkFDO2VBQUFBOztRQXl0QkFDO2VBQUFBOztRQXBJQUM7ZUFBQUE7O1FBaWlDQUM7ZUFBQUE7O1FBajNDQUM7ZUFBQUE7O1FBMFlBQztlQUFBQTs7UUFoWUFDO2VBQUFBOztRQW1pQkFDO2VBQUFBOztRQTlqQkFDO2VBQUFBOztRQWt0QkFDO2VBQUFBOztRQW5VQUM7ZUFBQUE7O1FBa2pDQUM7ZUFBQUE7O1FBbjNDQUM7ZUFBQUE7O1FBcU1BQztlQUFBQTs7UUFpOUJBQztlQUFBQTs7UUEzMUNBQztlQUFBQTs7UUFzd0NBQztlQUFBQTs7UUF5TUFDO2VBQUFBOztRQW5wQ0FDO2VBQUFBOztRQTg1QkFDO2VBQUFBOztRQTNqQ0FDO2VBQUFBOztRQTZqQkFDO2VBQUFBOztRQTF1QkFDO2VBQUFBOztRQTAyQkFDO2VBQUFBOztRQTluQkFDO2VBQUFBOztRQWhaQUM7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
|