occam-nominal 1.0.309 → 1.0.310

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/context/file/nominal.js +2 -2
  2. package/lib/element/assertion/subproof.js +4 -4
  3. package/lib/element/derivation.js +3 -3
  4. package/lib/element/frame.js +3 -3
  5. package/lib/element/procedureCall.js +25 -25
  6. package/lib/element/proofAssertion/premise.js +26 -19
  7. package/lib/element/proofAssertion/step.js +4 -4
  8. package/lib/element/proofAssertion/supposition.js +4 -5
  9. package/lib/element/rule.js +12 -12
  10. package/lib/element/subDerivation.js +3 -3
  11. package/lib/element/subproof.js +5 -5
  12. package/lib/element/topLevelAssertion.js +5 -5
  13. package/lib/pass/continuationZip.js +2 -2
  14. package/lib/process/unify.js +9 -9
  15. package/lib/process/validate.js +9 -9
  16. package/lib/process/validation.js +4 -4
  17. package/lib/process/verify.js +18 -18
  18. package/lib/utilities/continuation.js +5 -5
  19. package/package.json +3 -3
  20. package/src/context/file/nominal.js +1 -1
  21. package/src/element/assertion/subproof.js +3 -3
  22. package/src/element/derivation.js +2 -2
  23. package/src/element/frame.js +2 -2
  24. package/src/element/procedureCall.js +28 -29
  25. package/src/element/proofAssertion/premise.js +32 -23
  26. package/src/element/proofAssertion/step.js +3 -3
  27. package/src/element/proofAssertion/supposition.js +5 -5
  28. package/src/element/rule.js +11 -11
  29. package/src/element/subDerivation.js +2 -2
  30. package/src/element/subproof.js +4 -4
  31. package/src/element/topLevelAssertion.js +4 -4
  32. package/src/pass/continuationZip.js +1 -1
  33. package/src/process/unify.js +8 -8
  34. package/src/process/validate.js +8 -8
  35. package/src/process/validation.js +3 -3
  36. package/src/process/verify.js +17 -17
  37. package/src/utilities/continuation.js +4 -4
@@ -353,35 +353,35 @@ class IntrinsicMetavariablePass extends _continuationZip.default {
353
353
  const metaLevelPass = new MetaLevelPass(), propertyPass = new PropertyPass(), generatorPass = new GeneratorPass(), combinatorPass = new CombinatorPass(), constructorPass = new ConstructorPass(), metavariablePass = new MetavariablePass(), intrinsicTermPass = new IntrinsicTermPass(), intrinsicMetavariablePass = new IntrinsicMetavariablePass();
354
354
  function unifyStatement(generalStatement, specificStatement, generalContext, specificContext, continuation) {
355
355
  const generalStatementNode = generalStatement.getNode(), specificStatementNode = specificStatement.getNode(), generalNode = generalStatementNode, specificNode = specificStatementNode; ///
356
- metaLevelPass.run(generalNode, specificNode, generalContext, specificContext, continuation);
356
+ return metaLevelPass.run(generalNode, specificNode, generalContext, specificContext, continuation);
357
357
  }
358
358
  function unifyMetavariable(generalMetavariable, specificMetavariable, generalContext, specificContext, continuation) {
359
359
  const generalMetavariableNode = generalMetavariable.getNode(), specificMetavariableNode = specificMetavariable.getNode();
360
- metavariablePass.run(generalMetavariableNode, specificMetavariableNode, generalContext, specificContext, continuation);
360
+ return metavariablePass.run(generalMetavariableNode, specificMetavariableNode, generalContext, specificContext, continuation);
361
361
  }
362
362
  function unifyTermWithProperty(term, property, generalContext, specificContext, continuation) {
363
363
  const termNode = term.getNode(), propertyTerm = property.getTerm(), propertyTermNode = propertyTerm.getNode();
364
- propertyPass.run(propertyTermNode, termNode, generalContext, specificContext, continuation);
364
+ return propertyPass.run(propertyTermNode, termNode, generalContext, specificContext, continuation);
365
365
  }
366
366
  function unifyTermWithGenerator(term, generator, generalContext, specificContext, continuation) {
367
367
  const termNode = term.getNode(), generatorTerm = generator.getTerm(), generatorTermNode = generatorTerm.getNode();
368
- generatorPass.run(generatorTermNode, termNode, generalContext, specificContext, continuation);
368
+ return generatorPass.run(generatorTermNode, termNode, generalContext, specificContext, continuation);
369
369
  }
370
370
  function unifyTermWithConstructor(term, constructor, generalContext, specificContext, continuation) {
371
371
  const termNode = term.getNode(), constructorTerm = constructor.getTerm(), constructorTermNode = constructorTerm.getNode();
372
- constructorPass.run(constructorTermNode, termNode, generalContext, specificContext, continuation);
372
+ return constructorPass.run(constructorTermNode, termNode, generalContext, specificContext, continuation);
373
373
  }
374
374
  function unifyStatementWithCombinator(statement, combinator, generalContext, specificContext, continuation) {
375
375
  const statementNode = statement.getNode(), combinatorStatement = combinator.getStatement(), combinatorStatementNode = combinatorStatement.getNode();
376
- combinatorPass.run(combinatorStatementNode, statementNode, generalContext, specificContext, continuation);
376
+ return combinatorPass.run(combinatorStatementNode, statementNode, generalContext, specificContext, continuation);
377
377
  }
378
378
  function unifyTermIntrinsically(generalTerm, specificTerm, generalContext, specificContext, continuation) {
379
379
  const generalTermNode = generalTerm.getNode(), specificTermNode = specificTerm.getNode(), generalNode = generalTermNode, specificNode = specificTermNode; ///
380
- intrinsicTermPass.run(generalNode, specificNode, generalContext, specificContext, continuation);
380
+ return intrinsicTermPass.run(generalNode, specificNode, generalContext, specificContext, continuation);
381
381
  }
382
382
  function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext, continuation) {
383
383
  const generalMetavariableNode = generalMetavariable.getNode(), specificMetavariableNode = specificMetavariable.getNode(), generalNode = generalMetavariableNode, specificNode = specificMetavariableNode;
384
- intrinsicMetavariablePass.run(generalNode, specificNode, generalContext, specificContext, continuation);
384
+ return intrinsicMetavariablePass.run(generalNode, specificNode, generalContext, specificContext, continuation);
385
385
  }
386
386
 
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhTGV2ZWxQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0LFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc2lnbmF0dXJlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFNpZ25hdHVyZU5vZGUsIHNwZWNpZmljU2lnbmF0dXJlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgZ2VuZXJhbFNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShnZW5lcmFsU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNwZWNpZmljU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KVxuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBpZiAobWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljVGVybVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljVGVybVBhc3MgPSBuZXcgSW50cmluc2ljVGVybVBhc3MoKSxcbiAgICAgIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MgPSBuZXcgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICBtZXRhTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlNZXRhdmFyaWFibGUoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgbWV0YXZhcmlhYmxlUGFzcy5ydW4oZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0eSh0ZXJtLCBwcm9wZXJ0eSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHByb3BlcnR5LmdldFRlcm0oKSxcbiAgICAgICAgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5VGVybS5nZXROb2RlKCk7XG5cbiAgcHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybSA9IGdlbmVyYXRvci5nZXRUZXJtKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm1Ob2RlID0gZ2VuZXJhdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgZ2VuZXJhdG9yUGFzcy5ydW4oZ2VuZXJhdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtID0gY29uc3RydWN0b3IuZ2V0VGVybSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclRlcm1Ob2RlID0gY29uc3RydWN0b3JUZXJtLmdldE5vZGUoKTtcblxuICBjb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudCA9IGNvbWJpbmF0b3IuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gY29tYmluYXRvclN0YXRlbWVudC5nZXROb2RlKCk7XG5cbiAgY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1Rlcm1Ob2RlID0gc3BlY2lmaWNUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsVGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlOyAvLy9cblxuICBpbnRyaW5zaWNUZXJtUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZTtcblxuICBpbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuIl0sIm5hbWVzIjpbInVuaWZ5TWV0YXZhcmlhYmxlIiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yIiwidW5pZnlUZXJtSW50cmluc2ljYWxseSIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybVdpdGhHZW5lcmF0b3IiLCJ1bmlmeVRlcm1XaXRoUHJvcGVydHkiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInR5cGVOb2RlUXVlcnkiLCJ0ZXJtTm9kZVF1ZXJ5IiwiZnJhbWVOb2RlUXVlcnkiLCJtZXRhVHlwZU5vZGVRdWVyeSIsInNpZ25hdHVyZU5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGVRdWVyeSIsInRlcm1WYXJpYWJsZU5vZGVRdWVyeSIsImZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsIlByb3BlcnR5UGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwicnVuIiwiZ2VuZXJhbFR5cGVOb2RlIiwic3BlY2lmaWNUZXJtTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiY29udGludWF0aW9uIiwidHlwZU5vZGUiLCJ0ZXJtTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImNvbnRleHQiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInRlcm0iLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwic3RyaWN0IiwidmFsaWRhdGVHaXZlblR5cGUiLCJzdWNjZXNzIiwiR2VuZXJhdG9yUGFzcyIsIkNvbnN0cnVjdG9yUGFzcyIsIk1ldGFMZXZlbFBhc3MiLCJDb250aW51YXRpb25aaXBQYXNzQmFzZSIsImdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsInVuaWZ5UmVmZXJlbmNlIiwicmVmZXJlbmNlVW5pZmllcyIsImdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlUGFyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZ2V0U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VW5pZmllcyIsImdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJ1bmlmeUZyYW1lIiwiZnJhbWVVbmlmaWVzIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidW5pZnlUZXJtIiwidGVybVVuaWZpZXMiLCJnZW5lcmFsU2lnbmF0dXJlTm9kZSIsInNwZWNpZmljU2lnbmF0dXJlTm9kZSIsImdlbmVyYWxTaWduYXR1cmUiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmUiLCJyZWNvbmNpbGUiLCJ1bmlmeVNpZ25hdHVyZSIsInNpZ25hdHVyZVVuaWZpZXMiLCJDb21iaW5hdG9yUGFzcyIsImdlbmVyYWxNZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWVTdGF0ZW1lbnRNZXRhVHlwZU5hbWUiLCJTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwibWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUiLCJGUkFNRV9NRVRBX1RZUEVfTkFNRSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsIk1ldGF2YXJpYWJsZVBhc3MiLCJ0ZXJtVHlwZSIsImdldFR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsIkludHJpbnNpY1Rlcm1QYXNzIiwiSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcyIsIm1ldGFMZXZlbFBhc3MiLCJwcm9wZXJ0eVBhc3MiLCJnZW5lcmF0b3JQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwiaW50cmluc2ljVGVybVBhc3MiLCJpbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwiZ2VuZXJhbFN0YXRlbWVudCIsInNwZWNpZmljU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwiZ2VuZXJhbE5vZGUiLCJzcGVjaWZpY05vZGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlIiwic3BlY2lmaWNNZXRhdmFyaWFibGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSIsInByb3BlcnR5IiwicHJvcGVydHlUZXJtIiwiZ2V0VGVybSIsInByb3BlcnR5VGVybU5vZGUiLCJnZW5lcmF0b3IiLCJnZW5lcmF0b3JUZXJtIiwiZ2VuZXJhdG9yVGVybU5vZGUiLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybSIsImNvbnN0cnVjdG9yVGVybU5vZGUiLCJjb21iaW5hdG9yIiwiY29tYmluYXRvclN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlIiwiZ2VuZXJhbFRlcm0iLCJzcGVjaWZpY1Rlcm0iLCJnZW5lcmFsVGVybU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZlZ0JBO2VBQUFBOztRQWdEQUM7ZUFBQUE7O1FBekRBQztlQUFBQTs7UUF3Q0FDO2VBQUFBOztRQVFBQztlQUFBQTs7UUFoQkFDO2VBQUFBOztRQVJBQztlQUFBQTs7UUFSQUM7ZUFBQUE7Ozs0QkFsZmU7Z0NBQ2dDO3dFQUUvQjt5QkFFTjsrQkFDcUM7eUJBQ2tCOzs7Ozs7QUFFakYsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR0MsMEJBQWM7QUFFcEMsTUFBTUMsZ0JBQWdCRixVQUFVLFVBQzFCRyxnQkFBZ0JILFVBQVUsVUFDMUJJLGlCQUFpQkosVUFBVSxXQUMzQkssb0JBQW9CTCxVQUFVLGNBQzlCTSxxQkFBcUJOLFVBQVUsZUFDL0JPLHFCQUFxQlAsVUFB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
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhTGV2ZWxQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0LFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc2lnbmF0dXJlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFNpZ25hdHVyZU5vZGUsIHNwZWNpZmljU2lnbmF0dXJlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgZ2VuZXJhbFNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShnZW5lcmFsU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNwZWNpZmljU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KVxuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBpZiAobWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljVGVybVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljVGVybVBhc3MgPSBuZXcgSW50cmluc2ljVGVybVBhc3MoKSxcbiAgICAgIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MgPSBuZXcgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICByZXR1cm4gbWV0YUxldmVsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aFByb3BlcnR5KHRlcm0sIHByb3BlcnR5LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHkuZ2V0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlUZXJtLmdldE5vZGUoKTtcblxuICByZXR1cm4gcHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybSA9IGdlbmVyYXRvci5nZXRUZXJtKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm1Ob2RlID0gZ2VuZXJhdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvclBhc3MucnVuKGdlbmVyYXRvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yKHN0YXRlbWVudCwgY29tYmluYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKTtcblxuICByZXR1cm4gY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1Rlcm1Ob2RlID0gc3BlY2lmaWNUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsVGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlOyAvLy9cblxuICByZXR1cm4gaW50cmluc2ljVGVybVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGU7XG5cbiAgcmV0dXJuIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG4iXSwibmFtZXMiOlsidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvciIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic2lnbmF0dXJlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUHJvcGVydHlQYXNzIiwiQ29udGludWF0aW9uWmlwUGFzcyIsIm1hcHMiLCJnZW5lcmFsTm9kZVF1ZXJ5Iiwic3BlY2lmaWNOb2RlUXVlcnkiLCJydW4iLCJnZW5lcmFsVHlwZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJjb250aW51YXRpb24iLCJ0eXBlTm9kZSIsInRlcm1Ob2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiY29udGV4dCIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidGVybSIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdHJpY3QiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN1Y2Nlc3MiLCJHZW5lcmF0b3JQYXNzIiwiQ29uc3RydWN0b3JQYXNzIiwiTWV0YUxldmVsUGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3NCYXNlIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInVuaWZ5RnJhbWUiLCJmcmFtZVVuaWZpZXMiLCJnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmVOb2RlIiwiZ2VuZXJhbFNpZ25hdHVyZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzcGVjaWZpY1NpZ25hdHVyZSIsInJlY29uY2lsZSIsInVuaWZ5U2lnbmF0dXJlIiwic2lnbmF0dXJlVW5pZmllcyIsIkNvbWJpbmF0b3JQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwidmFsaWRhdGUiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiTWV0YXZhcmlhYmxlUGFzcyIsInRlcm1UeXBlIiwiZ2V0VHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwiSW50cmluc2ljVGVybVBhc3MiLCJJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwibWV0YUxldmVsUGFzcyIsInByb3BlcnR5UGFzcyIsImdlbmVyYXRvclBhc3MiLCJjb21iaW5hdG9yUGFzcyIsImNvbnN0cnVjdG9yUGFzcyIsIm1ldGF2YXJpYWJsZVBhc3MiLCJpbnRyaW5zaWNUZXJtUGFzcyIsImludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwicHJvcGVydHkiLCJwcm9wZXJ0eVRlcm0iLCJnZXRUZXJtIiwicHJvcGVydHlUZXJtTm9kZSIsImdlbmVyYXRvciIsImdlbmVyYXRvclRlcm0iLCJnZW5lcmF0b3JUZXJtTm9kZSIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29tYmluYXRvclN0YXRlbWVudE5vZGUiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmVnQkE7ZUFBQUE7O1FBZ0RBQztlQUFBQTs7UUF6REFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQWhCQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQVJBQztlQUFBQTs7OzRCQWxmZTtnQ0FDZ0M7d0VBRS9CO3lCQUVOOytCQUNxQzt5QkFDa0I7Ozs7OztBQUVqRixNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQywwQkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkksaUJBQWlCSixVQUFVLFdB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
@@ -31,7 +31,7 @@ const termNodeQuery = nodeQuery("/term"), typeNodeQuery = nodeQuery("/type"), st
31
31
  class PropertyPass extends _occamlanguages.ContinuationPass {
32
32
  run(termNode, context, continuation) {
33
33
  const nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes();
34
- this.descend(childNodes, context, continuation);
34
+ return this.descend(childNodes, context, continuation);
35
35
  }
36
36
  static maps = [
37
37
  {
@@ -63,7 +63,7 @@ class PropertyPass extends _occamlanguages.ContinuationPass {
63
63
  class GeneratorPass extends _occamlanguages.ContinuationPass {
64
64
  run(termNode, context, continuation) {
65
65
  const nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes();
66
- this.descend(childNodes, context, continuation);
66
+ return this.descend(childNodes, context, continuation);
67
67
  }
68
68
  static maps = [
69
69
  {
@@ -95,7 +95,7 @@ class GeneratorPass extends _occamlanguages.ContinuationPass {
95
95
  class CombinatorPass extends _occamlanguages.ContinuationPass {
96
96
  run(statementNode, context, continuation) {
97
97
  const nonTerminalNode = statementNode, childNodes = nonTerminalNode.getChildNodes();
98
- this.descend(childNodes, context, continuation);
98
+ return this.descend(childNodes, context, continuation);
99
99
  }
100
100
  static maps = [
101
101
  {
@@ -142,7 +142,7 @@ class CombinatorPass extends _occamlanguages.ContinuationPass {
142
142
  class ConstructorPass extends _occamlanguages.ContinuationPass {
143
143
  run(termNode, context, continuation) {
144
144
  const nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes();
145
- this.descend(childNodes, context, continuation);
145
+ return this.descend(childNodes, context, continuation);
146
146
  }
147
147
  static maps = [
148
148
  {
@@ -174,19 +174,19 @@ class ConstructorPass extends _occamlanguages.ContinuationPass {
174
174
  const propertyPass = new PropertyPass(), generatorPass = new GeneratorPass(), combinatorPass = new CombinatorPass(), constructorPass = new ConstructorPass();
175
175
  function validateTermAsProperty(term, context, continuation) {
176
176
  const termNode = term.getNode();
177
- propertyPass.run(termNode, context, continuation);
177
+ return propertyPass.run(termNode, context, continuation);
178
178
  }
179
179
  function validateTermAsGenerator(term, context, continuation) {
180
180
  const termNode = term.getNode();
181
- generatorPass.run(termNode, context, continuation);
181
+ return generatorPass.run(termNode, context, continuation);
182
182
  }
183
183
  function validateTermAsConstructor(term, context, continuation) {
184
184
  const termNode = term.getNode();
185
- constructorPass.run(termNode, context, continuation);
185
+ return constructorPass.run(termNode, context, continuation);
186
186
  }
187
187
  function validateStatementAsCombinator(statement, context, continuation) {
188
188
  const statementNode = statement.getNode();
189
- combinatorPass.run(statementNode, context, continuation);
189
+ return combinatorPass.run(statementNode, context, continuation);
190
190
  }
191
191
 
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uUGFzcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVzY2VuZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtTm9kZSwgc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25QYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25QYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbWJpbmF0b3JQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uUGFzcyB7XG4gIHJ1bihzdGF0ZW1lbnROb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICB0aGlzLmRlc2NlbmQoY2hpbGROb2RlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoc3RhdGVtZW50Tm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbnN0cnVjdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblBhc3Mge1xuICBydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICB0aGlzLmRlc2NlbmQoY2hpbGROb2RlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHRlcm0udmFsaWRhdGUoY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodHlwZU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgcHJvcGVydHlQYXNzID0gbmV3IFByb3BlcnR5UGFzcygpLFxuICAgICAgZ2VuZXJhdG9yUGFzcyA9IG5ldyBHZW5lcmF0b3JQYXNzKCksXG4gICAgICBjb21iaW5hdG9yUGFzcyA9IG5ldyBDb21iaW5hdG9yUGFzcygpLFxuICAgICAgY29uc3RydWN0b3JQYXNzID0gbmV3IENvbnN0cnVjdG9yUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNQcm9wZXJ0eSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKTtcblxuICBwcm9wZXJ0eVBhc3MucnVuKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNHZW5lcmF0b3IodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCk7XG5cbiAgZ2VuZXJhdG9yUGFzcy5ydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpO1xuXG4gIGNvbnN0cnVjdG9yUGFzcy5ydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKTtcblxuICBjb21iaW5hdG9yUGFzcy5ydW4oc3RhdGVtZW50Tm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbn1cbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvciIsInZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IiLCJ2YWxpZGF0ZVRlcm1Bc0dlbmVyYXRvciIsInZhbGlkYXRlVGVybUFzUHJvcGVydHkiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInRlcm1Ob2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwiUHJvcGVydHlQYXNzIiwiQ29udGludWF0aW9uUGFzcyIsInJ1biIsInRlcm1Ob2RlIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsIm5vblRlcm1pbmFsTm9kZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwiZGVzY2VuZCIsIm1hcHMiLCJ0ZXJtIiwidGVybUZyb21UZXJtTm9kZSIsInZhbGlkYXRlIiwic3VjY2VzcyIsInR5cGVOb2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJHZW5lcmF0b3JQYXNzIiwiQ29tYmluYXRvclBhc3MiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJDb25zdHJ1Y3RvclBhc3MiLCJwcm9wZXJ0eVBhc3MiLCJnZW5lcmF0b3JQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJnZXROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFtT2dCQTtlQUFBQTs7UUFOQUM7ZUFBQUE7O1FBTkFDO2VBQUFBOztRQU5BQztlQUFBQTs7OzRCQS9NZTtnQ0FDRTt5QkFFVDt5QkFDcUM7QUFFN0QsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR0MsMEJBQWM7QUFFcEMsTUFBTUMsZ0JBQWdCRixVQUFVLFVBQzFCRyxnQkFBZ0JILFVBQVUsVUFDMUJJLHFCQUFxQkosVUFBVTtBQUVyQyxNQUFNSyxxQkFBcUJDLGdDQUFnQjtJQUN6Q0MsSUFBSUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLFlBQVksRUFBRTtRQUNuQyxNQUFNQyxrQkFBa0JILFVBQ2xCSSxhQUFhRCxnQkFBZ0JFLGFBQWE7UUFF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
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uUGFzcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVzY2VuZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtTm9kZSwgc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25QYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVzY2VuZChjaGlsZE5vZGVzLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBydW46ICh0eXBlTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZVByZXNlbnQpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBHZW5lcmF0b3JQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uUGFzcyB7XG4gIHJ1bih0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIHJldHVybiB0aGlzLmRlc2NlbmQoY2hpbGROb2RlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHRlcm0udmFsaWRhdGUoY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodHlwZU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25QYXNzIHtcbiAgcnVuKHN0YXRlbWVudE5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIHJldHVybiB0aGlzLmRlc2NlbmQoY2hpbGROb2RlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoc3RhdGVtZW50Tm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbnN0cnVjdG9yUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblBhc3Mge1xuICBydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNvbnN0IHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzUHJvcGVydHkodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UGFzcy5ydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlcm1Bc0dlbmVyYXRvcih0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKTtcblxuICByZXR1cm4gZ2VuZXJhdG9yUGFzcy5ydW4odGVybU5vZGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvclBhc3MucnVuKHRlcm1Ob2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JQYXNzLnJ1bihzdGF0ZW1lbnROb2RlLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50QXNDb21iaW5hdG9yIiwidmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciIsInZhbGlkYXRlVGVybUFzR2VuZXJhdG9yIiwidmFsaWRhdGVUZXJtQXNQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidGVybU5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJQcm9wZXJ0eVBhc3MiLCJDb250aW51YXRpb25QYXNzIiwicnVuIiwidGVybU5vZGUiLCJjb250ZXh0IiwiY29udGludWF0aW9uIiwibm9uVGVybWluYWxOb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJkZXNjZW5kIiwibWFwcyIsInRlcm0iLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidmFsaWRhdGUiLCJzdWNjZXNzIiwidHlwZU5vZGUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsIkdlbmVyYXRvclBhc3MiLCJDb21iaW5hdG9yUGFzcyIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsIkNvbnN0cnVjdG9yUGFzcyIsInByb3BlcnR5UGFzcyIsImdlbmVyYXRvclBhc3MiLCJjb21iaW5hdG9yUGFzcyIsImNvbnN0cnVjdG9yUGFzcyIsImdldE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQW1PZ0JBO2VBQUFBOztRQU5BQztlQUFBQTs7UUFOQUM7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7NEJBL01lO2dDQUNFO3lCQUVUO3lCQUNxQztBQUU3RCxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQywwQkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkkscUJBQXFCSixVQUFVO0FBRXJDLE1BQU1LLHFCQUFxQkMsZ0NBQWdCO0lBQ3pDQyxJQUFJQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsWUFB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
@@ -130,15 +130,15 @@ function validateStatementAsMetavariable(statement, context, continuation) {
130
130
  }
131
131
  function unifyStatementWithCombinators(statement, context, continuation) {
132
132
  const combinators = context.getCombinators();
133
- some(combinators, (combinator, continuation)=>{
133
+ return some(combinators, (combinator, continuation)=>{
134
134
  (0, _context.descend)((context)=>{
135
- combinator.unifyStatement(statement, context, continuation);
135
+ return combinator.unifyStatement(statement, context, continuation);
136
136
  }, context);
137
137
  }, continuation);
138
138
  }
139
139
  function unifyStatementWithBracketedCombinator(statement, context, continuation) {
140
140
  const bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)();
141
- bracketedCombinator.unifyStatement(statement, context, continuation);
141
+ return bracketedCombinator.unifyStatement(statement, context, continuation);
142
142
  }
143
143
  function validateStatementAsEquality(statement, context, continuation) {
144
144
  const { Equality } = _elements.default, equality = Equality.fromStatement(statement, context);
@@ -332,4 +332,4 @@ const validateStatements = [
332
332
  validateStatementAsSignatureAssertion
333
333
  ];
334
334
 
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZywgYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9pbnN0YW5jZVwiO1xuXG5jb25zdCB7IHNvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAodmFyaWFibGUpID0+IHtcbiAgICBpZiAodmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSR7cHJvdmlzaW9uYWxseVN0cmluZ30uYCk7XG5cbiAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcblxuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEdlbmVyYXRvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzO1xuXG4gIGNvbnN0IGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzID0gc29tZShnZW5lcmF0b3JzLCAoZ2VuZXJhdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtVW5pZmllcyA9IGdlbmVyYXRvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBzb21lKGNvbnN0cnVjdG9ycywgKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gY29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICBjb25zdCBzdHJpY3QgPSB0cnVlOyAgLy8vXG5cbiAgbWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0cmljdCwgY29udGV4dCwgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0LCAoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICBzb21lKGNvbWJpbmF0b3JzLCAoY29tYmluYXRvciwgY29udGludWF0aW9uKSA9PiB7XG4gICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGV4dCk7XG4gIH0sIGNvbnRpbnVhdGlvbik7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpO1xuXG4gIGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgZXF1YWxpdHkudmFsaWRhdGUoY29udGV4dCwgKGVxdWFsaXR5KSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gIGp1ZGdlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoanVkZ2VtZW50KSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgdHlwZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAodHlwZUFzc2VydGlvbikgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IERlZmluZWRBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChkZWZpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHByb3BlcnR5QXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzdWJwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoY29udGFpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBTaWduYXR1cmVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgc2lnbmF0dXJlQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb24pID0+IHtcbiAgICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcblxuICBjb25zdCBwcm9wZXJ0aWVzID0gY29udGV4dC5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHNvbWUocHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5ID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gcHJvcGVydHkudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3JzLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtcyIsInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJ0ZXJtIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ2YXJpYWJsZSIsImZyb21UZXJtIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwidHlwZVN0cmluZyIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmciLCJwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoR2VuZXJhdG9ycyIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnMiLCJnZW5lcmF0b3JzIiwiZ2V0R2VuZXJhdG9ycyIsImdlbmVyYXRvciIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciIsImNob29zZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiY29tbWl0IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdHJpY3QiLCJUZXJtU3Vic3RpdHV0aW9uIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwiZGVzY2VuZCIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkiLCJFcXVhbGl0eSIsImVxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiIsInRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnR5IiwidGVybVVuaWZpZXNXaXRoUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdhZ0JBO2VBQUFBOztRQWlDSEM7ZUFBQUE7O1FBcmJHQztlQUFBQTs7UUE4YUhDO2VBQUFBOzs7Z0NBeGJ5QjtpRUFFakI7eUJBRVc7d0JBQ21COzBCQUM2Qjs7Ozs7O0FBRWhGLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHFDQUFxQjtBQUUvQixTQUFTSCx1QkFBdUJJLElBQUksRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQ2hFLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGlCQUFRLEVBQ3ZCQyxXQUFXRixTQUFTRyxRQUFRLENBQUNOLE1BQU1DO0lBRXpDLElBQUlJLGFBQWEsTUFBTTtRQUNyQixNQUFNRSwwQkFBMEI7UUFFaEMsT0FBT0wsYUFBYUs7SUFDdEI7SUFFQSxNQUFNQyxhQUFhUixLQUFLUyxTQUFTO0lBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyx1QkFBdUIsQ0FBQztJQUVwRUgsU0FBU00sUUFBUSxDQUFDVixTQUFTLENBQUNJO1FBQzFCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNRSwwQkFBMEI7WUFFaEMsT0FBT0wsYUFBYUs7UUFDdEI7UUFFQSxNQUFNSyxPQUFPUCxTQUFTUSxPQUFPLElBQ3ZCQyxhQUFhRixLQUFLSCxTQUFTLElBQzNCTSxjQUFjVixTQUFT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
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZywgYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9pbnN0YW5jZVwiO1xuXG5jb25zdCB7IHNvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAodmFyaWFibGUpID0+IHtcbiAgICBpZiAodmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSR7cHJvdmlzaW9uYWxseVN0cmluZ30uYCk7XG5cbiAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcblxuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEdlbmVyYXRvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzO1xuXG4gIGNvbnN0IGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzID0gc29tZShnZW5lcmF0b3JzLCAoZ2VuZXJhdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtVW5pZmllcyA9IGdlbmVyYXRvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBzb21lKGNvbnN0cnVjdG9ycywgKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gY29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICBjb25zdCBzdHJpY3QgPSB0cnVlOyAgLy8vXG5cbiAgbWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0cmljdCwgY29udGV4dCwgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0LCAoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICByZXR1cm4gc29tZShjb21iaW5hdG9ycywgKGNvbWJpbmF0b3IsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSwgY29udGludWF0aW9uKTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgZXF1YWxpdHkudmFsaWRhdGUoY29udGV4dCwgKGVxdWFsaXR5KSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gIGp1ZGdlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoanVkZ2VtZW50KSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgdHlwZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAodHlwZUFzc2VydGlvbikgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IERlZmluZWRBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChkZWZpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHByb3BlcnR5QXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzdWJwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoY29udGFpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBTaWduYXR1cmVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgc2lnbmF0dXJlQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb24pID0+IHtcbiAgICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcblxuICBjb25zdCBwcm9wZXJ0aWVzID0gY29udGV4dC5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHNvbWUocHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5ID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gcHJvcGVydHkudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3JzLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtcyIsInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJ0ZXJtIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ2YXJpYWJsZSIsImZyb21UZXJtIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwidHlwZVN0cmluZyIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmciLCJwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoR2VuZXJhdG9ycyIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnMiLCJnZW5lcmF0b3JzIiwiZ2V0R2VuZXJhdG9ycyIsImdlbmVyYXRvciIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciIsImNob29zZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiY29tbWl0IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdHJpY3QiLCJUZXJtU3Vic3RpdHV0aW9uIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwiZGVzY2VuZCIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkiLCJFcXVhbGl0eSIsImVxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiIsInRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnR5IiwidGVybVVuaWZpZXNXaXRoUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdhZ0JBO2VBQUFBOztRQWlDSEM7ZUFBQUE7O1FBcmJHQztlQUFBQTs7UUE4YUhDO2VBQUFBOzs7Z0NBeGJ5QjtpRUFFakI7eUJBRVc7d0JBQ21COzBCQUM2Qjs7Ozs7O0FBRWhGLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHFDQUFxQjtBQUUvQixTQUFTSCx1QkFBdUJJLElBQUksRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQ2hFLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGlCQUFRLEVBQ3ZCQyxXQUFXRixTQUFTRyxRQUFRLENBQUNOLE1BQU1DO0lBRXpDLElBQUlJLGFBQWEsTUFBTTtRQUNyQixNQUFNRSwwQkFBMEI7UUFFaEMsT0FBT0wsYUFBYUs7SUFDdEI7SUFFQSxNQUFNQyxhQUFhUixLQUFLUyxTQUFTO0lBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyx1QkFBdUIsQ0FBQztJQUVwRUgsU0FBU00sUUFBUSxDQUFDVixTQUFTLENBQUNJO1FBQzFCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNRSwwQkFBMEI7WUFFaEMsT0FBT0wsYUFBYUs7UUFDdEI7UUFFQSxNQUFNSyxPQUFPUCxTQUFTUSxPQUFPLElBQ3ZCQyxhQUFhRixLQUFLSCxT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