occam-nominal 1.0.565 → 1.0.566

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.
@@ -385,8 +385,8 @@ class MnemicContext extends _context.default {
385
385
  this.statements = (0, _json.statementsFromJSON)(json, context);
386
386
  this.metavariables = (0, _json.metavariablesFromJSON)(json, context);
387
387
  this.equalities = (0, _json.equalitiesFromJSON)(json, context);
388
- this.assumptions = (0, _json.assumptionsFromJSON)(json, context);
389
388
  this.links = (0, _json.linksFromJSON)(json, context);
389
+ this.assumptions = (0, _json.assumptionsFromJSON)(json, context);
390
390
  this.frames = (0, _json.framesFromJSON)(json, context);
391
391
  this.assertions = (0, _json.assertionsFromJSON)(json, context);
392
392
  this.substitutions = (0, _json.substitutionsFromJSON)(json, context);
@@ -433,4 +433,4 @@ class MnemicContext extends _context.default {
433
433
  }
434
434
  }
435
435
 
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IHRlcm1zRnJvbUpTT04sXG4gICAgICAgICBsaW5rc0Zyb21KU09OLFxuICAgICAgICAgZnJhbWVzRnJvbUpTT04sXG4gICAgICAgICB0ZXJtc1RvVGVybXNKU09OLFxuICAgICAgICAgbGlua3NUb0xpbmtzSlNPTixcbiAgICAgICAgIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNGcm9tSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2gsIGV4dHJhY3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMubGlua3MgPSBsaW5rcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2godGVybXMsIHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRMaW5rcyhsaW5rcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChsaW5rcywgdGhpcy5saW5rcyk7XG5cbiAgICBjb250ZXh0LmdldExpbmtzKGxpbmtzKTtcblxuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZnJhbWVzLCB0aGlzLmZyYW1lcyk7XG5cbiAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc2VydGlvbnMsIHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUEgPSB0ZXJtOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy50ZXJtcywgKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHt0ZXJtU3RyaW5nfScgdGVybSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZExpbmsobGluaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBsaW5rQSA9IGxpbms7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmxpbmtzLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0IgPSBsaW5rLCAvLy9cbiAgICAgICAgICAgIGxpbmtBRXF1YWxUb0xpbmtCID0gbGlua0EuaXNFcXVhbFRvKGxpbmtCKTtcblxuICAgICAgaWYgKGxpbmtBRXF1YWxUb0xpbmtCKSB7XG4gICAgICAgIGNvbnN0IGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2xpbmtTdHJpbmd9JyBsaW5rIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZXF1YWxpdGllcywgKGVxdWFsaXR5KSA9PiB7XG4gICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgICAgICBlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCID0gZXF1YWxpdHlBLmlzRXF1YWxUbyhlcXVhbGl0eUIpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRBID0gc3RhdGVtZW50OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRCID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uQSA9IGFzc3VtcHRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLm1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlQS5pc0VxdWFsVG8obWV0YXZhcmlhYmxlQik7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZyYW1lcyhmcmFtZXMpIHtcbiAgICBmcmFtZXMuZm9yRWFjaCgoZnJhbWUpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJhbWUoZnJhbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXF1YWxpdGllcyhlcXVhbGl0aWVzKSB7XG4gICAgZXF1YWxpdGllcy5mb3JFYWNoKChlcXVhbGl0eSkgPT4ge1xuICAgICAgdGhpcy5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudHMoc3RhdGVtZW50cykge1xuICAgIHN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgICBhc3N1bXB0aW9ucy5mb3JFYWNoKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpIHtcbiAgICBtZXRhdmFyaWFibGVzLmZvckVhY2goKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgdGhpcy5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcygpLFxuICAgICAgICAgIGxpbmsgPSBsaW5rcy5maW5kKChsaW5rKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rTm9kZU1hdGNoZXMgPSBsaW5rLm1hdGNoTGlua05vZGUobGlua05vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGlua05vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZW4gPSB0aGlzLmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlblByZXNlbnQgPSAobWV0YXZhcmlhYmxlbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlblByZXNlbnQ7XG4gIH1cblxuICBpbml0aWFsaXNlKGpzb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubGlua3MgPSBsaW5rc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGVkIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgY29uc3QgdGVybXNKU09OID0gdGVybXNUb1Rlcm1zSlNPTih0ZXJtcyksXG4gICAgICAgICAgbGlua3NKU09OID0gbGlua3NUb0xpbmtzSlNPTihsaW5rcyksXG4gICAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpLFxuICAgICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcyksXG4gICAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTihhc3NlcnRpb25zKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OKHN0YXRlbWVudHMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKTtcblxuICAgIHRlcm1zID0gdGVybXNKU09OOyAvLy9cbiAgICBsaW5rcyA9IGxpbmtzSlNPTjsgLy8vXG4gICAgZnJhbWVzID0gZnJhbWVzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT047IC8vL1xuICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTjsgLy8vXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT047IC8vL1xuICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTjsgIC8vXG4gICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OOyAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICB0ZXJtcyxcbiAgICAgIGxpbmtzLFxuICAgICAgZnJhbWVzLFxuICAgICAgZXF1YWxpdGllcyxcbiAgICAgIGFzc2VydGlvbnMsXG4gICAgICBzdGF0ZW1lbnRzLFxuICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICBtZXRhdmFyaWFibGVzLFxuICAgICAgc3Vic3RpdHV0aW9uc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGxpbmtzID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGxpbmtzID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJsaW5rcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJnZXRUZXJtcyIsImdldENvbnRleHQiLCJnZXRMaW5rcyIsImdldEZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJnZXRTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVBIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QSIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYXNzdW1wdGlvbkEiLCJhc3N1bXB0aW9uQiIsImFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiYWRkTGlua3MiLCJhZGRGcmFtZXMiLCJhZGRFcXVhbGl0aWVzIiwiYWRkQXNzZXJ0aW9ucyIsImFkZFN0YXRlbWVudHMiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNMaW5rUHJlc2VudEJ5TGlua05vZGUiLCJsaW5rUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0ZXJtc0Zyb21KU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImxpbmtzRnJvbUpTT04iLCJmcmFtZXNGcm9tSlNPTiIsImFzc2VydGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsImNvbW1pdCIsInRvSlNPTiIsInRlcm1zSlNPTiIsInRlcm1zVG9UZXJtc0pTT04iLCJsaW5rc0pTT04iLCJsaW5rc1RvTGlua3NKU09OIiwiZnJhbWVzSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwic3RhdGVtZW50c0pTT04iLCJzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTiIsImFzc3VtcHRpb25zSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkEyQkE7OztlQUFxQkE7OzsyQkF6QlU7Z0VBRVg7c0JBbUI2Qjs7Ozs7O0FBRWpELE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLENBQUU7UUFDeEgsS0FBSyxDQUFDVDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLFNBQVNULFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1ELFVBQVUsSUFBSSxDQUFDVyxVQUFVO1FBRS9CZixLQUFLSyxPQUFPLElBQUksQ0FBQ0EsS0FBSztRQUV0QkQsUUFBUVUsUUFBUSxDQUFDVDtRQUVqQixPQUFPQTtJQUNUO0lBRUFXLFNBQVNWLFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1GLFVBQVUsSUFBSSxDQUFDVyxVQUFVO1FBRS9CZixLQUFLTSxPQUFPLElBQUksQ0FB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
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IHRlcm1zRnJvbUpTT04sXG4gICAgICAgICBsaW5rc0Zyb21KU09OLFxuICAgICAgICAgZnJhbWVzRnJvbUpTT04sXG4gICAgICAgICB0ZXJtc1RvVGVybXNKU09OLFxuICAgICAgICAgbGlua3NUb0xpbmtzSlNPTixcbiAgICAgICAgIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNGcm9tSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2gsIGV4dHJhY3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMubGlua3MgPSBsaW5rcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2godGVybXMsIHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRMaW5rcyhsaW5rcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChsaW5rcywgdGhpcy5saW5rcyk7XG5cbiAgICBjb250ZXh0LmdldExpbmtzKGxpbmtzKTtcblxuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZnJhbWVzLCB0aGlzLmZyYW1lcyk7XG5cbiAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc2VydGlvbnMsIHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUEgPSB0ZXJtOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy50ZXJtcywgKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHt0ZXJtU3RyaW5nfScgdGVybSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZExpbmsobGluaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBsaW5rQSA9IGxpbms7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmxpbmtzLCAobGluaykgPT4ge1xuICAgICAgY29uc3QgbGlua0IgPSBsaW5rLCAvLy9cbiAgICAgICAgICAgIGxpbmtBRXF1YWxUb0xpbmtCID0gbGlua0EuaXNFcXVhbFRvKGxpbmtCKTtcblxuICAgICAgaWYgKGxpbmtBRXF1YWxUb0xpbmtCKSB7XG4gICAgICAgIGNvbnN0IGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2xpbmtTdHJpbmd9JyBsaW5rIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZXF1YWxpdGllcywgKGVxdWFsaXR5KSA9PiB7XG4gICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgICAgICBlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCID0gZXF1YWxpdHlBLmlzRXF1YWxUbyhlcXVhbGl0eUIpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3NlcnRpb25BID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25CID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRBID0gc3RhdGVtZW50OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRCID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uQSA9IGFzc3VtcHRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICAgIGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLm1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlQS5pc0VxdWFsVG8obWV0YXZhcmlhYmxlQik7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZyYW1lcyhmcmFtZXMpIHtcbiAgICBmcmFtZXMuZm9yRWFjaCgoZnJhbWUpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJhbWUoZnJhbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXF1YWxpdGllcyhlcXVhbGl0aWVzKSB7XG4gICAgZXF1YWxpdGllcy5mb3JFYWNoKChlcXVhbGl0eSkgPT4ge1xuICAgICAgdGhpcy5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudHMoc3RhdGVtZW50cykge1xuICAgIHN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgICBhc3N1bXB0aW9ucy5mb3JFYWNoKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpIHtcbiAgICBtZXRhdmFyaWFibGVzLmZvckVhY2goKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgdGhpcy5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcygpLFxuICAgICAgICAgIGxpbmsgPSBsaW5rcy5maW5kKChsaW5rKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rTm9kZU1hdGNoZXMgPSBsaW5rLm1hdGNoTGlua05vZGUobGlua05vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGlua05vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZW4gPSB0aGlzLmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlblByZXNlbnQgPSAobWV0YXZhcmlhYmxlbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlblByZXNlbnQ7XG4gIH1cblxuICBpbml0aWFsaXNlKGpzb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubGlua3MgPSBsaW5rc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGVkIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgY29uc3QgdGVybXNKU09OID0gdGVybXNUb1Rlcm1zSlNPTih0ZXJtcyksXG4gICAgICAgICAgbGlua3NKU09OID0gbGlua3NUb0xpbmtzSlNPTihsaW5rcyksXG4gICAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpLFxuICAgICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcyksXG4gICAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTihhc3NlcnRpb25zKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OKHN0YXRlbWVudHMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKTtcblxuICAgIHRlcm1zID0gdGVybXNKU09OOyAvLy9cbiAgICBsaW5rcyA9IGxpbmtzSlNPTjsgLy8vXG4gICAgZnJhbWVzID0gZnJhbWVzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT047IC8vL1xuICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTjsgLy8vXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT047IC8vL1xuICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTjsgIC8vXG4gICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OOyAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICB0ZXJtcyxcbiAgICAgIGxpbmtzLFxuICAgICAgZnJhbWVzLFxuICAgICAgZXF1YWxpdGllcyxcbiAgICAgIGFzc2VydGlvbnMsXG4gICAgICBzdGF0ZW1lbnRzLFxuICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICBtZXRhdmFyaWFibGVzLFxuICAgICAgc3Vic3RpdHV0aW9uc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGxpbmtzID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGxpbmtzID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJsaW5rcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJnZXRUZXJtcyIsImdldENvbnRleHQiLCJnZXRMaW5rcyIsImdldEZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJnZXRTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVBIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QSIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYXNzdW1wdGlvbkEiLCJhc3N1bXB0aW9uQiIsImFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImFkZEFzc2lnbm1lbnQiLCJhc3NpZ25tZW50IiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiYWRkTGlua3MiLCJhZGRGcmFtZXMiLCJhZGRFcXVhbGl0aWVzIiwiYWRkQXNzZXJ0aW9ucyIsImFkZFN0YXRlbWVudHMiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNMaW5rUHJlc2VudEJ5TGlua05vZGUiLCJsaW5rUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0ZXJtc0Zyb21KU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwibGlua3NGcm9tSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJmcmFtZXNGcm9tSlNPTiIsImFzc2VydGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsImNvbW1pdCIsInRvSlNPTiIsInRlcm1zSlNPTiIsInRlcm1zVG9UZXJtc0pTT04iLCJsaW5rc0pTT04iLCJsaW5rc1RvTGlua3NKU09OIiwiZnJhbWVzSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwic3RhdGVtZW50c0pTT04iLCJzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTiIsImFzc3VtcHRpb25zSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkEyQkE7OztlQUFxQkE7OzsyQkF6QlU7Z0VBRVg7c0JBbUI2Qjs7Ozs7O0FBRWpELE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLENBQUU7UUFDeEgsS0FBSyxDQUFDVDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLFNBQVNULFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1ELFVBQVUsSUFBSSxDQUFDVyxVQUFVO1FBRS9CZixLQUFLSyxPQUFPLElBQUksQ0FBQ0EsS0FBSztRQUV0QkQsUUFBUVUsUUFBUSxDQUFDVDtRQUVqQixPQUFPQTtJQUNUO0lBRUFXLFNBQVNWLFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1GLFVBQVUsSUFBSSxDQUFDVyxVQUFVO1FBRS9CZixLQUFLTSxPQUFPLElB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
@@ -21,7 +21,7 @@ function _interop_require_default(obj) {
21
21
  default: obj
22
22
  };
23
23
  }
24
- const { all, exists } = _occamlanguages.continuationUtilities;
24
+ const { unbreakable } = _occamlanguages.breakPointUtilities, { all, exists } = _occamlanguages.continuationUtilities;
25
25
  const _default = (0, _elements.define)(class ContainedAssertion extends _assertion.default {
26
26
  constructor(context, string, node, breakPoint, term, negated, statement){
27
27
  super(context, string, node, breakPoint);
@@ -42,7 +42,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
42
42
  const node = this.getNode(), containedAssertionNode = node; ///
43
43
  return containedAssertionNode;
44
44
  }
45
- validate(state, context, forward, back) {
45
+ validate = unbreakable(function(state, context, forward, back) {
46
46
  let assertion;
47
47
  const containedAssertionString = this.getString(); ///
48
48
  context.trace(`Validating the '${containedAssertionString}' contained assertion...`);
@@ -69,7 +69,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
69
69
  return forward(containedAssertion, context, back);
70
70
  }, back);
71
71
  }, back);
72
- }
72
+ });
73
73
  validateTerm(state, context, forward, back) {
74
74
  const containedAssertionString = this.getString(); ///
75
75
  context.trace(`Validating the '${containedAssertionString}' contained assertion's term...`);
@@ -183,4 +183,4 @@ function statementFromContainedAssertionNode(containedAssertionNode, context) {
183
183
  return statement;
184
184
  }
185
185
 
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGlzRGVyaXZlZCwgaXNEZWNsYXJlZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5jb25zdCB7IGFsbCwgZXhpc3RzIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb250YWluZWRBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMubmVnYXRlZCA9IG5lZ2F0ZWQ7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRhaW5lZEFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVRlcm0sXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVjbGFyZWQsXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250YWluZWRBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnRlcm0gID0gdGVybTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3MgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTaW5ndWxhciA9IHRoaXMuc3RhdGVtZW50LmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghc3RhdGVtZW50U2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuc3RhdGVtZW50LmdldFN0cmluZygpIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVjbGFyZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBhcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgaWYgKG5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBpZiAoIW5lZ2F0ZWQgJiYgIXRlcm1Db250YWluZWQpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG59XG5cbmZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5mdW5jdGlvbiBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiZXhpc3RzIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsIm5lZ2F0ZWQiLCJzdGF0ZW1lbnQiLCJnZXRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJmaW5kQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm0iLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3NlcnRpb24iLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGVybVN0cmluZyIsInN0YXRlbWVudFNpbmd1bGFyIiwic3RhdGVtZW50U3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImFwcGx5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybUNvbnRhaW5lZCIsImlzVGVybUNvbnRhaW5lZCIsInRlcm1Ob2RlIiwiZ2V0VGVybU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFlQTs7O2VBQUE7OztnQ0Fic0M7a0VBRWhCOzBCQUVDO3lCQUNLO3VCQUNVOzZCQUNRO3lCQUNNOytCQUNpQzs7Ozs7O0FBRXJGLE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCO01BRTdDLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJQUM5RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxTQUFTLENBQUU7UUFDdkUsS0FBSyxDQUFDTixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO0lBQ2xCO0lBRUFJLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0gsT0FBTztJQUNyQjtJQUVBSSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNILFNBQVM7SUFDdkI7SUFFQUksNEJBQTRCO1FBQzFCLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxP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
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGlzRGVyaXZlZCwgaXNEZWNsYXJlZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIGV4aXN0cyB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29udGFpbmVkQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUgPSB1bmJyZWFrYWJsZShmdW5jdGlvbiAoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250YWluZWRBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGFpbmVkQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZVRlcm0oc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnRlcm0gID0gdGVybTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3MgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTaW5ndWxhciA9IHRoaXMuc3RhdGVtZW50LmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghc3RhdGVtZW50U2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuc3RhdGVtZW50LmdldFN0cmluZygpIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVjbGFyZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBhcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgaWYgKG5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBpZiAoIW5lZ2F0ZWQgJiYgIXRlcm1Db250YWluZWQpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG59XG5cbmZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5mdW5jdGlvbiBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG4iXSwibmFtZXMiOlsidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXhpc3RzIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsIm5lZ2F0ZWQiLCJzdGF0ZW1lbnQiLCJnZXRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJmaW5kQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm0iLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3NlcnRpb24iLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGVybVN0cmluZyIsInN0YXRlbWVudFNpbmd1bGFyIiwic3RhdGVtZW50U3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImFwcGx5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybUNvbnRhaW5lZCIsImlzVGVybUNvbnRhaW5lZCIsInRlcm1Ob2RlIiwiZ2V0VGVybU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7Z0NBZDJEO2tFQUVyQzswQkFFQzt5QkFDSzt1QkFDVTs2QkFDUTt5QkFDTTsrQkFDaUM7Ozs7OztBQUVyRixNQUFNLEVBQUVBLFdBQVcsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDckMsRUFBRUMsR0FBRyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCO01BRTdDLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJQUM5RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxTQUFTLENBQUU7UUFDdkUsS0FBSyxDQUFDTixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMs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
@@ -22,7 +22,7 @@ function _interop_require_default(obj) {
22
22
  default: obj
23
23
  };
24
24
  }
25
- const { all, exists } = _occamlanguages.continuationUtilities;
25
+ const { unbreakable } = _occamlanguages.breakPointUtilities, { all, exists } = _occamlanguages.continuationUtilities;
26
26
  const _default = (0, _elements.define)(class DefinedAssertion extends _assertion.default {
27
27
  constructor(context, string, node, breakPoint, term, negated){
28
28
  super(context, string, node, breakPoint);
@@ -39,7 +39,7 @@ const _default = (0, _elements.define)(class DefinedAssertion extends _assertion
39
39
  const node = this.getNode(), definedAssertionNode = node; ///
40
40
  return definedAssertionNode;
41
41
  }
42
- validate(state, context, forward, back) {
42
+ validate = unbreakable(function(state, context, forward, back) {
43
43
  let assertion;
44
44
  const definedAssertionString = this.getString(); ///
45
45
  context.trace(`Validating the '${definedAssertionString}' defined assertion...`);
@@ -65,7 +65,7 @@ const _default = (0, _elements.define)(class DefinedAssertion extends _assertion
65
65
  return forward(definedAssertion, context, back);
66
66
  }, back);
67
67
  }, back);
68
- }
68
+ });
69
69
  validateTerm(state, context, forward, back) {
70
70
  const definedAssertionString = this.getString(); ///
71
71
  context.trace(`Validating the '${definedAssertionString}' defined assertion's term...`);
@@ -170,4 +170,4 @@ function negatedFromJDefinedAssertionNode(definedAssertionNode, context) {
170
170
  return negated;
171
171
  }
172
172
 
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZURlZmluZWRBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBhbGwsIGV4aXN0cyB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRGVmaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMubmVnYXRlZCA9IG5lZ2F0ZWQ7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldERlZmluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZGVmaW5lZEFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpcztcblxuICAgIGNvbnN0IHZhbGlkYXRlVGVybSA9IHRoaXMudmFsaWRhdGVUZXJtLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlVGVybVxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVjbGFyZWQsXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChkZWZpbmVkQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbidzIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1TaW5ndWxhciA9IHRoaXMudGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXRlcm1TaW5ndWxhcikge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBkZWZpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcDBseWluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkRlZmluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlRGVmaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGlzVmFyaWFibGVEZWZpbmVkKHZhcmlhYmxlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCksXG4gICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMoZXF1aXZhbGVuY2VzLCBncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBjb25zdCB2YXJpYWJsZU1hdGNoZXNEZWZpbmVkVmFyaWFibGUgPSBkZWZpbmVkVmFyaWFibGVzLnNvbWUoKGRlZmluZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSA9IGRlZmluZWRWYXJpYWJsZS5pc0VxdWFsVG8odmFyaWFibGUpO1xuXG4gICAgICAgICAgaWYgKGRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSA9PT0gdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHZhcmlhYmxlRGVmaW5lZCA9IHZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZTsgLy8vXG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBuZWdhdGVkLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHRlcm0uZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGRlY2xhcmVkRGFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgZGVjbGFyZWREYXJpYWJsZURlZmluZWQgPSBpc1ZhcmlhYmxlRGVmaW5lZChkZWNsYXJlZERhcmlhYmxlLCBjb250ZXh0KTtcblxuICBpZiAobmVnYXRlZCAmJiBkZWNsYXJlZERhcmlhYmxlRGVmaW5lZCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBpZiAoIW5lZ2F0ZWQgJiYgIWRlY2xhcmVkRGFyaWFibGVEZWZpbmVkKSB7XG4gICAgcmV0dXJuIGJhY2soKTtcbiAgfVxuXG4gIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xufVxuXG5mdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmZ1bmN0aW9uIG5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJleGlzdHMiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsIm5lZ2F0ZWQiLCJnZXRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJmaW5kQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtIiwiYmluZCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc2VydGlvbiIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ0ZXJtU3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImFwcGx5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZ2V0TmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZURlZmluZWRBc3NlcnRpb24iLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJpc1ZhcmlhYmxlRGVmaW5lZCIsInZhcmlhYmxlIiwiZXF1aXZhbGVuY2VzIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlIiwic29tZSIsImRlZmluZWRWYXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSIsImlzRXF1YWxUbyIsInZhcmlhYmxlRGVmaW5lZCIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkRGFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWREYXJpYWJsZURlZmluZWQiLCJ0ZXJtTm9kZSIsImdldFRlcm1Ob2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7Z0NBZHNDO2tFQUVoQjswQkFFQzt5QkFDSzt1QkFDVTs2QkFDTTsrQkFDQzt5QkFDSzs4QkFDTzs7Ozs7O0FBRXpELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCO01BRTdDLFdBQWVDLElBQUFBLGdCQUFN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
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZURlZmluZWRBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBleGlzdHMgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIERlZmluZWRBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICBnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGRlZmluZWRBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVRlcm1cbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVmaW5lZEFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfSk7XG5cbiAgdmFsaWRhdGVUZXJtKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbidzIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1TaW5ndWxhciA9IHRoaXMudGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXRlcm1TaW5ndWxhcikge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBkZWZpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcDBseWluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkRlZmluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlRGVmaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGlzVmFyaWFibGVEZWZpbmVkKHZhcmlhYmxlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCksXG4gICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMoZXF1aXZhbGVuY2VzLCBncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBjb25zdCB2YXJpYWJsZU1hdGNoZXNEZWZpbmVkVmFyaWFibGUgPSBkZWZpbmVkVmFyaWFibGVzLnNvbWUoKGRlZmluZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSA9IGRlZmluZWRWYXJpYWJsZS5pc0VxdWFsVG8odmFyaWFibGUpO1xuXG4gICAgICAgICAgaWYgKGRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSA9PT0gdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHZhcmlhYmxlRGVmaW5lZCA9IHZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZTsgLy8vXG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBuZWdhdGVkLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHRlcm0uZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGRlY2xhcmVkRGFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgZGVjbGFyZWREYXJpYWJsZURlZmluZWQgPSBpc1ZhcmlhYmxlRGVmaW5lZChkZWNsYXJlZERhcmlhYmxlLCBjb250ZXh0KTtcblxuICBpZiAobmVnYXRlZCAmJiBkZWNsYXJlZERhcmlhYmxlRGVmaW5lZCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBpZiAoIW5lZ2F0ZWQgJiYgIWRlY2xhcmVkRGFyaWFibGVEZWZpbmVkKSB7XG4gICAgcmV0dXJuIGJhY2soKTtcbiAgfVxuXG4gIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xufVxuXG5mdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmZ1bmN0aW9uIG5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cbiJdLCJuYW1lcyI6WyJ1bmJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhbGwiLCJleGlzdHMiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsIm5lZ2F0ZWQiLCJnZXRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJmaW5kQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtIiwiYmluZCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc2VydGlvbiIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ0ZXJtU3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImFwcGx5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZ2V0TmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZURlZmluZWRBc3NlcnRpb24iLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJpc1ZhcmlhYmxlRGVmaW5lZCIsInZhcmlhYmxlIiwiZXF1aXZhbGVuY2VzIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlIiwic29tZSIsImRlZmluZWRWYXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSIsImlzRXF1YWxUbyIsInZhcmlhYmxlRGVmaW5lZCIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkRGFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWREYXJpYWJsZURlZmluZWQiLCJ0ZXJtTm9kZSIsImdldFRlcm1Ob2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZjJE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
@@ -22,7 +22,7 @@ function _interop_require_default(obj) {
22
22
  default: obj
23
23
  };
24
24
  }
25
- const { all } = _occamlanguages.continuationUtilities;
25
+ const { all } = _occamlanguages.continuationUtilities, { unbreakable } = _occamlanguages.breakPointUtilities;
26
26
  const _default = (0, _elements.define)(class PropertyAssertion extends _assertion.default {
27
27
  constructor(context, string, node, breakPoint, subjectTerm, propertyTerm){
28
28
  super(context, string, node, breakPoint);
@@ -43,7 +43,7 @@ const _default = (0, _elements.define)(class PropertyAssertion extends _assertio
43
43
  const propertyTermType = this.propertyTerm.getType(), propertyType = propertyTermType; ///
44
44
  return propertyType;
45
45
  }
46
- validate(state, context, forward, back) {
46
+ validate = unbreakable(function(state, context, forward, back) {
47
47
  let assertion;
48
48
  const propertyAssertionString = this.getString(); ///
49
49
  context.trace(`Validating the '${propertyAssertionString}' property assertion...`);
@@ -64,7 +64,7 @@ const _default = (0, _elements.define)(class PropertyAssertion extends _assertio
64
64
  context.debug(`...validated the '${propertyAssertionString}' property assertion.`);
65
65
  return forward(propertyAssertion, context, back);
66
66
  }, back);
67
- }
67
+ });
68
68
  validateTerms(state, context, forward, back) {
69
69
  const propertyAssertionString = this.getString(); ///
70
70
  context.trace(`Validating the '${propertyAssertionString}' property assertion's terms...`);
@@ -143,4 +143,4 @@ function propertyTermFromPropertyAssertionNode(propertyAssertionNode, context) {
143
143
  return propertyTerm;
144
144
  }
145
145
 
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9wcm9wZXJ0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaXNEZXJpdmVkLCBpc1RyYW5zaWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb3BlcnR5QXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybTtcbiAgICB0aGlzLnByb3BlcnR5VGVybSA9IHByb3BlcnR5VGVybTtcbiAgfVxuXG4gIGdldFN1YmplY3RUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3RUZXJtO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5VGVybTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlUeXBlKCkge1xuICAgIGNvbnN0IHByb3BlcnR5VGVybVR5cGUgPSB0aGlzLnByb3BlcnR5VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlUZXJtVHlwZTsgIC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQocHJvcGVydHlBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlVGVybXNcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLmFzc2lnbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQocHJvcGVydHlBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtcyhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbidzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN1YmplY3RUZXJtID0gdGhpcy52YWxpZGF0ZVN1YmplY3RUZXJtLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eVRlcm0gPSB0aGlzLnZhbGlkYXRlUHJvcGVydHlUZXJtLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlU3ViamVjdFRlcm0sXG4gICAgICB2YWxpZGF0ZVByb3BlcnR5VGVybVxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3RUZXJtVHlwZSA9IHRoaXMuc3ViamVjdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXJtVHlwZSA9IHRoaXMucHJvcGVydHlUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHN1YmplY3RUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlByb3BlcnR5VGVybVR5cGUgPSBzdWJqZWN0VGVybVR5cGUuaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YocHJvcGVydHlUZXJtVHlwZSk7XG5cbiAgICAgIGlmICghc3ViamVjdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUHJvcGVydHlUZXJtVHlwZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgdGVybXMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3ViamVjdFRlcm0oc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIHByb3BlcnR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbidzIHN1YmplY3QgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdFRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdWJqZWN0VGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5zdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3Mgc3ViamVjdCB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVByb3BlcnR5VGVybShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgcHJvcGVydHkgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRoaXMucHJvcGVydHlUZXJtLCBzdGF0ZSwgY29udGV4dCwgKHByb3BlcnR5VGVybSwgc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMucHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgcHJvcGVydHkgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spXG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKSxcbiAgICAgICAgICB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCB8fCB0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlQXNzaWdtZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb3BlcnR5QXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlUHJvcGVydHlBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YmplY3RUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRTdWJqZWN0VGVybU5vZGUoKSxcbiAgICAgICAgc3ViamVjdFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShzdWJqZWN0VGVybU5vZGUpO1xuXG4gIHJldHVybiBzdWJqZWN0VGVybTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvcGVydHlBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdWJqZWN0VGVybSIsInByb3BlcnR5VGVybSIsImdldFN1YmplY3RUZXJtIiwiZ2V0UHJvcGVydHlUZXJtIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFByb3BlcnR5VHlwZSIsInByb3BlcnR5VGVybVR5cGUiLCJnZXRUeXBlIiwicHJvcGVydHlUeXBlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhc3NpZ24iLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN1YmplY3RUZXJtIiwidmFsaWRhdGVQcm9wZXJ0eVRlcm0iLCJzdWJqZWN0VGVybVR5cGUiLCJzdWJqZWN0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZQcm9wZXJ0eVRlcm1UeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJpbmNsdWRlVHlwZSIsInByb3BlcnR5U3RyaW5nIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImdldE5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJqZWN0VGVybU5vZGUiLCJnZXRTdWJqZWN0VGVybU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ0JBOzs7ZUFBQTs7O2dDQWRzQztrRUFFaEI7MEJBRUM7eUJBQ0s7dUJBQ1c7NEJBQ0M7NkJBQ0s7eUJBQ007d0JBQ0s7Ozs7OztBQUV4RCxNQUFNLEVBQUVBLEdBQUcsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFckMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLGtCQUFTO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVB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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9wcm9wZXJ0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaXNEZXJpdmVkLCBpc1RyYW5zaWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgdW5icmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBQcm9wZXJ0eUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN1YmplY3RUZXJtID0gc3ViamVjdFRlcm07XG4gICAgdGhpcy5wcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm07XG4gIH1cblxuICBnZXRTdWJqZWN0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0VGVybTtcbiAgfVxuXG4gIGdldFByb3BlcnR5VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVRlcm07XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnR5VHlwZSgpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVRlcm1UeXBlID0gdGhpcy5wcm9wZXJ0eVRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5VGVybVR5cGU7ICAvLy9cblxuICAgIHJldHVybiBwcm9wZXJ0eVR5cGU7XG4gIH1cblxuICB2YWxpZGF0ZSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzO1xuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5hc3NpZ24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfSk7XG5cbiAgdmFsaWRhdGVUZXJtcyhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbidzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN1YmplY3RUZXJtID0gdGhpcy52YWxpZGF0ZVN1YmplY3RUZXJtLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eVRlcm0gPSB0aGlzLnZhbGlkYXRlUHJvcGVydHlUZXJtLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlU3ViamVjdFRlcm0sXG4gICAgICB2YWxpZGF0ZVByb3BlcnR5VGVybVxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3RUZXJtVHlwZSA9IHRoaXMuc3ViamVjdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXJtVHlwZSA9IHRoaXMucHJvcGVydHlUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHN1YmplY3RUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlByb3BlcnR5VGVybVR5cGUgPSBzdWJqZWN0VGVybVR5cGUuaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YocHJvcGVydHlUZXJtVHlwZSk7XG5cbiAgICAgIGlmICghc3ViamVjdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUHJvcGVydHlUZXJtVHlwZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgdGVybXMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3ViamVjdFRlcm0oc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIHByb3BlcnR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbidzIHN1YmplY3QgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdFRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdWJqZWN0VGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5zdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3Mgc3ViamVjdCB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVByb3BlcnR5VGVybShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgcHJvcGVydHkgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRoaXMucHJvcGVydHlUZXJtLCBzdGF0ZSwgY29udGV4dCwgKHByb3BlcnR5VGVybSwgc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMucHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgcHJvcGVydHkgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spXG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKSxcbiAgICAgICAgICB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCB8fCB0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlQXNzaWdtZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb3BlcnR5QXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlUHJvcGVydHlBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YmplY3RUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRTdWJqZWN0VGVybU5vZGUoKSxcbiAgICAgICAgc3ViamVjdFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShzdWJqZWN0VGVybU5vZGUpO1xuXG4gIHJldHVybiBzdWJqZWN0VGVybTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvcGVydHlBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdWJqZWN0VGVybSIsInByb3BlcnR5VGVybSIsImdldFN1YmplY3RUZXJtIiwiZ2V0UHJvcGVydHlUZXJtIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFByb3BlcnR5VHlwZSIsInByb3BlcnR5VGVybVR5cGUiLCJnZXRUeXBlIiwicHJvcGVydHlUeXBlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhc3NpZ24iLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN1YmplY3RUZXJtIiwidmFsaWRhdGVQcm9wZXJ0eVRlcm0iLCJzdWJqZWN0VGVybVR5cGUiLCJzdWJqZWN0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZQcm9wZXJ0eVRlcm1UeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJpbmNsdWRlVHlwZSIsInByb3BlcnR5U3RyaW5nIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImdldE5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJqZWN0VGVybU5vZGUiLCJnZXRTdWJqZWN0VGVybU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBaUJBOzs7ZUFBQTs7O2dDQWYyRDtrRUFFckM7MEJBRUM7eUJBQ0s7dUJBQ1c7NEJBQ0M7NkJBQ0s7eUJBQ007d0JBQ0s7Ozs7OztB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