occam-verify-cli 1.0.587 → 1.0.602
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/ephemeral.js +74 -2
- package/lib/context/file/nominal.js +11 -9
- package/lib/context/liminal.js +161 -24
- package/lib/context/literal.js +8 -2
- package/lib/context/scoped.js +4 -28
- package/lib/context/synthetic.js +146 -0
- package/lib/context.js +170 -1
- package/lib/element/assertion/contained.js +21 -15
- package/lib/element/assertion/defined.js +45 -65
- package/lib/element/assertion/property.js +25 -19
- package/lib/element/assertion/satisfies.js +14 -8
- package/lib/element/assertion/subproof.js +12 -6
- package/lib/element/assertion.js +47 -1
- package/lib/element/assumption.js +12 -12
- package/lib/element/conclusion.js +2 -2
- package/lib/element/deduction.js +2 -2
- package/lib/element/frame.js +61 -29
- package/lib/element/judgement.js +7 -1
- package/lib/element/label.js +8 -8
- package/lib/element/metavariable.js +71 -59
- package/lib/element/procedureCall.js +24 -8
- package/lib/element/proof.js +43 -35
- package/lib/element/proofAssertion/premise.js +122 -97
- package/lib/element/proofAssertion/step.js +161 -115
- package/lib/element/proofAssertion/supposition.js +157 -118
- package/lib/element/proofAssertion.js +3 -3
- package/lib/element/reference.js +40 -7
- package/lib/element/rule.js +227 -95
- package/lib/element/signature.js +2 -1
- package/lib/element/statement.js +67 -34
- package/lib/element/substitution/frame.js +36 -16
- package/lib/element/substitution/reference.js +36 -16
- package/lib/element/substitution/statement.js +94 -55
- package/lib/element/substitution/term.js +36 -16
- package/lib/element/substitution.js +54 -17
- package/lib/element/substitutions.js +4 -276
- package/lib/element/term.js +60 -31
- package/lib/element/topLevelAssertion/axiom.js +13 -4
- package/lib/element/topLevelAssertion/conjecture.js +7 -2
- package/lib/element/topLevelAssertion/theorem.js +7 -2
- package/lib/element/topLevelAssertion.js +201 -134
- package/lib/element/topLevelMetaAssertion.js +310 -51
- package/lib/element/variable.js +15 -6
- package/lib/node/substitution/statement.js +33 -1
- package/lib/process/unify.js +6 -6
- package/lib/utilities/context.js +10 -25
- package/lib/utilities/element.js +34 -9
- package/lib/utilities/statement.js +1 -8
- package/lib/utilities/string.js +12 -1
- package/lib/utilities/substitutions.js +42 -16
- package/lib/utilities/unification.js +3 -1
- package/lib/utilities/validation.js +2 -2
- package/package.json +4 -4
- package/src/context/ephemeral.js +73 -1
- package/src/context/file/nominal.js +14 -11
- package/src/context/liminal.js +180 -25
- package/src/context/literal.js +3 -1
- package/src/context/scoped.js +3 -35
- package/src/context/synthetic.js +49 -0
- package/src/context.js +163 -1
- package/src/element/assertion/contained.js +28 -20
- package/src/element/assertion/defined.js +62 -34
- package/src/element/assertion/property.js +27 -19
- package/src/element/assertion/satisfies.js +15 -7
- package/src/element/assertion/subproof.js +13 -5
- package/src/element/assertion.js +35 -0
- package/src/element/assumption.js +5 -5
- package/src/element/conclusion.js +2 -4
- package/src/element/deduction.js +2 -4
- package/src/element/frame.js +71 -39
- package/src/element/judgement.js +2 -0
- package/src/element/label.js +4 -4
- package/src/element/metavariable.js +94 -75
- package/src/element/procedureCall.js +6 -6
- package/src/element/proof.js +6 -6
- package/src/element/proofAssertion/premise.js +101 -69
- package/src/element/proofAssertion/step.js +78 -39
- package/src/element/proofAssertion/supposition.js +141 -115
- package/src/element/proofAssertion.js +3 -2
- package/src/element/reference.js +52 -10
- package/src/element/rule.js +138 -76
- package/src/element/signature.js +2 -0
- package/src/element/statement.js +76 -45
- package/src/element/substitution/frame.js +44 -15
- package/src/element/substitution/reference.js +44 -15
- package/src/element/substitution/statement.js +124 -72
- package/src/element/substitution/term.js +43 -15
- package/src/element/substitution.js +55 -18
- package/src/element/substitutions.js +1 -258
- package/src/element/term.js +65 -34
- package/src/element/topLevelAssertion/axiom.js +1 -1
- package/src/element/topLevelAssertion/conjecture.js +1 -1
- package/src/element/topLevelAssertion/theorem.js +1 -1
- package/src/element/topLevelAssertion.js +128 -48
- package/src/element/topLevelMetaAssertion.js +86 -32
- package/src/element/variable.js +15 -5
- package/src/node/substitution/statement.js +33 -0
- package/src/process/unify.js +6 -8
- package/src/utilities/context.js +9 -8
- package/src/utilities/element.js +37 -10
- package/src/utilities/statement.js +0 -7
- package/src/utilities/string.js +14 -0
- package/src/utilities/substitutions.js +59 -17
- package/src/utilities/unification.js +4 -0
- package/src/utilities/validation.js +3 -1
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _occamlanguages = require("occam-languages");
|
|
12
12
|
var _necessary = require("necessary");
|
|
13
|
+
var _assign = /*#__PURE__*/ _interop_require_default(require("../process/assign"));
|
|
13
14
|
var _context = require("../utilities/context");
|
|
14
15
|
var _json = require("../utilities/json");
|
|
15
16
|
function _assert_this_initialized(self) {
|
|
@@ -106,6 +107,11 @@ function _inherits(subClass, superClass) {
|
|
|
106
107
|
});
|
|
107
108
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
108
109
|
}
|
|
110
|
+
function _interop_require_default(obj) {
|
|
111
|
+
return obj && obj.__esModule ? obj : {
|
|
112
|
+
default: obj
|
|
113
|
+
};
|
|
114
|
+
}
|
|
109
115
|
function _is_native_function(fn) {
|
|
110
116
|
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
111
117
|
}
|
|
@@ -251,7 +257,7 @@ function _ts_generator(thisArg, body) {
|
|
|
251
257
|
};
|
|
252
258
|
}
|
|
253
259
|
}
|
|
254
|
-
var
|
|
260
|
+
var extract = _necessary.arrayUtilities.extract, reverse = _necessary.arrayUtilities.reverse, correlate = _necessary.arrayUtilities.correlate, asyncForwardsEvery = _occamlanguages.asynchronousUtilities.asyncForwardsEvery, asyncBackwardsEvery = _occamlanguages.asynchronousUtilities.asyncBackwardsEvery;
|
|
255
261
|
var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
256
262
|
_inherits(TopLevelAssertion, Element);
|
|
257
263
|
function TopLevelAssertion(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses) {
|
|
@@ -378,26 +384,49 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
378
384
|
{
|
|
379
385
|
key: "verifyLabels",
|
|
380
386
|
value: function verifyLabels() {
|
|
381
|
-
var labelsVerify
|
|
387
|
+
var labelsVerify;
|
|
388
|
+
var context = this.getContext(), topLevelAssertionString = this.getString();
|
|
389
|
+
context.trace("Verifying the '".concat(topLevelAssertionString, "' top level assertion's labels..."));
|
|
390
|
+
labelsVerify = this.labels.every(function(label) {
|
|
382
391
|
var nameOnly = true, labelVerifies = label.verify(nameOnly);
|
|
383
392
|
if (labelVerifies) {
|
|
384
393
|
return true;
|
|
385
394
|
}
|
|
386
395
|
});
|
|
396
|
+
if (labelsVerify) {
|
|
397
|
+
context.trace("...verified the '".concat(topLevelAssertionString, "' top level assertion's labels."));
|
|
398
|
+
}
|
|
387
399
|
return labelsVerify;
|
|
388
400
|
}
|
|
389
401
|
},
|
|
402
|
+
{
|
|
403
|
+
key: "unifyStatementWithDeduction",
|
|
404
|
+
value: function unifyStatementWithDeduction(statement, context) {
|
|
405
|
+
var statementUnifiesWithDeduction = false;
|
|
406
|
+
var statementString = statement.getString(), deductionString = this.deduction.getString(), topLevelAssertionString = this.getString(); ///
|
|
407
|
+
context.trace("Unifying the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion's '").concat(deductionString, "' deduction..."));
|
|
408
|
+
var statementUnifies = this.deduction.unifyStatement(statement, context);
|
|
409
|
+
if (statementUnifies) {
|
|
410
|
+
statementUnifiesWithDeduction = true;
|
|
411
|
+
}
|
|
412
|
+
if (statementUnifiesWithDeduction) {
|
|
413
|
+
context.debug("...unified the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion's '").concat(deductionString, "' deduction."));
|
|
414
|
+
}
|
|
415
|
+
return statementUnifiesWithDeduction;
|
|
416
|
+
}
|
|
417
|
+
},
|
|
390
418
|
{
|
|
391
419
|
key: "verify",
|
|
392
420
|
value: function verify() {
|
|
393
421
|
return _async_to_generator(function() {
|
|
394
|
-
var _this, verifies, context;
|
|
422
|
+
var _this, verifies, context, topLevelAssertionString;
|
|
395
423
|
return _ts_generator(this, function(_state) {
|
|
396
424
|
switch(_state.label){
|
|
397
425
|
case 0:
|
|
398
426
|
_this = this;
|
|
399
427
|
verifies = false;
|
|
400
|
-
context = this.getContext();
|
|
428
|
+
context = this.getContext(), topLevelAssertionString = this.getString(); ///
|
|
429
|
+
context.trace("Verifying the '".concat(topLevelAssertionString, "' top level assertion..."));
|
|
401
430
|
return [
|
|
402
431
|
4,
|
|
403
432
|
(0, _context.asyncScope)(function(context) {
|
|
@@ -452,6 +481,9 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
452
481
|
];
|
|
453
482
|
case 1:
|
|
454
483
|
_state.sent();
|
|
484
|
+
if (verifies) {
|
|
485
|
+
context.debug("...verified the '".concat(topLevelAssertionString, "' top level assertion."));
|
|
486
|
+
}
|
|
455
487
|
return [
|
|
456
488
|
2,
|
|
457
489
|
verifies
|
|
@@ -461,45 +493,108 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
461
493
|
}).call(this);
|
|
462
494
|
}
|
|
463
495
|
},
|
|
496
|
+
{
|
|
497
|
+
key: "verifyProof",
|
|
498
|
+
value: function verifyProof(context) {
|
|
499
|
+
return _async_to_generator(function() {
|
|
500
|
+
var proofVerifies, topLevelAssertionString, statement;
|
|
501
|
+
return _ts_generator(this, function(_state) {
|
|
502
|
+
if (this.proof === null) {
|
|
503
|
+
proofVerifies = true;
|
|
504
|
+
} else {
|
|
505
|
+
topLevelAssertionString = this.getString(); ///
|
|
506
|
+
context.trace("Verifying the '".concat(topLevelAssertionString, "' top level assertion's proof..."));
|
|
507
|
+
statement = this.deduction.getStatement();
|
|
508
|
+
proofVerifies = this.proof.verify(statement, context);
|
|
509
|
+
if (proofVerifies) {
|
|
510
|
+
context.debug("...verified the '".concat(topLevelAssertionString, "' top level assertion's proof."));
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return [
|
|
514
|
+
2,
|
|
515
|
+
proofVerifies
|
|
516
|
+
];
|
|
517
|
+
});
|
|
518
|
+
}).call(this);
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
key: "verifyDeduction",
|
|
523
|
+
value: function verifyDeduction(context) {
|
|
524
|
+
return _async_to_generator(function() {
|
|
525
|
+
var deductionVerifies, topLevelAssertionString;
|
|
526
|
+
return _ts_generator(this, function(_state) {
|
|
527
|
+
switch(_state.label){
|
|
528
|
+
case 0:
|
|
529
|
+
topLevelAssertionString = this.getString(); ///
|
|
530
|
+
context.trace("Verifying the '".concat(topLevelAssertionString, "' top level assertion's deduction..."));
|
|
531
|
+
return [
|
|
532
|
+
4,
|
|
533
|
+
this.deduction.verify(context)
|
|
534
|
+
];
|
|
535
|
+
case 1:
|
|
536
|
+
deductionVerifies = _state.sent();
|
|
537
|
+
if (deductionVerifies) {
|
|
538
|
+
context.debug("...verified the '".concat(topLevelAssertionString, "' top level assertion's deduction."));
|
|
539
|
+
}
|
|
540
|
+
return [
|
|
541
|
+
2,
|
|
542
|
+
deductionVerifies
|
|
543
|
+
];
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
}).call(this);
|
|
547
|
+
}
|
|
548
|
+
},
|
|
464
549
|
{
|
|
465
550
|
key: "verifySuppositions",
|
|
466
551
|
value: function verifySuppositions(context) {
|
|
467
552
|
return _async_to_generator(function() {
|
|
468
|
-
var
|
|
553
|
+
var suppositionsVerify, topLevelAssertionString;
|
|
469
554
|
return _ts_generator(this, function(_state) {
|
|
470
555
|
switch(_state.label){
|
|
471
556
|
case 0:
|
|
472
|
-
|
|
557
|
+
topLevelAssertionString = this.getString(); ///
|
|
558
|
+
context.trace("Verifying the '".concat(topLevelAssertionString, "' top level assertion's suppositions..."));
|
|
473
559
|
return [
|
|
474
560
|
4,
|
|
475
|
-
|
|
561
|
+
asyncForwardsEvery(this.suppositions, function(supposition) {
|
|
476
562
|
return _async_to_generator(function() {
|
|
477
|
-
var suppositionVerifies;
|
|
563
|
+
var assignments, suppositionVerifies, assignmentsAssigned, subproofOrProofAssertion;
|
|
478
564
|
return _ts_generator(this, function(_state) {
|
|
479
565
|
switch(_state.label){
|
|
480
566
|
case 0:
|
|
567
|
+
assignments = [];
|
|
481
568
|
return [
|
|
482
569
|
4,
|
|
483
|
-
|
|
570
|
+
supposition.verify(assignments, context)
|
|
484
571
|
];
|
|
485
572
|
case 1:
|
|
486
573
|
suppositionVerifies = _state.sent();
|
|
487
574
|
if (suppositionVerifies) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
575
|
+
assignmentsAssigned = (0, _assign.default)(assignments, context);
|
|
576
|
+
if (assignmentsAssigned) {
|
|
577
|
+
subproofOrProofAssertion = supposition; ////
|
|
578
|
+
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
579
|
+
return [
|
|
580
|
+
2,
|
|
581
|
+
true
|
|
582
|
+
];
|
|
583
|
+
}
|
|
492
584
|
}
|
|
493
585
|
return [
|
|
494
586
|
2
|
|
495
587
|
];
|
|
496
588
|
}
|
|
497
589
|
});
|
|
498
|
-
})
|
|
590
|
+
})();
|
|
499
591
|
})
|
|
500
592
|
];
|
|
501
593
|
case 1:
|
|
502
594
|
suppositionsVerify = _state.sent();
|
|
595
|
+
if (suppositionsVerify) {
|
|
596
|
+
context.debug("...verified the '".concat(topLevelAssertionString, "' top level assertion's suppositions."));
|
|
597
|
+
}
|
|
503
598
|
return [
|
|
504
599
|
2,
|
|
505
600
|
suppositionsVerify
|
|
@@ -510,45 +605,45 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
510
605
|
}
|
|
511
606
|
},
|
|
512
607
|
{
|
|
513
|
-
key: "
|
|
514
|
-
value: function
|
|
608
|
+
key: "unifyStatementAndSubproofOrProofAssertions",
|
|
609
|
+
value: function unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, context) {
|
|
515
610
|
return _async_to_generator(function() {
|
|
516
|
-
var
|
|
611
|
+
var statementAndSubproofOrProofAssertionsUnify, correlatesToHypotheses, statementUnifiesWithDeduction, subproofOrProofAssertionsUnifiesWithSuppositions, specificContext, generalContext, substitutionsResolved;
|
|
517
612
|
return _ts_generator(this, function(_state) {
|
|
518
613
|
switch(_state.label){
|
|
519
614
|
case 0:
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
615
|
+
statementAndSubproofOrProofAssertionsUnify = false;
|
|
616
|
+
correlatesToHypotheses = this.correlateHypotheses(context);
|
|
617
|
+
if (!correlatesToHypotheses) return [
|
|
618
|
+
3,
|
|
619
|
+
2
|
|
523
620
|
];
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
2
|
|
528
|
-
suppositionVerifies
|
|
621
|
+
statementUnifiesWithDeduction = this.unifyStatementWithDeduction(statement, context);
|
|
622
|
+
if (!statementUnifiesWithDeduction) return [
|
|
623
|
+
3,
|
|
624
|
+
2
|
|
529
625
|
];
|
|
530
|
-
}
|
|
531
|
-
});
|
|
532
|
-
})();
|
|
533
|
-
}
|
|
534
|
-
},
|
|
535
|
-
{
|
|
536
|
-
key: "verifyDeduction",
|
|
537
|
-
value: function verifyDeduction(context) {
|
|
538
|
-
return _async_to_generator(function() {
|
|
539
|
-
var deductionVerifies;
|
|
540
|
-
return _ts_generator(this, function(_state) {
|
|
541
|
-
switch(_state.label){
|
|
542
|
-
case 0:
|
|
543
626
|
return [
|
|
544
627
|
4,
|
|
545
|
-
this.
|
|
628
|
+
this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context)
|
|
546
629
|
];
|
|
547
630
|
case 1:
|
|
548
|
-
|
|
631
|
+
subproofOrProofAssertionsUnifiesWithSuppositions = _state.sent();
|
|
632
|
+
if (subproofOrProofAssertionsUnifiesWithSuppositions) {
|
|
633
|
+
specificContext = context; ///
|
|
634
|
+
context = this.getContext();
|
|
635
|
+
generalContext = context; ///
|
|
636
|
+
context = specificContext; ///
|
|
637
|
+
substitutionsResolved = context.areSubstitutionsResolved(generalContext, specificContext);
|
|
638
|
+
if (substitutionsResolved) {
|
|
639
|
+
statementAndSubproofOrProofAssertionsUnify = true;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
_state.label = 2;
|
|
643
|
+
case 2:
|
|
549
644
|
return [
|
|
550
645
|
2,
|
|
551
|
-
|
|
646
|
+
statementAndSubproofOrProofAssertionsUnify
|
|
552
647
|
];
|
|
553
648
|
}
|
|
554
649
|
});
|
|
@@ -556,122 +651,94 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
556
651
|
}
|
|
557
652
|
},
|
|
558
653
|
{
|
|
559
|
-
key: "
|
|
560
|
-
value: function
|
|
654
|
+
key: "unifySubproofOrProofAssertionsWithSupposition",
|
|
655
|
+
value: function unifySubproofOrProofAssertionsWithSupposition(subproofOrProofAssertions, supposition, context) {
|
|
561
656
|
return _async_to_generator(function() {
|
|
562
|
-
var _this,
|
|
657
|
+
var _this, subproofOrProofAssertionsUnifiesWithSupposition, subproofOrProofAssertion, suppositionUnifiesIndependently;
|
|
563
658
|
return _ts_generator(this, function(_state) {
|
|
564
659
|
switch(_state.label){
|
|
565
660
|
case 0:
|
|
566
661
|
_this = this;
|
|
567
|
-
|
|
568
|
-
if (!
|
|
662
|
+
subproofOrProofAssertionsUnifiesWithSupposition = false;
|
|
663
|
+
if (!subproofOrProofAssertionsUnifiesWithSupposition) {
|
|
664
|
+
subproofOrProofAssertion = extract(subproofOrProofAssertions, function(subproofOrProofAssertion) {
|
|
665
|
+
var subproofOrProofAssertionUnifies = supposition.unifySubproofOrProofAssertion(subproofOrProofAssertion, context);
|
|
666
|
+
if (subproofOrProofAssertionUnifies) {
|
|
667
|
+
var specificContext = context; ///
|
|
668
|
+
context = _this.getContext();
|
|
669
|
+
var generalContext = context; ///
|
|
670
|
+
context = specificContext; ///
|
|
671
|
+
context.resolveSubstitutions(generalContext, specificContext);
|
|
672
|
+
return true;
|
|
673
|
+
}
|
|
674
|
+
}) || null;
|
|
675
|
+
if (subproofOrProofAssertion !== null) {
|
|
676
|
+
subproofOrProofAssertionsUnifiesWithSupposition = true;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
if (!!subproofOrProofAssertionsUnifiesWithSupposition) return [
|
|
569
680
|
3,
|
|
570
681
|
2
|
|
571
682
|
];
|
|
572
683
|
return [
|
|
573
684
|
4,
|
|
574
|
-
|
|
575
|
-
return _async_to_generator(function() {
|
|
576
|
-
var proofVerifies;
|
|
577
|
-
return _ts_generator(this, function(_state) {
|
|
578
|
-
switch(_state.label){
|
|
579
|
-
case 0:
|
|
580
|
-
return [
|
|
581
|
-
4,
|
|
582
|
-
this.proof.verify(this.deduction, context)
|
|
583
|
-
];
|
|
584
|
-
case 1:
|
|
585
|
-
proofVerifies = _state.sent();
|
|
586
|
-
return [
|
|
587
|
-
2,
|
|
588
|
-
proofVerifies
|
|
589
|
-
];
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
}).call(_this);
|
|
593
|
-
}, context)
|
|
685
|
+
supposition.unifyIndependently(context)
|
|
594
686
|
];
|
|
595
687
|
case 1:
|
|
596
|
-
|
|
688
|
+
suppositionUnifiesIndependently = _state.sent();
|
|
689
|
+
if (suppositionUnifiesIndependently) {
|
|
690
|
+
subproofOrProofAssertionsUnifiesWithSupposition = true;
|
|
691
|
+
}
|
|
597
692
|
_state.label = 2;
|
|
598
693
|
case 2:
|
|
599
694
|
return [
|
|
600
695
|
2,
|
|
601
|
-
|
|
696
|
+
subproofOrProofAssertionsUnifiesWithSupposition
|
|
602
697
|
];
|
|
603
698
|
}
|
|
604
699
|
});
|
|
605
700
|
}).call(this);
|
|
606
701
|
}
|
|
607
702
|
},
|
|
608
|
-
{
|
|
609
|
-
key: "unifyStatementWithDeduction",
|
|
610
|
-
value: function unifyStatementWithDeduction(statement, substitutions, context) {
|
|
611
|
-
var statementUnifiesWithDeduction = false;
|
|
612
|
-
var statementUnifies = this.deduction.unifyStatement(statement, substitutions, context); ///
|
|
613
|
-
if (statementUnifies) {
|
|
614
|
-
statementUnifiesWithDeduction = true;
|
|
615
|
-
}
|
|
616
|
-
return statementUnifiesWithDeduction;
|
|
617
|
-
}
|
|
618
|
-
},
|
|
619
|
-
{
|
|
620
|
-
key: "unifyStatementAndSubproofOrProofAssertions",
|
|
621
|
-
value: function unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, substitutions, context) {
|
|
622
|
-
var statementAndSubproofOrProofAssertionsUnify = false;
|
|
623
|
-
var correlatesToHypotheses = this.correlateHypotheses(context);
|
|
624
|
-
if (correlatesToHypotheses) {
|
|
625
|
-
var statementUnifiesWithDeduction = this.unifyStatementWithDeduction(statement, substitutions, context);
|
|
626
|
-
if (statementUnifiesWithDeduction) {
|
|
627
|
-
var subproofOrProofAssertionsUnifyWithSuppositions = this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, substitutions, context);
|
|
628
|
-
if (subproofOrProofAssertionsUnifyWithSuppositions) {
|
|
629
|
-
var substitutionsResolved = substitutions.areResolved();
|
|
630
|
-
if (substitutionsResolved) {
|
|
631
|
-
statementAndSubproofOrProofAssertionsUnify = true;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
return statementAndSubproofOrProofAssertionsUnify;
|
|
637
|
-
}
|
|
638
|
-
},
|
|
639
|
-
{
|
|
640
|
-
key: "unifySubproofOrProofAssertionsWithSupposition",
|
|
641
|
-
value: function unifySubproofOrProofAssertionsWithSupposition(subproofOrProofAssertions, supposition, substitutions, generalContext, specificContext) {
|
|
642
|
-
var subproofOrProofAssertionsUnifiesWithSupposition = false;
|
|
643
|
-
if (!subproofOrProofAssertionsUnifiesWithSupposition) {
|
|
644
|
-
var subproofOrProofAssertion = extract(subproofOrProofAssertions, function(subproofOrProofAssertion) {
|
|
645
|
-
var subproofOrProofAssertionUnifies = supposition.unifySubproofOrProofAssertion(subproofOrProofAssertion, substitutions, generalContext, specificContext);
|
|
646
|
-
if (subproofOrProofAssertionUnifies) {
|
|
647
|
-
return true;
|
|
648
|
-
}
|
|
649
|
-
}) || null;
|
|
650
|
-
if (subproofOrProofAssertion !== null) {
|
|
651
|
-
subproofOrProofAssertionsUnifiesWithSupposition = true;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
if (!subproofOrProofAssertionsUnifiesWithSupposition) {
|
|
655
|
-
var context = specificContext, suppositionUnifiesIndependently = supposition.unifyIndependently(substitutions, context);
|
|
656
|
-
if (suppositionUnifiesIndependently) {
|
|
657
|
-
subproofOrProofAssertionsUnifiesWithSupposition = true;
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
return subproofOrProofAssertionsUnifiesWithSupposition;
|
|
661
|
-
}
|
|
662
|
-
},
|
|
663
703
|
{
|
|
664
704
|
key: "unifySubproofOrProofAssertionsWithSuppositions",
|
|
665
|
-
value: function unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions,
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
705
|
+
value: function unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context) {
|
|
706
|
+
return _async_to_generator(function() {
|
|
707
|
+
var _this, subproofOrProofAssertionsUnifiesWithSuppositions;
|
|
708
|
+
return _ts_generator(this, function(_state) {
|
|
709
|
+
_this = this;
|
|
710
|
+
subproofOrProofAssertions = reverse(subproofOrProofAssertions); ///
|
|
711
|
+
subproofOrProofAssertionsUnifiesWithSuppositions = asyncBackwardsEvery(this.suppositions, function(supposition) {
|
|
712
|
+
return _async_to_generator(function() {
|
|
713
|
+
var stepUnifiesWithSupposition;
|
|
714
|
+
return _ts_generator(this, function(_state) {
|
|
715
|
+
switch(_state.label){
|
|
716
|
+
case 0:
|
|
717
|
+
return [
|
|
718
|
+
4,
|
|
719
|
+
this.unifySubproofOrProofAssertionsWithSupposition(subproofOrProofAssertions, supposition, context)
|
|
720
|
+
];
|
|
721
|
+
case 1:
|
|
722
|
+
stepUnifiesWithSupposition = _state.sent();
|
|
723
|
+
if (stepUnifiesWithSupposition) {
|
|
724
|
+
return [
|
|
725
|
+
2,
|
|
726
|
+
true
|
|
727
|
+
];
|
|
728
|
+
}
|
|
729
|
+
return [
|
|
730
|
+
2
|
|
731
|
+
];
|
|
732
|
+
}
|
|
733
|
+
});
|
|
734
|
+
}).call(_this);
|
|
735
|
+
});
|
|
736
|
+
return [
|
|
737
|
+
2,
|
|
738
|
+
subproofOrProofAssertionsUnifiesWithSuppositions
|
|
739
|
+
];
|
|
740
|
+
});
|
|
741
|
+
}).call(this);
|
|
675
742
|
}
|
|
676
743
|
},
|
|
677
744
|
{
|
|
@@ -699,4 +766,4 @@ var TopLevelAssertion = /*#__PURE__*/ function(Element) {
|
|
|
699
766
|
return TopLevelAssertion;
|
|
700
767
|
}(_wrap_native_super(_occamlanguages.Element));
|
|
701
768
|
|
|
702
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGFzeW5jU2NvcGUsIGFzeW5jQXR0ZW1wdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZUZyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04sXG4gICAgICAgICBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IGFzeW5jRXZlcnkgfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcyxcbiAgICAgIHsgZXh0cmFjdCwgcmV2ZXJzZSwgY29ycmVsYXRlLCBiYWNrd2FyZHNFdmVyeSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcExldmVsQXNzZXJ0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmRlZHVjdGlvbiA9IGRlZHVjdGlvbjtcbiAgICB0aGlzLnByb29mID0gcHJvb2Y7XG4gICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbHM7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0RGVkdWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbjtcbiAgfVxuXG4gIGdldFByb29mKCkge1xuICAgIHJldHVybiB0aGlzLnByb29mO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7IHJldHVybiB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTsgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgaXNVbmNvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB1bmNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gdW5jb25kaXRpb25hbDtcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gbGFiZWwuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGlmIChsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lO1xuICB9XG5cbiAgY29ycmVsYXRlSHlwb3RoZXNlcyhjb250ZXh0KSB7XG4gICAgbGV0IGNvcnJlbGF0ZXNUb0h5cG90aGVzZXM7XG5cbiAgICBjb25zdCBoeXBvdGhldGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RoZXRpY2FsKSB7XG4gICAgICBjb25zdCBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYENvcnJlbGF0aW5nIHRoZSBoeXBvdGhlc2VzIG9mIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29ycmVsYXRlc1RvSHlwb3RoZXNlcyA9IGNvcnJlbGF0ZSh0aGlzLmh5cG90aGVzZXMsIHByb29mQXNzZXJ0aW9ucywgKGh5cG90aGVzaXMsIHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGh5cG90aGVzZXNDb21wYXJlc1RvU3RlcCA9IGh5cG90aGVzaXMuY29tcGFyZVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoaHlwb3RoZXNlc0NvbXBhcmVzVG9TdGVwKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY29ycmVsYXRlc1RvSHlwb3RoZXNlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb3JyZWxhdGVkIHRoZSBoeXBvdGhlc2VzIG9mIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcnJlbGF0ZXNUb0h5cG90aGVzZXMgPSB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcnJlbGF0ZXNUb0h5cG90aGVzZXM7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWxzVmVyaWZ5ID0gdGhpcy5sYWJlbHMuZXZlcnkoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBuYW1lT25seSA9IHRydWUsXG4gICAgICAgICAgICBsYWJlbFZlcmlmaWVzID0gbGFiZWwudmVyaWZ5KG5hbWVPbmx5KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxzVmVyaWZ5O1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgYXdhaXQgYXN5bmNTY29wZShhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxzVmVyaWZ5ID0gdGhpcy52ZXJpZnlMYWJlbHMoKTtcblxuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnNWZXJpZnkgPSBhd2FpdCB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZ5KSB7XG4gICAgICAgICAgY29uc3QgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeURlZHVjdGlvbihjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5UHJvb2YoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zVmVyaWZ5ID0gYXdhaXQgYXN5bmNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgYXN5bmMgKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1ZlcmlmeTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllcyA9IGF3YWl0IHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMuZGVkdWN0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgIHJldHVybiBkZWR1Y3Rpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcyA9IHRydWU7IC8vL1xuXG4gICAgaWYgKHRoaXMucHJvb2YgIT09IG51bGwpIHtcbiAgICAgIHByb29mVmVyaWZpZXMgPSBhd2FpdCBhc3luY0F0dGVtcHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMucHJvb2YudmVyaWZ5KHRoaXMuZGVkdWN0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gcHJvb2ZWZXJpZmllcztcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZlZlcmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnRXaXRoRGVkdWN0aW9uKHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvcnJlbGF0ZXNUb0h5cG90aGVzZXMgPSB0aGlzLmNvcnJlbGF0ZUh5cG90aGVzZXMoY29udGV4dCk7XG5cbiAgICBpZiAoY29ycmVsYXRlc1RvSHlwb3RoZXNlcykge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VW5pZmllc1dpdGhEZWR1Y3Rpb24gPSB0aGlzLnVuaWZ5U3RhdGVtZW50V2l0aERlZHVjdGlvbihzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5V2l0aFN1cHBvc2l0aW9ucyA9IHRoaXMudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5V2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IHN1YnN0aXR1dGlvbnMuYXJlUmVzb2x2ZWQoKTtcblxuICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKCFzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbikge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gZXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSBzdXBwb3NpdGlvbi51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllc0luZGVwZW5kZW50bHkgPSBzdXBwb3NpdGlvbi51bmlmeUluZGVwZW5kZW50bHkoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb247XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gcmV2ZXJzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTsgLy8vXG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnlXaXRoU3VwcG9zaXRpb25zID0gYmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnlXaXRoU3VwcG9zaXRpb25zO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgIGh5cG90aGVzZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJUb3BMZXZlbEFzc2VydGlvbiIsImFzeW5jRXZlcnkiLCJhc3luY2hyb25vdXNVdGlsaXRpZXMiLCJleHRyYWN0IiwiYXJyYXlVdGlsaXRpZXMiLCJyZXZlcnNlIiwiY29ycmVsYXRlIiwiYmFja3dhcmRzRXZlcnkiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdGF0ZW1lbnQiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJpc1VuY29uZGl0aW9uYWwiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJ1bmNvbmRpdGlvbmFsIiwiZ2V0U3VwcG9zaXRpb24iLCJpbmRleCIsInN1cHBvc2l0aW9uIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJzb21lIiwibGFiZWwiLCJsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29ycmVsYXRlSHlwb3RoZXNlcyIsImNvcnJlbGF0ZXNUb0h5cG90aGVzZXMiLCJwcm9vZkFzc2VydGlvbnMiLCJnZXRQcm9vZkFzc2VydGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaHlwb3RoZXNpcyIsInByb29mQXNzZXJ0aW9uIiwiaHlwb3RoZXNlc0NvbXBhcmVzVG9TdGVwIiwiY29tcGFyZVByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2ZXJpZnlMYWJlbHMiLCJsYWJlbHNWZXJpZnkiLCJldmVyeSIsIm5hbWVPbmx5IiwibGFiZWxWZXJpZmllcyIsInZlcmlmeSIsInZlcmlmaWVzIiwiZ2V0Q29udGV4dCIsImFzeW5jU2NvcGUiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJkZWR1Y3Rpb25WZXJpZmllcyIsInByb29mVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlQcm9vZiIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsImFzeW5jQXR0ZW1wdCIsInVuaWZ5U3RhdGVtZW50V2l0aERlZHVjdGlvbiIsInN0YXRlbWVudCIsInN1YnN0aXR1dGlvbnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnlXaXRoU3VwcG9zaXRpb25zIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyIsInN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZVJlc29sdmVkIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1cHBvc2l0aW9uVW5pZmllc0luZGVwZW5kZW50bHkiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwiZGVkdWN0aW9uSlNPTiIsImRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJzaWduYXR1cmVKU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsIkNsYXNzIiwibGFiZWxzRnJvbUpTT04iLCJkZWR1Y3Rpb25Gcm9tSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJoeXBvdGhlc2VzRnJvbUpTT04iLCJzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJFbGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQXFCcUJBOzs7OEJBbkJHO3lCQUNPO3VCQUdVO29CQVVNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsSUFBTSxBQUFFQyxhQUFlQyxxQ0FBcUIsQ0FBcENELFlBQ0FFLFVBQWdEQyx5QkFBYyxDQUE5REQsU0FBU0UsVUFBdUNELHlCQUFjLENBQXJEQyxTQUFTQyxZQUE4QkYseUJBQWMsQ0FBNUNFLFdBQVdDLGlCQUFtQkgseUJBQWMsQ0FBakNHO0FBRXRCLElBQUEsQUFBTVAsa0NBQU47Y0FB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
|
|
769
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBhc3NpZ25Bc3NpZ25tZW50cyBmcm9tIFwiLi4vcHJvY2Vzcy9hc3NpZ25cIjtcblxuaW1wb3J0IHsgYXN5bmNTY29wZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZUZyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04sXG4gICAgICAgICBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IGV4dHJhY3QsIHJldmVyc2UsIGNvcnJlbGF0ZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFzeW5jRm9yd2FyZHNFdmVyeSwgYXN5bmNCYWNrd2FyZHNFdmVyeSB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbEFzc2VydGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7IH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIGlzVW5jb25kaXRpb25hbCgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSB0aGlzLnN1cHBvc2l0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgdW5jb25kaXRpb25hbCA9IChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIHVuY29uZGl0aW9uYWw7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbihpbmRleCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gdGhpcy5zdXBwb3NpdGlvbnNbaW5kZXhdIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGxhYmVsLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobGFiZWxDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGNvcnJlbGF0ZUh5cG90aGVzZXMoY29udGV4dCkge1xuICAgIGxldCBjb3JyZWxhdGVzVG9IeXBvdGhlc2VzO1xuXG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKGh5cG90aGV0aWNhbCkge1xuICAgICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBDb3JyZWxhdGluZyB0aGUgaHlwb3RoZXNlcyBvZiB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvcnJlbGF0ZXNUb0h5cG90aGVzZXMgPSBjb3JyZWxhdGUodGhpcy5oeXBvdGhlc2VzLCBwcm9vZkFzc2VydGlvbnMsIChoeXBvdGhlc2lzLCBwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICBjb25zdCBoeXBvdGhlc2VzQ29tcGFyZXNUb1N0ZXAgPSBoeXBvdGhlc2lzLmNvbXBhcmVQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGh5cG90aGVzZXNDb21wYXJlc1RvU3RlcCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNvcnJlbGF0ZXNUb0h5cG90aGVzZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29ycmVsYXRlZCB0aGUgaHlwb3RoZXNlcyBvZiB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3JyZWxhdGVzVG9IeXBvdGhlc2VzID0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBjb3JyZWxhdGVzVG9IeXBvdGhlc2VzO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWxzKCkge1xuICAgIGxldCBsYWJlbHNWZXJpZnk7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuLi5gKTtcblxuICAgIGxhYmVsc1ZlcmlmeSA9IHRoaXMubGFiZWxzLmV2ZXJ5KChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbmFtZU9ubHkgPSB0cnVlLFxuICAgICAgICAgICAgbGFiZWxWZXJpZmllcyA9IGxhYmVsLnZlcmlmeShuYW1lT25seSk7XG5cbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgY29udGV4dC50cmFjZShgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIGxhYmVscy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzVmVyaWZ5O1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnRXaXRoRGVkdWN0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhEZWR1Y3Rpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhEZWR1Y3Rpb247XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhd2FpdCBhc3luY1Njb3BlKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbHNWZXJpZnkgPSB0aGlzLnZlcmlmeUxhYmVscygpO1xuXG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlQcm9vZihjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcztcblxuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBwcm9vZlZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHByb29mVmVyaWZpZXMgPSB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCkge1xuICAgIGxldCBkZWR1Y3Rpb25WZXJpZmllcztcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBkZWR1Y3Rpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25zVmVyaWZ5O1xuXG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIHN1cHBvc2l0aW9ucy4uLmApO1xuXG4gICAgc3VwcG9zaXRpb25zVmVyaWZ5ID0gYXdhaXQgYXN5bmNGb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCBhc3luYyAoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgICBzdXBwb3NpdGlvblZlcmlmaWVzID0gYXdhaXQgc3VwcG9zaXRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBjb250ZXh0KVxuXG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBhc3NpZ25tZW50c0Fzc2lnbmVkID0gYXNzaWduQXNzaWdubWVudHMoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChhc3NpZ25tZW50c0Fzc2lnbmVkKSB7XG4gICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1ZlcmlmeTtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb3JyZWxhdGVzVG9IeXBvdGhlc2VzID0gdGhpcy5jb3JyZWxhdGVIeXBvdGhlc2VzKGNvbnRleHQpO1xuXG4gICAgaWYgKGNvcnJlbGF0ZXNUb0h5cG90aGVzZXMpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uID0gdGhpcy51bmlmeVN0YXRlbWVudFdpdGhEZWR1Y3Rpb24oc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyA9IGF3YWl0IHRoaXMudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlU3Vic3RpdHV0aW9uc1Jlc29sdmVkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5O1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoIXN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBleHRyYWN0KHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHN1cHBvc2l0aW9uLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5yZXNvbHZlU3Vic3RpdHV0aW9ucyhnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblVuaWZpZXNJbmRlcGVuZGVudGx5ID0gYXdhaXQgc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucztcblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyA9IGFzeW5jQmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3RlcFVuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSBhd2FpdCB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhTdXBwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTih0aGlzLmRlZHVjdGlvbiksXG4gICAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTih0aGlzLnN1cHBvc2l0aW9ucyksXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTih0aGlzLnNpZ25hdHVyZSksXG4gICAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTih0aGlzLmh5cG90aGVzZXMpLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUpTT04sICAvLy9cbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgZGVkdWN0aW9uLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zLFxuICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgaHlwb3RoZXNlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihDbGFzcywganNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRvcExldmVsQXNzZXJ0aW9uIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwicmV2ZXJzZSIsImNvcnJlbGF0ZSIsImFzeW5jRm9yd2FyZHNFdmVyeSIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImFzeW5jQmFja3dhcmRzRXZlcnkiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdGF0ZW1lbnQiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJpc1VuY29uZGl0aW9uYWwiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJ1bmNvbmRpdGlvbmFsIiwiZ2V0U3VwcG9zaXRpb24iLCJpbmRleCIsInN1cHBvc2l0aW9uIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJzb21lIiwibGFiZWwiLCJsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29ycmVsYXRlSHlwb3RoZXNlcyIsImNvcnJlbGF0ZXNUb0h5cG90aGVzZXMiLCJwcm9vZkFzc2VydGlvbnMiLCJnZXRQcm9vZkFzc2VydGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaHlwb3RoZXNpcyIsInByb29mQXNzZXJ0aW9uIiwiaHlwb3RoZXNlc0NvbXBhcmVzVG9TdGVwIiwiY29tcGFyZVByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2ZXJpZnlMYWJlbHMiLCJsYWJlbHNWZXJpZnkiLCJnZXRDb250ZXh0IiwiZXZlcnkiLCJuYW1lT25seSIsImxhYmVsVmVyaWZpZXMiLCJ2ZXJpZnkiLCJ1bmlmeVN0YXRlbWVudFdpdGhEZWR1Y3Rpb24iLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0YXRlbWVudFN0cmluZyIsImRlZHVjdGlvblN0cmluZyIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsInZlcmlmaWVzIiwiYXN5bmNTY29wZSIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsImRlZHVjdGlvblZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInZlcmlmeVN1cHBvc2l0aW9ucyIsInZlcmlmeURlZHVjdGlvbiIsInZlcmlmeVByb29mIiwiYXNzaWdubWVudHMiLCJzdXBwb3NpdGlvblZlcmlmaWVzIiwiYXNzaWdubWVudHNBc3NpZ25lZCIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwidW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyIsInNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyIsImFyZVN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInJlc29sdmVTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5Iiwic3RlcFVuaWZpZXNXaXRoU3VwcG9zaXRpb24iLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwiZGVkdWN0aW9uSlNPTiIsImRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJzaWduYXR1cmVKU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsIkNsYXNzIiwibGFiZWxzRnJvbUpTT04iLCJkZWR1Y3Rpb25Gcm9tSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJoeXBvdGhlc2VzRnJvbUpTT04iLCJzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJFbGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQXVCcUJBOzs7OEJBckJHO3lCQUNPOzZEQUdEO3VCQUVIO29CQVVvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsSUFBUUMsVUFBZ0NDLHlCQUFjLENBQTlDRCxTQUFTRSxVQUF1QkQseUJBQWMsQ0FBckNDLFNBQVNDLFlBQWNGLHlCQUFjLENBQTVCRSxXQUNsQkMscUJBQTRDQyxxQ0FBcUIsQ0FBakVELG9CQUFvQkUsc0JBQXdCRCxxQ0FBcUIsQ0FBN0NDO0FBRWIsSUFB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
|