occam-nominal 1.0.576 → 1.0.577

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.
@@ -231,18 +231,18 @@ class CladicContext extends _context.default {
231
231
  }
232
232
  addProcedureReference(procedureReference) {
233
233
  const context = this, procedureReferenceString = procedureReference.getString();
234
- context.trace(`Adding the '${procedureReferenceString}' procedure call to the cladic context...`);
234
+ context.trace(`Adding the '${procedureReferenceString}' function call to the cladic context...`);
235
235
  const procedureReferenceA = procedureReference; ///
236
236
  extract(this.procedureReferences, (procedureReference)=>{
237
237
  const procedureReferenceB = procedureReference, procedureReferenceAEqualToProcedureallB = procedureReferenceA.isEqualTo(procedureReferenceB);
238
238
  if (procedureReferenceAEqualToProcedureallB) {
239
239
  const procedureReferenceString = procedureReference.getString();
240
- context.trace(`Removed the existing '${procedureReferenceString}' procedure call from the cladic context...`);
240
+ context.trace(`Removed the existing '${procedureReferenceString}' function call from the cladic context...`);
241
241
  return true;
242
242
  }
243
243
  });
244
244
  this.procedureReferences.push(procedureReference);
245
- context.debug(`...added the '${procedureReferenceString}' procedure call to the cladic context.`);
245
+ context.debug(`...added the '${procedureReferenceString}' function call to the cladic context.`);
246
246
  }
247
247
  addAssignment(assignment) {
248
248
  const context = this.getContext();
@@ -447,4 +447,4 @@ class CladicContext extends _context.default {
447
447
  }
448
448
  }
449
449
 
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9ucztcbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzID0gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobGlua3MsIHRoaXMubGlua3MpO1xuXG4gICAgY29udGV4dC5nZXRMaW5rcyhsaW5rcyk7XG5cbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMocGFyYW1ldGVycyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwYXJhbWV0ZXJzLCB0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5nZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHByb2NlZHVyZVJlZmVyZW5jZXMsIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFByb2NlZHVyZVJlZmVyZW5jZXMocHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtQSA9IHRlcm07IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTGluayhsaW5rKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGxpbmtBID0gbGluazsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMubGlua3MsIChsaW5rKSA9PiB7XG4gICAgICBjb25zdCBsaW5rQiA9IGxpbmssIC8vL1xuICAgICAgICAgICAgbGlua0FFcXVhbFRvTGlua0IgPSBsaW5rQS5pc0VxdWFsVG8obGlua0IpO1xuXG4gICAgICBpZiAobGlua0FFcXVhbFRvTGlua0IpIHtcbiAgICAgICAgY29uc3QgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7bGlua1N0cmluZ30nIGxpbmsgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVBID0gZnJhbWU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmZyYW1lcywgKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5QSA9IGVxdWFsaXR5OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5lcXVhbGl0aWVzLCAoZXF1YWxpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICAgIGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG5cbiAgICAgIGlmIChlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCKSB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGFzc2VydGlvbkEgPSBhc3NlcnRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zLnB1c2goYXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50QSA9IHN0YXRlbWVudDsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFBhcmFtZXRlcihwYXJhbXRlcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwYXJhbXRlclN0cmluZyA9IHBhcmFtdGVyLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwYXJhbXRlclN0cmluZ30nIHBhcmFtdGVyIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcGFyYW10ZXJBID0gcGFyYW10ZXI7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnBhcmFtdGVycywgKHBhcmFtdGVyKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXRlckIgPSBwYXJhbXRlciwgLy8vXG4gICAgICAgICAgICBwYXJhbXRlckFFcXVhbFRvUGFyYW1ldGVyQiA9IHBhcmFtdGVyQS5pc0VxdWFsVG8ocGFyYW10ZXJCKTtcblxuICAgICAgaWYgKHBhcmFtdGVyQUVxdWFsVG9QYXJhbWV0ZXJCKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtdGVyU3RyaW5nID0gcGFyYW10ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXJhbXRlcnMucHVzaChwYXJhbXRlcik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbkEgPSBhc3N1bXB0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25CID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IGFzc3VtcHRpb25BLmlzRXF1YWxUbyhhc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIHByb2NlZHVyZSBjYWxsIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlQSA9IHByb2NlZHVyZVJlZmVyZW5jZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcywgKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlQiA9IHByb2NlZHVyZVJlZmVyZW5jZSwgLy8vXG4gICAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VBRXF1YWxUb1Byb2NlZHVyZWFsbEIgPSBwcm9jZWR1cmVSZWZlcmVuY2VBLmlzRXF1YWxUbyhwcm9jZWR1cmVSZWZlcmVuY2VCKTtcblxuICAgICAgaWYgKHByb2NlZHVyZVJlZmVyZW5jZUFFcXVhbFRvUHJvY2VkdXJlYWxsQikge1xuICAgICAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcy5wdXNoKHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZyYW1lcyhmcmFtZXMpIHtcbiAgICBmcmFtZXMuZm9yRWFjaCgoZnJhbWUpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJhbWUoZnJhbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXF1YWxpdGllcyhlcXVhbGl0aWVzKSB7XG4gICAgZXF1YWxpdGllcy5mb3JFYWNoKChlcXVhbGl0eSkgPT4ge1xuICAgICAgdGhpcy5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudHMoc3RhdGVtZW50cykge1xuICAgIHN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gICAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgIHRoaXMuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICAgIGFzc3VtcHRpb25zLmZvckVhY2goKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcykge1xuICAgIG1ldGF2YXJpYWJsZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICB0aGlzLmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgcHJvY2VkdXJlUmVmZXJlbmNlcy5mb3JFYWNoKChwcm9jZWR1cmVSZWZlcmVuY2UpID0+IHtcbiAgICAgIHRoaXMuYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgICBsaW5rID0gbGlua3MuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua05vZGVNYXRjaGVzID0gbGluay5tYXRjaExpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZXRQYXJhbWV0ZXJzKCksXG4gICAgICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlck5vZGVNYXRjaGVzID0gcGFyYW1ldGVyLm1hdGNoUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VzLmZpbmQoKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2UubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJQcmVzZW50ID0gKHBhcmFtZXRlciAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudEJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gdGhpcy5maW5kUHJvY2VkdXJlUmVmZXJlbmNlQnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVByZXNlbnQgPSAocHJvY2VkdXJlUmVmZXJlbmNlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGNsYWRpYyBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm1zKHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5hZGRMaW5rcyh0aGlzLmxpbmtzKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWVzKHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuYWRkRXF1YWxpdGllcyh0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5hZGRBc3NlcnRpb25zKHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmFkZFN0YXRlbWVudHModGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuYWRkUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9ucyh0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlcyh0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5hZGRQcm9jZWR1cmVSZWZlcmVuY2VzKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgbGlua3MgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGNsYWRpY0NvbnRleHQgPSBuZXcgQ2xhZGljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcGFyYW1ldGVycywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIGNsYWRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDbGFkaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJsaW5rcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInBhcmFtZXRlcnMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0U3RhdGVtZW50cyIsImdldFBhcmFtZXRlcnMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRMaW5rIiwibGluayIsImxpbmtTdHJpbmciLCJsaW5rQSIsImxpbmtCIiwibGlua0FFcXVhbFRvTGlua0IiLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVTdHJpbmciLCJmcmFtZUEiLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50QSIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJhZGRQYXJhbWV0ZXIiLCJwYXJhbXRlciIsInBhcmFtdGVyU3RyaW5nIiwicGFyYW10ZXJBIiwicGFyYW10ZXJzIiwicGFyYW10ZXJCIiwicGFyYW10ZXJBRXF1YWxUb1BhcmFtZXRlckIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImFkZFByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZUEiLCJwcm9jZWR1cmVSZWZlcmVuY2VCIiwicHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJhZGRUZXJtcyIsImZvckVhY2giLCJhZGRMaW5rcyIsImFkZEZyYW1lcyIsImFkZEVxdWFsaXRpZXMiLCJhZGRBc3NlcnRpb25zIiwiYWRkU3RhdGVtZW50cyIsImFkZFBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJhZGRQcm9jZWR1cmVSZWZlcmVuY2VzIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImxpbmtOb2RlIiwibGlua05vZGVNYXRjaGVzIiwibWF0Y2hMaW5rTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyTm9kZU1hdGNoZXMiLCJtYXRjaFBhcmFtZXRlck5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzdW1wdGlvbk5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlclByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCIsIm1lcmdlIiwiZnJvbU5vdGhpbmciLCJjbGFkaWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXFCQTs7OzJCQU5VO2dFQUVYOzs7Ozs7QUFFcEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyx5QkFBYztBQUV6QixNQUFNSCxzQkFBc0JJLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUs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
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NsYWRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCwgZXh0cmFjdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9ucztcbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzID0gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobGlua3MsIHRoaXMubGlua3MpO1xuXG4gICAgY29udGV4dC5nZXRMaW5rcyhsaW5rcyk7XG5cbiAgICByZXR1cm4gbGlua3M7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMocGFyYW1ldGVycyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwYXJhbWV0ZXJzLCB0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5nZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHByb2NlZHVyZVJlZmVyZW5jZXMsIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFByb2NlZHVyZVJlZmVyZW5jZXMocHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlcztcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtQSA9IHRlcm07IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTGluayhsaW5rKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGxpbmtBID0gbGluazsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMubGlua3MsIChsaW5rKSA9PiB7XG4gICAgICBjb25zdCBsaW5rQiA9IGxpbmssIC8vL1xuICAgICAgICAgICAgbGlua0FFcXVhbFRvTGlua0IgPSBsaW5rQS5pc0VxdWFsVG8obGlua0IpO1xuXG4gICAgICBpZiAobGlua0FFcXVhbFRvTGlua0IpIHtcbiAgICAgICAgY29uc3QgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7bGlua1N0cmluZ30nIGxpbmsgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluayB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVBID0gZnJhbWU7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmZyYW1lcywgKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5QSA9IGVxdWFsaXR5OyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5lcXVhbGl0aWVzLCAoZXF1YWxpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICAgIGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG5cbiAgICAgIGlmIChlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCKSB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGFzc2VydGlvbkEgPSBhc3NlcnRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zLnB1c2goYXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50QSA9IHN0YXRlbWVudDsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgIHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFBhcmFtZXRlcihwYXJhbXRlcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwYXJhbXRlclN0cmluZyA9IHBhcmFtdGVyLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwYXJhbXRlclN0cmluZ30nIHBhcmFtdGVyIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcGFyYW10ZXJBID0gcGFyYW10ZXI7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnBhcmFtdGVycywgKHBhcmFtdGVyKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXRlckIgPSBwYXJhbXRlciwgLy8vXG4gICAgICAgICAgICBwYXJhbXRlckFFcXVhbFRvUGFyYW1ldGVyQiA9IHBhcmFtdGVyQS5pc0VxdWFsVG8ocGFyYW10ZXJCKTtcblxuICAgICAgaWYgKHBhcmFtdGVyQUVxdWFsVG9QYXJhbWV0ZXJCKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtdGVyU3RyaW5nID0gcGFyYW10ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXJhbXRlcnMucHVzaChwYXJhbXRlcik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cGFyYW10ZXJTdHJpbmd9JyBwYXJhbXRlciB0byB0aGUgY2xhZGljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbkEgPSBhc3N1bXB0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25CID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IGFzc3VtcHRpb25BLmlzRXF1YWxUbyhhc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBmcm9tIHRoZSBjbGFkaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgY2xhZGljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBjbGFkaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VBID0gcHJvY2VkdXJlUmVmZXJlbmNlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzLCAocHJvY2VkdXJlUmVmZXJlbmNlKSA9PiB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VCID0gcHJvY2VkdXJlUmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZUFFcXVhbFRvUHJvY2VkdXJlYWxsQiA9IHByb2NlZHVyZVJlZmVyZW5jZUEuaXNFcXVhbFRvKHByb2NlZHVyZVJlZmVyZW5jZUIpO1xuXG4gICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCKSB7XG4gICAgICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiBjYWxsIGZyb20gdGhlIGNsYWRpYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZXMucHVzaChwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGNsYWRpYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaW5rcyhsaW5rcykge1xuICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIHRoaXMuYWRkTGluayhsaW5rKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZyYW1lcyhmcmFtZXMpIHtcbiAgICBmcmFtZXMuZm9yRWFjaCgoZnJhbWUpID0+IHtcbiAgICAgIHRoaXMuYWRkRnJhbWUoZnJhbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXF1YWxpdGllcyhlcXVhbGl0aWVzKSB7XG4gICAgZXF1YWxpdGllcy5mb3JFYWNoKChlcXVhbGl0eSkgPT4ge1xuICAgICAgdGhpcy5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3NlcnRpb25zKGFzc2VydGlvbnMpIHtcbiAgICBhc3NlcnRpb25zLmZvckVhY2goKGFzc2VydGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudHMoc3RhdGVtZW50cykge1xuICAgIHN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gICAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgIHRoaXMuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICAgIGFzc3VtcHRpb25zLmZvckVhY2goKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcykge1xuICAgIG1ldGF2YXJpYWJsZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICB0aGlzLmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzKSB7XG4gICAgcHJvY2VkdXJlUmVmZXJlbmNlcy5mb3JFYWNoKChwcm9jZWR1cmVSZWZlcmVuY2UpID0+IHtcbiAgICAgIHRoaXMuYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgICBsaW5rID0gbGlua3MuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua05vZGVNYXRjaGVzID0gbGluay5tYXRjaExpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZXRQYXJhbWV0ZXJzKCksXG4gICAgICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlck5vZGVNYXRjaGVzID0gcGFyYW1ldGVyLm1hdGNoUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VzLmZpbmQoKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2UubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0xpbmtQcmVzZW50QnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSksXG4gICAgICAgICAgbGlua1ByZXNlbnQgPSAobGluayAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbGlua1ByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJQcmVzZW50ID0gKHBhcmFtZXRlciAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudEJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gdGhpcy5maW5kUHJvY2VkdXJlUmVmZXJlbmNlQnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVByZXNlbnQgPSAocHJvY2VkdXJlUmVmZXJlbmNlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgbWVyZ2UoY29udGV4dCkge1xuICAgIGNvbnRleHQuZGVidWcoYE1lcmdpbmcgdGhlIGNsYWRpYyBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm1zKHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5hZGRMaW5rcyh0aGlzLmxpbmtzKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWVzKHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuYWRkRXF1YWxpdGllcyh0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5hZGRBc3NlcnRpb25zKHRoaXMuYXNzZXJ0aW9ucyk7XG5cbiAgICBjb250ZXh0LmFkZFN0YXRlbWVudHModGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuYWRkUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9ucyh0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlcyh0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5hZGRQcm9jZWR1cmVSZWZlcmVuY2VzKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgbGlua3MgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGNsYWRpY0NvbnRleHQgPSBuZXcgQ2xhZGljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcGFyYW1ldGVycywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIGNsYWRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDbGFkaWNDb250ZXh0IiwicHVzaCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJsaW5rcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInBhcmFtZXRlcnMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0U3RhdGVtZW50cyIsImdldFBhcmFtZXRlcnMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRMaW5rIiwibGluayIsImxpbmtTdHJpbmciLCJsaW5rQSIsImxpbmtCIiwibGlua0FFcXVhbFRvTGlua0IiLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVTdHJpbmciLCJmcmFtZUEiLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50QSIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJhZGRQYXJhbWV0ZXIiLCJwYXJhbXRlciIsInBhcmFtdGVyU3RyaW5nIiwicGFyYW10ZXJBIiwicGFyYW10ZXJzIiwicGFyYW10ZXJCIiwicGFyYW10ZXJBRXF1YWxUb1BhcmFtZXRlckIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImFkZFByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZUEiLCJwcm9jZWR1cmVSZWZlcmVuY2VCIiwicHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJhZGRUZXJtcyIsImZvckVhY2giLCJhZGRMaW5rcyIsImFkZEZyYW1lcyIsImFkZEVxdWFsaXRpZXMiLCJhZGRBc3NlcnRpb25zIiwiYWRkU3RhdGVtZW50cyIsImFkZFBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJhZGRQcm9jZWR1cmVSZWZlcmVuY2VzIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImxpbmtOb2RlIiwibGlua05vZGVNYXRjaGVzIiwibWF0Y2hMaW5rTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyTm9kZU1hdGNoZXMiLCJtYXRjaFBhcmFtZXRlck5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzdW1wdGlvbk5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlclByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCIsIm1lcmdlIiwiZnJvbU5vdGhpbmciLCJjbGFkaWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXFCQTs7OzJCQU5VO2dFQUVYOzs7Ozs7QUFFcEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyx5QkFBYztBQUV6QixNQUFNSCxzQkFBc0JJLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFB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
@@ -250,18 +250,18 @@ class MnemicContext extends _context.default {
250
250
  }
251
251
  addProcedureReference(procedureReference) {
252
252
  const context = this, procedureReferenceString = procedureReference.getString();
253
- context.trace(`Adding the '${procedureReferenceString}' procedure call to the mnemic context...`);
253
+ context.trace(`Adding the '${procedureReferenceString}' function call to the mnemic context...`);
254
254
  const procedureReferenceA = procedureReference; ///
255
255
  extract(this.procedureReferences, (procedureReference)=>{
256
256
  const procedureReferenceB = procedureReference, procedureReferenceAEqualToProcedureallB = procedureReferenceA.isEqualTo(procedureReferenceB);
257
257
  if (procedureReferenceAEqualToProcedureallB) {
258
258
  const procedureReferenceString = procedureReference.getString();
259
- context.trace(`Removed the existing '${procedureReferenceString}' procedure call from the mnemic context...`);
259
+ context.trace(`Removed the existing '${procedureReferenceString}' function call from the mnemic context...`);
260
260
  return true;
261
261
  }
262
262
  });
263
263
  this.procedureReferences.push(procedureReference);
264
- context.debug(`...added the '${procedureReferenceString}' procedure call to the mnemic context.`);
264
+ context.debug(`...added the '${procedureReferenceString}' function call to the mnemic context.`);
265
265
  }
266
266
  addAssignment(assignment) {
267
267
  const context = this.getContext();
@@ -519,4 +519,4 @@ class MnemicContext extends _context.default {
519
519
  }
520
520
  }
521
521
 
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7XG4gIHRlcm1zRnJvbUpTT04sXG4gIGxpbmtzRnJvbUpTT04sXG4gIGZyYW1lc0Zyb21KU09OLFxuICBlcXVhbGl0aWVzRnJvbUpTT04sXG4gIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICBwYXJhbWV0ZXJzRnJvbUpTT04sXG4gIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgc3Vic3RpdHV0aW9uc0Zyb21KU09OLFxuICBwcm9jZWR1cmVSZWZlcmVuY2VzRnJvbUpTT04sXG4gIHRlcm1zVG9UZXJtc0pTT04sXG4gIGxpbmtzVG9MaW5rc0pTT04sXG4gIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgcGFyYW1ldGVyc1RvUGFyYW1ldGVyc0pTT04sXG4gIGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OLFxuICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04sXG4gIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OLFxuICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTixcbiAgcHJvY2VkdXJlUmVmZXJlbmNlc1RvUHJvY2VkdXJlUmVmZXJlbmNlc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoLCBleHRyYWN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW5lbWljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcGFyYW1ldGVycywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMsIHByb2NlZHVyZVJlZmVyZW5jZXMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLmxpbmtzID0gbGlua3M7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyA9IHByb2NlZHVyZVJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldExpbmtzKGxpbmtzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGxpbmtzLCB0aGlzLmxpbmtzKTtcblxuICAgIGNvbnRleHQuZ2V0TGlua3MobGlua3MpO1xuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChmcmFtZXMsIHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG5cbiAgICByZXR1cm4gZnJhbWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGVxdWFsaXRpZXMsIHRoaXMuZXF1YWxpdGllcyk7XG5cbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHBhcmFtZXRlcnMsIHRoaXMucGFyYW1ldGVycyk7XG5cbiAgICBjb250ZXh0LmdldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocHJvY2VkdXJlUmVmZXJlbmNlcywgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VzO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1BID0gdGVybTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMudGVybXMsICh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7dGVybVN0cmluZ30nIHRlcm0gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRMaW5rKGxpbmspIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbGlua0EgPSBsaW5rOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5saW5rcywgKGxpbmspID0+IHtcbiAgICAgIGNvbnN0IGxpbmtCID0gbGluaywgLy8vXG4gICAgICAgICAgICBsaW5rQUVxdWFsVG9MaW5rQiA9IGxpbmtBLmlzRXF1YWxUbyhsaW5rQik7XG5cbiAgICAgIGlmIChsaW5rQUVxdWFsVG9MaW5rQikge1xuICAgICAgICBjb25zdCBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtsaW5rU3RyaW5nfScgbGluayBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5saW5rcy5wdXNoKGxpbmspO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBmcmFtZUEgPSBmcmFtZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZnJhbWVzLCAoZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lQiA9IGZyYW1lLCAvLy9cbiAgICAgICAgICAgIGZyYW1lQUVxdWFsVG9GcmFtZUIgPSBmcmFtZUEuaXNFcXVhbFRvKGZyYW1lQik7XG5cbiAgICAgIGlmIChmcmFtZUFFcXVhbFRvRnJhbWVCKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZXMucHVzaChmcmFtZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlBID0gZXF1YWxpdHk7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmVxdWFsaXRpZXMsIChlcXVhbGl0eSkgPT4ge1xuICAgICAgY29uc3QgZXF1YWxpdHlCID0gZXF1YWxpdHksIC8vL1xuICAgICAgICAgICAgZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiA9IGVxdWFsaXR5QS5pc0VxdWFsVG8oZXF1YWxpdHlCKTtcblxuICAgICAgaWYgKGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIpIHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMucHVzaChlcXVhbGl0eSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzZXJ0aW9uQSA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuYXNzZXJ0aW9ucywgKGFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uQiA9IGFzc2VydGlvbiwgLy8vXG4gICAgICAgICAgICBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICBjb25zdCBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50QSA9IHN0YXRlbWVudDsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlci5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyQSA9IHBhcmFtZXRlcjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMucGFyYW1ldGVycywgKHBhcmFtZXRlcikgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyQiA9IHBhcmFtZXRlciwgLy8vXG4gICAgICAgICAgICBwYXJhbWV0ZXJBRXF1YWxUb1BhcmFtZXRlckIgPSBwYXJhbWV0ZXJBLmlzRXF1YWxUbyhwYXJhbWV0ZXJCKTtcblxuICAgICAgaWYgKHBhcmFtZXRlckFFcXVhbFRvUGFyYW1ldGVyQikge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3BhcmFtZXRlclN0cmluZ30nIHBhcmFtZXRlciB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbkEgPSBhc3N1bXB0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25CID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IGFzc3VtcHRpb25BLmlzRXF1YWxUbyhhc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQikge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQcm9jZWR1cmVSZWZlcmVuY2UocHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VBID0gcHJvY2VkdXJlUmVmZXJlbmNlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzLCAocHJvY2VkdXJlUmVmZXJlbmNlKSA9PiB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VCID0gcHJvY2VkdXJlUmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZUFFcXVhbFRvUHJvY2VkdXJlYWxsQiA9IHByb2NlZHVyZVJlZmVyZW5jZUEuaXNFcXVhbFRvKHByb2NlZHVyZVJlZmVyZW5jZUIpO1xuXG4gICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCKSB7XG4gICAgICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzLnB1c2gocHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgLy8vXG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIHRlcm1zLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgIHRoaXMuYWRkVGVybSh0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExpbmtzKGxpbmtzKSB7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgdGhpcy5hZGRMaW5rKGxpbmspO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRnJhbWVzKGZyYW1lcykge1xuICAgIGZyYW1lcy5mb3JFYWNoKChmcmFtZSkgPT4ge1xuICAgICAgdGhpcy5hZGRGcmFtZShmcmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpIHtcbiAgICBlcXVhbGl0aWVzLmZvckVhY2goKGVxdWFsaXR5KSA9PiB7XG4gICAgICB0aGlzLmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbnMoYXNzZXJ0aW9ucykge1xuICAgIGFzc2VydGlvbnMuZm9yRWFjaCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50cyhzdGF0ZW1lbnRzKSB7XG4gICAgc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIHRoaXMuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgICBwYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcikgPT4ge1xuICAgICAgdGhpcy5hZGRQYXJhbWV0ZXIocGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb25zKGFzc3VtcHRpb25zKSB7XG4gICAgYXNzdW1wdGlvbnMuZm9yRWFjaCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKSB7XG4gICAgbWV0YXZhcmlhYmxlcy5mb3JFYWNoKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIHRoaXMuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMpIHtcbiAgICBwcm9jZWR1cmVSZWZlcmVuY2VzLmZvckVhY2goKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgdGhpcy5hZGRQcm9jZWR1cmVSZWZlcmVuY2UocHJvY2VkdXJlUmVmZXJlbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcygpLFxuICAgICAgICAgIGxpbmsgPSBsaW5rcy5maW5kKChsaW5rKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rTm9kZU1hdGNoZXMgPSBsaW5rLm1hdGNoTGlua05vZGUobGlua05vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGlua05vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlcnMoKSxcbiAgICAgICAgICBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmZpbmQoKHBhcmFtZXRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyTm9kZU1hdGNoZXMgPSBwYXJhbWV0ZXIubWF0Y2hQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVyTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VzLmZpbmQoKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2UubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICB0ZXJtUHJlc2VudCA9ICh0ZXJtICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0ZXJtUHJlc2VudDtcbiAgfVxuXG4gIGlzTGlua1ByZXNlbnRCeUxpbmtOb2RlKGxpbmtOb2RlKSB7XG4gICAgY29uc3QgbGluayA9IHRoaXMuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKSxcbiAgICAgICAgICBsaW5rUHJlc2VudCA9IChsaW5rICE9PSBudWxsKTtcblxuICAgIHJldHVybiBsaW5rUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgZnJhbWVQcmVzZW50ID0gKGZyYW1lICE9PSBudWxsKTtcblxuICAgIHJldHVybiBmcmFtZVByZXNlbnQ7XG4gIH1cblxuICBpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IChlcXVhbGl0eSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IChhc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gKHN0YXRlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gdGhpcy5maW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpLFxuICAgICAgICAgIHBhcmFtZXRlclByZXNlbnQgPSAocGFyYW1ldGVyICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJQcmVzZW50O1xuICB9XG5cbiAgaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGFzc3VtcHRpb25QcmVzZW50ID0gKGFzc3VtcHRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVuID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2UgPSB0aGlzLmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSksXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCA9IChwcm9jZWR1cmVSZWZlcmVuY2UgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpbml0aWFsaXNlKGpzb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubGlua3MgPSBsaW5rc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzID0gcHJvY2VkdXJlUmVmZXJlbmNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGVkIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKTtcblxuICAgIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zVG9UZXJtc0pTT04odGVybXMpLFxuICAgICAgICAgIGxpbmtzSlNPTiA9IGxpbmtzVG9MaW5rc0pTT04obGlua3MpLFxuICAgICAgICAgIGZyYW1lc0pTT04gPSBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSxcbiAgICAgICAgICBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OKGVxdWFsaXRpZXMpLFxuICAgICAgICAgIGFzc2VydGlvbnNKU09OID0gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucyksXG4gICAgICAgICAgc3RhdGVtZW50c0pTT04gPSBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSxcbiAgICAgICAgICBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OKHBhcmFtZXRlcnMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZXNUb1Byb2NlZHVyZVJlZmVyZW5jZXNKU09OKHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGxpbmtzID0gbGlua3NKU09OOyAvLy9cbiAgICBmcmFtZXMgPSBmcmFtZXNKU09OOyAvLy9cbiAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0pTT047ICAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2VzSlNPTjsgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgdGVybXMsXG4gICAgICBsaW5rcyxcbiAgICAgIGZyYW1lcyxcbiAgICAgIGVxdWFsaXRpZXMsXG4gICAgICBhc3NlcnRpb25zLFxuICAgICAgc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIG1ldGF2YXJpYWJsZXMsXG4gICAgICBzdWJzdGl0dXRpb25zLFxuICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGxpbmtzID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zLCBwcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGxpbmtzID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgcGFyYW1ldGVycyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgbW5lbWljQ29udGV4dCA9IG5ldyBNbmVtaWNDb250ZXh0KGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBwYXJhbWV0ZXJzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk1uZW1pY0NvbnRleHQiLCJwdXNoIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImxpbmtzIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicGFyYW1ldGVycyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImdldFByb2NlZHVyZVJlZmVyZW5jZXMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVBIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QSIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwiYWRkUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwicGFyYW1ldGVyQSIsInBhcmFtZXRlckIiLCJwYXJhbWV0ZXJBRXF1YWxUb1BhcmFtZXRlckIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25CIiwic3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiYWRkUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlQSIsInByb2NlZHVyZVJlZmVyZW5jZUIiLCJwcm9jZWR1cmVSZWZlcmVuY2VBRXF1YWxUb1Byb2NlZHVyZWFsbEIiLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImluZmVycmVkU3Vic3RpdHV0aW9ucyIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZExpbmtzIiwiYWRkRnJhbWVzIiwiYWRkRXF1YWxpdGllcyIsImFkZEFzc2VydGlvbnMiLCJhZGRTdGF0ZW1lbnRzIiwiYWRkUGFyYW1ldGVycyIsImFkZEFzc3VtcHRpb25zIiwiYWRkTWV0YXZhcmlhYmxlcyIsImFkZFByb2NlZHVyZVJlZmVyZW5jZXMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlTWF0Y2hlcyIsIm1hdGNoUGFyYW1ldGVyTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlclByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCIsImluaXRpYWxpc2UiLCJqc29uIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwidGVybXNGcm9tSlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsImVxdWFsaXRpZXNGcm9tSlNPTiIsImxpbmtzRnJvbUpTT04iLCJhc3N1bXB0aW9uc0Zyb21KU09OIiwiZnJhbWVzRnJvbUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VzRnJvbUpTT04iLCJjb21taXQiLCJ0b0pTT04iLCJ0ZXJtc0pTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwibGlua3NKU09OIiwibGlua3NUb0xpbmtzSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJwYXJhbWV0ZXJzSlNPTiIsInBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlc0pTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VzVG9Qcm9jZWR1cmVSZWZlcmVuY2VzSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQ0E7OztlQUFxQkE7OzsyQkE5QlU7Z0VBRVg7c0JBd0JrQzs7Ozs7O0FBRXRELE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsbUJBQW1CLENBQUU7UUFDekosS0FBSyxDQUFDWDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FB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
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7XG4gIHRlcm1zRnJvbUpTT04sXG4gIGxpbmtzRnJvbUpTT04sXG4gIGZyYW1lc0Zyb21KU09OLFxuICBlcXVhbGl0aWVzRnJvbUpTT04sXG4gIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICBwYXJhbWV0ZXJzRnJvbUpTT04sXG4gIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgc3Vic3RpdHV0aW9uc0Zyb21KU09OLFxuICBwcm9jZWR1cmVSZWZlcmVuY2VzRnJvbUpTT04sXG4gIHRlcm1zVG9UZXJtc0pTT04sXG4gIGxpbmtzVG9MaW5rc0pTT04sXG4gIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgcGFyYW1ldGVyc1RvUGFyYW1ldGVyc0pTT04sXG4gIGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OLFxuICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04sXG4gIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OLFxuICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTixcbiAgcHJvY2VkdXJlUmVmZXJlbmNlc1RvUHJvY2VkdXJlUmVmZXJlbmNlc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoLCBleHRyYWN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW5lbWljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB0ZXJtcywgbGlua3MsIGZyYW1lcywgZXF1YWxpdGllcywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcGFyYW1ldGVycywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMsIHByb2NlZHVyZVJlZmVyZW5jZXMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLmxpbmtzID0gbGlua3M7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcyA9IHByb2NlZHVyZVJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldExpbmtzKGxpbmtzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGxpbmtzLCB0aGlzLmxpbmtzKTtcblxuICAgIGNvbnRleHQuZ2V0TGlua3MobGlua3MpO1xuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChmcmFtZXMsIHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG5cbiAgICByZXR1cm4gZnJhbWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGVxdWFsaXRpZXMsIHRoaXMuZXF1YWxpdGllcyk7XG5cbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHBhcmFtZXRlcnMsIHRoaXMucGFyYW1ldGVycyk7XG5cbiAgICBjb250ZXh0LmdldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocHJvY2VkdXJlUmVmZXJlbmNlcywgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyhwcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VzO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1BID0gdGVybTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMudGVybXMsICh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7dGVybVN0cmluZ30nIHRlcm0gZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRMaW5rKGxpbmspIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbGlua1N0cmluZyA9IGxpbmsuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbGlua0EgPSBsaW5rOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5saW5rcywgKGxpbmspID0+IHtcbiAgICAgIGNvbnN0IGxpbmtCID0gbGluaywgLy8vXG4gICAgICAgICAgICBsaW5rQUVxdWFsVG9MaW5rQiA9IGxpbmtBLmlzRXF1YWxUbyhsaW5rQik7XG5cbiAgICAgIGlmIChsaW5rQUVxdWFsVG9MaW5rQikge1xuICAgICAgICBjb25zdCBsaW5rU3RyaW5nID0gbGluay5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtsaW5rU3RyaW5nfScgbGluayBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5saW5rcy5wdXNoKGxpbmspO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBmcmFtZUEgPSBmcmFtZTsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuZnJhbWVzLCAoZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lQiA9IGZyYW1lLCAvLy9cbiAgICAgICAgICAgIGZyYW1lQUVxdWFsVG9GcmFtZUIgPSBmcmFtZUEuaXNFcXVhbFRvKGZyYW1lQik7XG5cbiAgICAgIGlmIChmcmFtZUFFcXVhbFRvRnJhbWVCKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZXMucHVzaChmcmFtZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlBID0gZXF1YWxpdHk7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLmVxdWFsaXRpZXMsIChlcXVhbGl0eSkgPT4ge1xuICAgICAgY29uc3QgZXF1YWxpdHlCID0gZXF1YWxpdHksIC8vL1xuICAgICAgICAgICAgZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiA9IGVxdWFsaXR5QS5pc0VxdWFsVG8oZXF1YWxpdHlCKTtcblxuICAgICAgaWYgKGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIpIHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMucHVzaChlcXVhbGl0eSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzZXJ0aW9uQSA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuYXNzZXJ0aW9ucywgKGFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uQiA9IGFzc2VydGlvbiwgLy8vXG4gICAgICAgICAgICBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICBjb25zdCBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50QSA9IHN0YXRlbWVudDsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlci5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyQSA9IHBhcmFtZXRlcjsgLy8vXG5cbiAgICBleHRyYWN0KHRoaXMucGFyYW1ldGVycywgKHBhcmFtZXRlcikgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyQiA9IHBhcmFtZXRlciwgLy8vXG4gICAgICAgICAgICBwYXJhbWV0ZXJBRXF1YWxUb1BhcmFtZXRlckIgPSBwYXJhbWV0ZXJBLmlzRXF1YWxUbyhwYXJhbWV0ZXJCKTtcblxuICAgICAgaWYgKHBhcmFtZXRlckFFcXVhbFRvUGFyYW1ldGVyQikge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3BhcmFtZXRlclN0cmluZ30nIHBhcmFtZXRlciB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbkEgPSBhc3N1bXB0aW9uOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25CID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IGFzc3VtcHRpb25BLmlzRXF1YWxUbyhhc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBmcm9tIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIGV4dHJhY3QodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBSZW1vdmVkIHRoZSBleGlzdGluZyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQikge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgUmVtb3ZlZCB0aGUgZXhpc3RpbmcgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIGZyb20gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQcm9jZWR1cmVSZWZlcmVuY2UocHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gY2FsbCB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZUEgPSBwcm9jZWR1cmVSZWZlcmVuY2U7IC8vL1xuXG4gICAgZXh0cmFjdCh0aGlzLnByb2NlZHVyZVJlZmVyZW5jZXMsIChwcm9jZWR1cmVSZWZlcmVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZUIgPSBwcm9jZWR1cmVSZWZlcmVuY2UsIC8vL1xuICAgICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlQUVxdWFsVG9Qcm9jZWR1cmVhbGxCID0gcHJvY2VkdXJlUmVmZXJlbmNlQS5pc0VxdWFsVG8ocHJvY2VkdXJlUmVmZXJlbmNlQik7XG5cbiAgICAgIGlmIChwcm9jZWR1cmVSZWZlcmVuY2VBRXF1YWxUb1Byb2NlZHVyZWFsbEIpIHtcbiAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlIGV4aXN0aW5nICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIGZ1bmN0aW9uIGNhbGwgZnJvbSB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlcy5wdXNoKHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gY2FsbCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgLy8vXG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIHRlcm1zLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgIHRoaXMuYWRkVGVybSh0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExpbmtzKGxpbmtzKSB7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgdGhpcy5hZGRMaW5rKGxpbmspO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRnJhbWVzKGZyYW1lcykge1xuICAgIGZyYW1lcy5mb3JFYWNoKChmcmFtZSkgPT4ge1xuICAgICAgdGhpcy5hZGRGcmFtZShmcmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpIHtcbiAgICBlcXVhbGl0aWVzLmZvckVhY2goKGVxdWFsaXR5KSA9PiB7XG4gICAgICB0aGlzLmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbnMoYXNzZXJ0aW9ucykge1xuICAgIGFzc2VydGlvbnMuZm9yRWFjaCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50cyhzdGF0ZW1lbnRzKSB7XG4gICAgc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIHRoaXMuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgICBwYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcikgPT4ge1xuICAgICAgdGhpcy5hZGRQYXJhbWV0ZXIocGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb25zKGFzc3VtcHRpb25zKSB7XG4gICAgYXNzdW1wdGlvbnMuZm9yRWFjaCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKSB7XG4gICAgbWV0YXZhcmlhYmxlcy5mb3JFYWNoKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIHRoaXMuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMpIHtcbiAgICBwcm9jZWR1cmVSZWZlcmVuY2VzLmZvckVhY2goKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgdGhpcy5hZGRQcm9jZWR1cmVSZWZlcmVuY2UocHJvY2VkdXJlUmVmZXJlbmNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcygpLFxuICAgICAgICAgIGxpbmsgPSBsaW5rcy5maW5kKChsaW5rKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rTm9kZU1hdGNoZXMgPSBsaW5rLm1hdGNoTGlua05vZGUobGlua05vZGUpO1xuXG4gICAgICAgICAgICBpZiAobGlua05vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlcnMoKSxcbiAgICAgICAgICBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmZpbmQoKHBhcmFtZXRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyTm9kZU1hdGNoZXMgPSBwYXJhbWV0ZXIubWF0Y2hQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVyTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VzLmZpbmQoKHByb2NlZHVyZVJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2UubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICB0ZXJtUHJlc2VudCA9ICh0ZXJtICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0ZXJtUHJlc2VudDtcbiAgfVxuXG4gIGlzTGlua1ByZXNlbnRCeUxpbmtOb2RlKGxpbmtOb2RlKSB7XG4gICAgY29uc3QgbGluayA9IHRoaXMuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKSxcbiAgICAgICAgICBsaW5rUHJlc2VudCA9IChsaW5rICE9PSBudWxsKTtcblxuICAgIHJldHVybiBsaW5rUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgZnJhbWVQcmVzZW50ID0gKGZyYW1lICE9PSBudWxsKTtcblxuICAgIHJldHVybiBmcmFtZVByZXNlbnQ7XG4gIH1cblxuICBpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IChlcXVhbGl0eSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IChhc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gKHN0YXRlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gdGhpcy5maW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUpLFxuICAgICAgICAgIHBhcmFtZXRlclByZXNlbnQgPSAocGFyYW1ldGVyICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJQcmVzZW50O1xuICB9XG5cbiAgaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGFzc3VtcHRpb25QcmVzZW50ID0gKGFzc3VtcHRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVuID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2UgPSB0aGlzLmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSksXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCA9IChwcm9jZWR1cmVSZWZlcmVuY2UgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpbml0aWFsaXNlKGpzb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMubGlua3MgPSBsaW5rc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2VzID0gcHJvY2VkdXJlUmVmZXJlbmNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGVkIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZXMgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZXMoKTtcblxuICAgIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zVG9UZXJtc0pTT04odGVybXMpLFxuICAgICAgICAgIGxpbmtzSlNPTiA9IGxpbmtzVG9MaW5rc0pTT04obGlua3MpLFxuICAgICAgICAgIGZyYW1lc0pTT04gPSBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSxcbiAgICAgICAgICBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OKGVxdWFsaXRpZXMpLFxuICAgICAgICAgIGFzc2VydGlvbnNKU09OID0gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucyksXG4gICAgICAgICAgc3RhdGVtZW50c0pTT04gPSBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSxcbiAgICAgICAgICBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OKHBhcmFtZXRlcnMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZXNUb1Byb2NlZHVyZVJlZmVyZW5jZXNKU09OKHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGxpbmtzID0gbGlua3NKU09OOyAvLy9cbiAgICBmcmFtZXMgPSBmcmFtZXNKU09OOyAvLy9cbiAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0pTT047ICAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZXMgPSBwcm9jZWR1cmVSZWZlcmVuY2VzSlNPTjsgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgdGVybXMsXG4gICAgICBsaW5rcyxcbiAgICAgIGZyYW1lcyxcbiAgICAgIGVxdWFsaXRpZXMsXG4gICAgICBhc3NlcnRpb25zLFxuICAgICAgc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIG1ldGF2YXJpYWJsZXMsXG4gICAgICBzdWJzdGl0dXRpb25zLFxuICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGxpbmtzID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIHBhcmFtZXRlcnMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGxpbmtzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHBhcmFtZXRlcnMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zLCBwcm9jZWR1cmVSZWZlcmVuY2VzKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGxpbmtzID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgcGFyYW1ldGVycyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgbW5lbWljQ29udGV4dCA9IG5ldyBNbmVtaWNDb250ZXh0KGNvbnRleHQsIHRlcm1zLCBsaW5rcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBwYXJhbWV0ZXJzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvY2VkdXJlUmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk1uZW1pY0NvbnRleHQiLCJwdXNoIiwiZXh0cmFjdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImxpbmtzIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicGFyYW1ldGVycyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiZ2V0TGlua3MiLCJnZXRGcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImdldFByb2NlZHVyZVJlZmVyZW5jZXMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkTGluayIsImxpbmsiLCJsaW5rU3RyaW5nIiwibGlua0EiLCJsaW5rQiIsImxpbmtBRXF1YWxUb0xpbmtCIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVBIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QSIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwiYWRkUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwicGFyYW1ldGVyQSIsInBhcmFtZXRlckIiLCJwYXJhbWV0ZXJBRXF1YWxUb1BhcmFtZXRlckIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25CIiwic3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiYWRkUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlQSIsInByb2NlZHVyZVJlZmVyZW5jZUIiLCJwcm9jZWR1cmVSZWZlcmVuY2VBRXF1YWxUb1Byb2NlZHVyZWFsbEIiLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImluZmVycmVkU3Vic3RpdHV0aW9ucyIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZExpbmtzIiwiYWRkRnJhbWVzIiwiYWRkRXF1YWxpdGllcyIsImFkZEFzc2VydGlvbnMiLCJhZGRTdGF0ZW1lbnRzIiwiYWRkUGFyYW1ldGVycyIsImFkZEFzc3VtcHRpb25zIiwiYWRkTWV0YXZhcmlhYmxlcyIsImFkZFByb2NlZHVyZVJlZmVyZW5jZXMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJOb2RlTWF0Y2hlcyIsIm1hdGNoUGFyYW1ldGVyTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xpbmtQcmVzZW50QnlMaW5rTm9kZSIsImxpbmtQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlclByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudCIsImluaXRpYWxpc2UiLCJqc29uIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwidGVybXNGcm9tSlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsImVxdWFsaXRpZXNGcm9tSlNPTiIsImxpbmtzRnJvbUpTT04iLCJhc3N1bXB0aW9uc0Zyb21KU09OIiwiZnJhbWVzRnJvbUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VzRnJvbUpTT04iLCJjb21taXQiLCJ0b0pTT04iLCJ0ZXJtc0pTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwibGlua3NKU09OIiwibGlua3NUb0xpbmtzSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJwYXJhbWV0ZXJzSlNPTiIsInBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlc0pTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VzVG9Qcm9jZWR1cmVSZWZlcmVuY2VzSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQ0E7OztlQUFxQkE7OzsyQkE5QlU7Z0VBRVg7c0JBd0JrQzs7Ozs7O0FBRXRELE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWM7QUFFekIsTUFBTUgsc0JBQXNCSSxnQkFBTztJQUNoRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsbUJBQW1CLENBQUU7UUFDekosS0FBSyxDQUFDWDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0Ms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
@@ -55,10 +55,10 @@ class Fact extends _occamlanguages.Element {
55
55
  return forward(state, context, back);
56
56
  }
57
57
  const factString = this.getString(); ///
58
- context.trace(`Validating the '${factString}' fact's procedure call...`);
58
+ context.trace(`Validating the '${factString}' fact's function reference...`);
59
59
  return this.procedureReference.validate(state, context, (procedureReference, context, back)=>{
60
60
  this.procedureReference = procedureReference;
61
- context.trace(`...validated the '${factString}' fact's procedure call.`);
61
+ context.trace(`...validated the '${factString}' fact's function reference.`);
62
62
  return forward(state, context, back);
63
63
  }, back);
64
64
  }
@@ -116,13 +116,13 @@ class Fact extends _occamlanguages.Element {
116
116
  return forward(context, back);
117
117
  }
118
118
  const factString = this.getString(); ///
119
- context.trace(`Applying the '${factString}' fact's procedure call independently...`);
119
+ context.trace(`Applying the '${factString}' fact's function reference independently...`);
120
120
  const factContext = this.getContext(), generalContext = factContext, specificContext = context; ///
121
121
  return this.procedureReference.applyIndependently(generalContext, specificContext, (generalContext, specificContext, back)=>{
122
- context.debug(`...applied the '${factString}' fact's procedure call independently.`);
122
+ context.debug(`...applied the '${factString}' fact's function reference independently.`);
123
123
  return forward(context, back);
124
124
  }, back);
125
125
  }
126
126
  }
127
127
 
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZhY3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGVxdWF0ZVN0YXRlbWVudHMgfSBmcm9tIFwiLi4vcHJvY2Vzcy9lcXVhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmFjdCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc0ZhY3QoKSB7XG4gICAgY29uc3QgZmFjdCA9IHRydWU7XG5cbiAgICByZXR1cm4gZmFjdDtcbiAgfVxuXG4gIGlzU3RlcCgpIHtcbiAgICBjb25zdCBzdGVwID0gZmFsc2U7XG5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIGlzQnVicHJvb2YoKSB7XG4gICAgY29uc3Qgc3VicHJvb2YgPSBmYWxzZTtcblxuICAgIHJldHVybiBzdWJwcm9vZjtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChwcm9jZWR1cmVSZWZlcmVuY2UsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3MgcHJvY2VkdXJlIGNhbGwuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGNvbXBhcmVTdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb1N0ZXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGZhY3RTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBjb21wYXJlc1RvU3RhdGVtZW50ID0gdGhpcy5jb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0YXRlbWVudCkge1xuICAgICAgY29tcGFyZXNUb1N0ZXAgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlc1RvU3RlcCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0ZXA7XG4gIH1cblxuICBjb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RhdGVtZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdC4uLmApO1xuXG4gICAgY29uc3QgbGVmdFN0YXRlbWVudCA9IHN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHJpZ2h0U3RhdGVtZW50ID0gdGhpcy5zdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRzRXF1YXRlID0gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50c0VxdWF0ZSkge1xuICAgICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RhdGVtZW50O1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBmYWN0U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBhcHBseVN0YXRlbWVudEluZGVwZW5kZW50bHkoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnN0YXRlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwcGx5aW5nIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBmYWN0Q29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGZhY3RDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LmFwcGx5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYXBwbGllZCB0aGUgJyR7ZmFjdFN0cmluZ30nIGZhY3QncyBzdGF0ZW1lbnQgaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBhcHBseVByb2NlZHVyZVJlZmVyZW5jZUluZGVwZW5kZW50bHkoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3MgcHJvY2VkdXJlIGNhbGwgaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgZmFjdENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBmYWN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZS5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3MgcHJvY2VkdXJlIGNhbGwgaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJGYWN0IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsInByb2NlZHVyZVJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldFByb2NlZHVyZVJlZmVyZW5jZSIsImlzRmFjdCIsImZhY3QiLCJpc1N0ZXAiLCJzdGVwIiwiaXNCdWJwcm9vZiIsInN1YnByb29mIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiZmFjdFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZSIsImNvbXBhcmVTdGVwIiwiY29tcGFyZXNUb1N0ZXAiLCJzdGVwU3RyaW5nIiwiY29tcGFyZXNUb1N0YXRlbWVudCIsImNvbXBhcmVTdGF0ZW1lbnQiLCJkZWJ1ZyIsInN0YXRlbWVudFN0cmluZyIsImxlZnRTdGF0ZW1lbnQiLCJyaWdodFN0YXRlbWVudCIsInN0YXRlbWVudHNFcXVhdGUiLCJlcXVhdGVTdGF0ZW1lbnRzIiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImFwcGx5U3RhdGVtZW50SW5kZXBlbmRlbnRseSIsImZhY3RDb250ZXh0IiwiZ2V0Q29udGV4dCIsImFwcGx5SW5kZXBlbmRlbnRseSIsImFwcGx5UHJvY2VkdXJlUmVmZXJlbmNlSW5kZXBlbmRlbnRseSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUFxQkE7OztnQ0FKRzt3QkFFUztBQUVsQixNQUFNQSxhQUFhQyx1QkFBTztJQUN2QyxZQUFZQyxPQUFPLEVBQUVD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
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZhY3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGVxdWF0ZVN0YXRlbWVudHMgfSBmcm9tIFwiLi4vcHJvY2Vzcy9lcXVhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmFjdCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBpc0ZhY3QoKSB7XG4gICAgY29uc3QgZmFjdCA9IHRydWU7XG5cbiAgICByZXR1cm4gZmFjdDtcbiAgfVxuXG4gIGlzU3RlcCgpIHtcbiAgICBjb25zdCBzdGVwID0gZmFsc2U7XG5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIGlzQnVicHJvb2YoKSB7XG4gICAgY29uc3Qgc3VicHJvb2YgPSBmYWxzZTtcblxuICAgIHJldHVybiBzdWJwcm9vZjtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIGZ1bmN0aW9uIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocHJvY2VkdXJlUmVmZXJlbmNlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZTtcblxuICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIGZ1bmN0aW9uIHJlZmVyZW5jZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RlcCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZmFjdFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0aGlzLmNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb21wYXJlc1RvU3RlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGVwKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RlcDtcbiAgfVxuXG4gIGNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBmYWN0U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0Li4uYCk7XG5cbiAgICBjb25zdCBsZWZ0U3RhdGVtZW50ID0gc3RhdGVtZW50LCAgLy8vXG4gICAgICAgICAgcmlnaHRTdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudHNFcXVhdGUgPSBlcXVhdGVTdGF0ZW1lbnRzKGxlZnRTdGF0ZW1lbnQsIHJpZ2h0U3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRzRXF1YXRlKSB7XG4gICAgICBjb21wYXJlc1RvU3RhdGVtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0YXRlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7ZmFjdFN0cmluZ30nIGZhY3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGZhY3RTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGFwcGx5U3RhdGVtZW50SW5kZXBlbmRlbnRseShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBwbHlpbmcgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3Mgc3RhdGVtZW50IGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IGZhY3RDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZmFjdENvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuYXBwbHlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCdzIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGFwcGx5UHJvY2VkdXJlUmVmZXJlbmNlSW5kZXBlbmRlbnRseShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBseWluZyB0aGUgJyR7ZmFjdFN0cmluZ30nIGZhY3QncyBmdW5jdGlvbiByZWZlcmVuY2UgaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgZmFjdENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBmYWN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZS5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0J3MgZnVuY3Rpb24gcmVmZXJlbmNlIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG59XG4iXSwibmFtZXMiOlsiRmFjdCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2UiLCJpc0ZhY3QiLCJmYWN0IiwiaXNTdGVwIiwic3RlcCIsImlzQnVicHJvb2YiLCJzdWJwcm9vZiIsInZhbGlkYXRlU3RhdGVtZW50Iiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImZhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlIiwidmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2UiLCJjb21wYXJlU3RlcCIsImNvbXBhcmVzVG9TdGVwIiwic3RlcFN0cmluZyIsImNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RhdGVtZW50IiwiZGVidWciLCJzdGF0ZW1lbnRTdHJpbmciLCJsZWZ0U3RhdGVtZW50IiwicmlnaHRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRzRXF1YXRlIiwiZXF1YXRlU3RhdGVtZW50cyIsInVuaWZ5U3RhdGVtZW50IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJhcHBseVN0YXRlbWVudEluZGVwZW5kZW50bHkiLCJmYWN0Q29udGV4dCIsImdldENvbnRleHQiLCJhcHBseUluZGVwZW5kZW50bHkiLCJhcHBseVByb2NlZHVyZVJlZmVyZW5jZUluZGVwZW5kZW50bHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBcUJBOzs7Z0NBSkc7d0JBRVM7QUFFbEIsTUFBTUEsYUFBYUMsdUJBQU87SUFDdkMs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
@@ -105,10 +105,10 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
105
105
  return forward(state, context, back);
106
106
  }
107
107
  const hypothesisString = this.getString(); ///
108
- context.trace(`Validating the '${hypothesisString}' hypothesis' procedure call...`);
108
+ context.trace(`Validating the '${hypothesisString}' hypothesis' function reference...`);
109
109
  return this.procedureReference.validate(state, context, (procedureReference, context, back)=>{
110
110
  this.procedureReference = procedureReference;
111
- context.trace(`...validated the '${hypothesisString}' hypothesis' procedure call.`);
111
+ context.trace(`...validated the '${hypothesisString}' hypothesis' function reference.`);
112
112
  return forward(state, context, back);
113
113
  }, back);
114
114
  }
@@ -140,9 +140,9 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
140
140
  return back();
141
141
  }
142
142
  const termString = term.getString(), hypothesisString = this.getString(); ///
143
- context.trace(`Discharging the '${hypothesisString}' hypothesis' procedure call given the '${termString}' term...`);
143
+ context.trace(`Discharging the '${hypothesisString}' hypothesis' function reference given the '${termString}' term...`);
144
144
  this.procedureReference.dischargeGivenTerm(term, context, (back)=>{
145
- context.debug(`...discharged the '${hypothesisString}' hypothesis' procedure call given the '${termString}' term.`);
145
+ context.debug(`...discharged the '${hypothesisString}' hypothesis' function reference given the '${termString}' term.`);
146
146
  return forward(context, back);
147
147
  }, back);
148
148
  }
@@ -184,4 +184,4 @@ function procedureReferenceFromHypothesisNode(hypothesisNode, context) {
184
184
  return procedureReference;
185
185
  }
186
186
 
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGlzb2xhdGUsIGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgY3V0LCBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlLCBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSHlwb3RoZXNpcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRIeXBvdGhlc2lzTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgaHlwb3RoZXNpc05vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNpc05vZGU7XG4gIH1cblxuICBpc01hbGZvcm1lZCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2lzTm9kZSA9IHRoaXMuZ2V0SHlwb3RoZXNpc05vZGUoKSxcbiAgICAgICAgICBtYWxmb3JtZWQgPSBoeXBvdGhlc2lzTm9kZS5pc01hbGZvcm1lZCgpO1xuXG4gICAgcmV0dXJuIG1hbGZvcm1lZDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250eHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICBjb25zdCBtYWxmb3JtZWQgPSB0aGlzLmlzTWFsZm9ybWVkKCk7XG5cbiAgICBpZiAobWFsZm9ybWVkKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBiZWNhdXNlIGl0IGlzIG1hbGZvcm1lZC5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChoeXBvdGhlc2lzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnR4dDsgLy8vXG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGlzY2hhcmdlID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICBjb25zdCBkaXNjaGFyZ2VTdGF0ZW1lbnQgPSB0aGlzLmRpc2NoYXJnZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICBkaXNjaGFyZ2VTdGF0ZW1lbnRcbiAgICBdLCBjb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZVxuICAgICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBoeXBvdGhlc2lzID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChoeXBvdGhlc2lzLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChwcm9jZWR1cmVSZWZlcmVuY2UsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBwcm9jZWR1cmUgY2FsbC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgZGlzY2hhcmdlU3RhdGVtZW50KGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC5kaXNjaGFyZ2UoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJjYWspID0+IHtcbiAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmNhayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRoaXMuZGlzY2hhcmdlUHJvY2VkdXJlUmVmZXJlbmNlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgZGlzY2hhcmdlUHJvY2VkdXJlUmVmZXJlbmNlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgcHJvY2VkdXJlIGNhbGwgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZS5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgKGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSHlwb3RoZXNpc1wiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzaXM7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gaW5zdGFudGlhdGVIeXBvdGhlc2lzKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGh5cG90aGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn0iXSwibmFtZXMiOlsiY3V0IiwiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiSHlwb3RoZXNpcyIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2UiLCJnZXRIeXBvdGhlc2lzTm9kZSIsImdldE5vZGUiLCJoeXBvdGhlc2lzTm9kZSIsImlzTWFsZm9ybWVkIiwibWFsZm9ybWVkIiwidmVyaWZ5IiwiZm9yd2FyZCIsImJhY2siLCJzcGVjaWZpY0NvbnR4dCIsImh5cG90aGVzaXNTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlY2xhcmUiLCJzdGF0ZSIsInZhbGlkYXRlIiwiaHlwb3RoZXNpcyIsImRlYnVnIiwiZXhjZXB0aW9uIiwiZGlzY2hhcmdlIiwiZGlzY2hhcmdlU3RhdGVtZW50IiwiYmluZCIsImlzb2xhdGUiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZSIsImNvbW1pdCIsInNwZWNpZmljQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImJjYWsiLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImRpc2NoYXJnZVByb2NlZHVyZVJlZmVyZW5jZUdpdmVuVGVybSIsInRvSlNPTiIsImpzb24iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVIeXBvdGhlc2lzIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJmaW5kUHJvY2VkdXJlUmVmZXJlbmNlQnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWb0U7MEJBRTdDO3VCQUNDOzZCQUNjO3lCQUNnQztBQUV0RSxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsR0FBRyxFQUFFLEdBQUdDLHFDQUFxQixFQUNwQyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFekYsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsQ0FBRTtRQUM1RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJ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
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGlzb2xhdGUsIGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgY3V0LCBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlLCBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSHlwb3RoZXNpcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRIeXBvdGhlc2lzTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgaHlwb3RoZXNpc05vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNpc05vZGU7XG4gIH1cblxuICBpc01hbGZvcm1lZCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2lzTm9kZSA9IHRoaXMuZ2V0SHlwb3RoZXNpc05vZGUoKSxcbiAgICAgICAgICBtYWxmb3JtZWQgPSBoeXBvdGhlc2lzTm9kZS5pc01hbGZvcm1lZCgpO1xuXG4gICAgcmV0dXJuIG1hbGZvcm1lZDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250eHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICBjb25zdCBtYWxmb3JtZWQgPSB0aGlzLmlzTWFsZm9ybWVkKCk7XG5cbiAgICBpZiAobWFsZm9ybWVkKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBiZWNhdXNlIGl0IGlzIG1hbGZvcm1lZC5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChoeXBvdGhlc2lzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnR4dDsgLy8vXG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGlzY2hhcmdlID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICBjb25zdCBkaXNjaGFyZ2VTdGF0ZW1lbnQgPSB0aGlzLmRpc2NoYXJnZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICBkaXNjaGFyZ2VTdGF0ZW1lbnRcbiAgICBdLCBjb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZVJlZmVyZW5jZVxuICAgICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBoeXBvdGhlc2lzID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChoeXBvdGhlc2lzLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIGZ1bmN0aW9uIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocHJvY2VkdXJlUmVmZXJlbmNlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZTtcblxuICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgZnVuY3Rpb24gcmVmZXJlbmNlLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VTdGF0ZW1lbnQoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnN0YXRlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LmRpc2NoYXJnZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmNhaykgPT4ge1xuICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiY2FrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGRpc2NoYXJnZUdpdmVuVGVybSh0ZXJtLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgdGhpcy5kaXNjaGFyZ2VQcm9jZWR1cmVSZWZlcmVuY2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VQcm9jZWR1cmVSZWZlcmVuY2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBmdW5jdGlvbiByZWZlcmVuY2UgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZS5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgKGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBmdW5jdGlvbiByZWZlcmVuY2UgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkh5cG90aGVzaXNcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBoeXBvdGhlc2lzTm9kZSA9IGluc3RhbnRpYXRlSHlwb3RoZXNpcyhzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gaHlwb3RoZXNpc05vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBoeXBvdGhlc2lzID0gbmV3IEh5cG90aGVzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5mdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gY29udGV4dC5maW5kUHJvY2VkdXJlUmVmZXJlbmNlQnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59Il0sIm5hbWVzIjpbImN1dCIsImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrYWJsZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkh5cG90aGVzaXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlIiwiZ2V0SHlwb3RoZXNpc05vZGUiLCJnZXROb2RlIiwiaHlwb3RoZXNpc05vZGUiLCJpc01hbGZvcm1lZCIsIm1hbGZvcm1lZCIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwic3BlY2lmaWNDb250eHQiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsImh5cG90aGVzaXMiLCJkZWJ1ZyIsImV4Y2VwdGlvbiIsImRpc2NoYXJnZSIsImRpc2NoYXJnZVN0YXRlbWVudCIsImJpbmQiLCJpc29sYXRlIiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50IiwidmFsaWRhdGVQcm9jZWR1cmVSZWZlcmVuY2UiLCJjb21taXQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJiY2FrIiwiZGlzY2hhcmdlR2l2ZW5UZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJkaXNjaGFyZ2VQcm9jZWR1cmVSZWZlcmVuY2VHaXZlblRlcm0iLCJ0b0pTT04iLCJqc29uIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlSHlwb3RoZXNpcyIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFBOzs7Z0NBVm9FOzBCQUU3Qzt1QkFDQzs2QkFDYzt5QkFDZ0M7QUFFdEUsTUFBTSxFQUFFQSxHQUFHLEVBQUVDLEdBQUcsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDcEMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRXpGLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLENBQUU7UUFDNUUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMs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
@@ -65,10 +65,10 @@ const _default = (0, _elements.define)(class ProcedureReference extends _occamla
65
65
  validate = unbreakable(function(state, context, forward, back) {
66
66
  let procedureReference;
67
67
  const procedureReferenceString = this.getString(); ///
68
- context.trace(`Validating the '${procedureReferenceString}' procedure call...`);
68
+ context.trace(`Validating the '${procedureReferenceString}' function reference...`);
69
69
  procedureReference = this.findProcedureReference(context);
70
70
  if (procedureReference !== null) {
71
- context.debug(`The '${procedureReferenceString}' procedure call is already present.`);
71
+ context.debug(`The '${procedureReferenceString}' function reference is already present.`);
72
72
  return forward(procedureReference, context, back);
73
73
  }
74
74
  procedureReference = this; ///
@@ -77,71 +77,71 @@ const _default = (0, _elements.define)(class ProcedureReference extends _occamla
77
77
  validateParameters
78
78
  ], state, context, (state, context, back)=>{
79
79
  context.addProcedureReference(procedureReference);
80
- context.debug(`...validated the '${procedureReferenceString}' procedure call.`);
80
+ context.debug(`...validated the '${procedureReferenceString}' function reference.`);
81
81
  return forward(procedureReference, context, back);
82
82
  }, back);
83
83
  });
84
84
  validateParameter(parameter, parameters, state, context, forward, back) {
85
85
  const parameterString = parameter.getString(), procedureReferenceString = this.getString(); ///
86
- context.trace(`Validating the '${procedureReferenceString}' procedure call's '${parameterString}' parameter...`);
86
+ context.trace(`Validating the '${procedureReferenceString}' function reference's '${parameterString}' parameter...`);
87
87
  return parameter.validate(state, context, (parameter, context, back)=>{
88
88
  parameters.push(parameter);
89
- context.debug(`...validated the '${procedureReferenceString}' procedure call's '${parameterString}' parameter.`);
89
+ context.debug(`...validated the '${procedureReferenceString}' function reference's '${parameterString}' parameter.`);
90
90
  return forward(parameters, state, context, back);
91
91
  }, back);
92
92
  }
93
93
  validateParameters(state, context, forward, back) {
94
94
  const procedureReferenceString = this.getString(); ///
95
- context.trace(`Validating the '${procedureReferenceString}' procedure call's parameters...`);
95
+ context.trace(`Validating the '${procedureReferenceString}' function reference's parameters...`);
96
96
  const parameters = [];
97
97
  return every(this.parameters, (parameter, parameters, state, context, forward, back)=>{
98
98
  return this.validateParameter(parameter, parameters, state, context, forward, back);
99
99
  }, parameters, state, context, (parameters, state, context, back)=>{
100
100
  this.parameters = parameters;
101
- context.debug(`...validated the '${procedureReferenceString}' procedure call's parameters.`);
101
+ context.debug(`...validated the '${procedureReferenceString}' function reference's parameters.`);
102
102
  return forward(state, context, back);
103
103
  }, back);
104
104
  }
105
105
  applyIndependently(generalContext, specificContext, forward, back) {
106
106
  const context = specificContext, procedureReferenceString = this.getString(); ///
107
- context.trace(`Applying the '${procedureReferenceString}' procedure call independently...`);
107
+ context.trace(`Applying the '${procedureReferenceString}' function reference independently...`);
108
108
  const procedureName = this.getProcedureName(), procedure = context.findProcedureByProcedureName(procedureName), values = this.findValues(context);
109
109
  return procedure.callNominally(values, (value, back)=>{
110
110
  const boolean = value.isBoolean();
111
111
  if (!boolean) {
112
- context.info(`The '${procedureReferenceString}' procedure call did not return a boolean.`);
112
+ context.info(`The '${procedureReferenceString}' function reference did not return a boolean.`);
113
113
  return back();
114
114
  }
115
115
  const primitiveValue = value.getPrimitiveValue();
116
116
  if (!primitiveValue) {
117
117
  return back();
118
118
  }
119
- context.trace(`...applied the '${procedureReferenceString}' procedure call independently.`);
119
+ context.trace(`...applied the '${procedureReferenceString}' function reference independently.`);
120
120
  return forward(generalContext, specificContext, back);
121
121
  }, back);
122
122
  }
123
- dischargeGivenParameter(parameter, context, forward, back) {
124
- const parameterString = parameter.getString(), procedureReferenceString = this.getString(); ///
125
- context.trace(`Discharging the '${procedureReferenceString}' procedure call given the '${parameterString}' parameter...`);
123
+ dischargeGivenTerm(term, context, forward, back) {
124
+ const termString = term.getString(), procedureReferenceString = this.getString(); ///
125
+ context.trace(`Discharging the '${procedureReferenceString}' function reference given the '${termString}' term...`);
126
126
  const unary = this.isUnary();
127
127
  if (!unary) {
128
- context.debug(`The '${procedureReferenceString}' procedure call is not unary.`);
128
+ context.debug(`The '${procedureReferenceString}' function reference is not unary.`);
129
129
  return back();
130
130
  }
131
- const procedureName = this.getProcedureName(), procedure = context.findProcedureByProcedureName(procedureName), value = _value.default.fromParameter(parameter, context), values = [
131
+ const procedureName = this.getProcedureName(), procedure = context.findProcedureByProcedureName(procedureName), value = _value.default.fromTerm(term, context), values = [
132
132
  value
133
133
  ];
134
134
  return procedure.callNominally(values, (value, back)=>{
135
135
  const boolean = value.isBoolean();
136
136
  if (!boolean) {
137
- context.info(`The '${procedureReferenceString}' procedure call did not return a boolean.`);
137
+ context.info(`The '${procedureReferenceString}' function reference did not return a boolean.`);
138
138
  return back();
139
139
  }
140
140
  const primitiveValue = value.getPrimitiveValue();
141
141
  if (!primitiveValue) {
142
142
  return back();
143
143
  }
144
- context.debug(`...discharged the '${procedureReferenceString}' procedure call given the '${parameterString}' parameter.`);
144
+ context.debug(`...discharged the '${procedureReferenceString}' function reference given the '${termString}' term.`);
145
145
  return forward(back);
146
146
  }, back);
147
147
  }
@@ -176,4 +176,4 @@ function parametersFromProcedureReferenceNode(procedureReferenceNode, context) {
176
176
  return parameters;
177
177
  }
178
178
 
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb2NlZHVyZVJlZmVyZW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtFbGVtZW50LCBjb250aW51YXRpb25VdGlsaXRpZXMsIGJyZWFrUG9pbnRVdGlsaXRpZXN9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFZhbHVlIGZyb20gXCIuLi92YWx1ZVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByb2NlZHVyZVJlZmVyZW5jZSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5cbmNvbnN0IHsgYWxsLCBldmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb2NlZHVyZVJlZmVyZW5jZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IG5vZGU7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZTtcbiAgfVxuXG4gIGdldFByb2NlZHVyZU5hbWUoKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlTmFtZSA9IHRoaXMubmFtZTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVOYW1lO1xuICB9XG5cbiAgaXNVbmFyeSgpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzTGVuZ3RoID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aCxcbiAgICAgICAgICB1bmFyeSA9IChwYXJhbWV0ZXJzTGVuZ3RoID09PSAxKTtcblxuICAgIHJldHVybiB1bmFyeTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaFByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFZhbHVlcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gaW5mZXJyZWRTdWJzdGl0dXRpb25zLCAvLy9cbiAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLmZpbmRWYWx1ZShzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgdmFsaWRhdGUgPSB1bmJyZWFrYWJsZShmdW5jdGlvbiAoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHRoaXMuZmluZFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0KTtcblxuICAgIGlmIChwcm9jZWR1cmVSZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHByb2NlZHVyZVJlZmVyZW5jZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZVBhcmFtZXRlcnMgPSB0aGlzLnZhbGlkYXRlUGFyYW1ldGVycy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVBhcmFtZXRlcnNcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmFkZFByb2NlZHVyZVJlZmVyZW5jZShwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIHByb2NlZHVyZSBjYWxsLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChwcm9jZWR1cmVSZWZlcmVuY2UsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZVBhcmFtZXRlcihwYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIHByb2NlZHVyZSBjYWxsJ3MgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyLi4uYCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocGFyYW1ldGVyLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBwYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCdzICcke3BhcmFtZXRlclN0cmluZ30nIHBhcmFtZXRlci5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQocGFyYW1ldGVycywgc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVQYXJhbWV0ZXJzKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwncyBwYXJhbWV0ZXJzLi4uYCk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gW107XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5wYXJhbWV0ZXJzLCAocGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVQYXJhbWV0ZXIocGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgcGFyYW1ldGVycywgc3RhdGUsIGNvbnRleHQsIChwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCdzIHBhcmFtZXRlcnMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGFwcGx5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHZhbHVlcyA9IHRoaXMuZmluZFZhbHVlcyhjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9jZWR1cmUuY2FsbE5vbWluYWxseSh2YWx1ZXMsICh2YWx1ZSwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgYm9vbGVhbiA9IHZhbHVlLmlzQm9vbGVhbigpO1xuXG4gICAgICBpZiAoIWJvb2xlYW4pIHtcbiAgICAgICAgY29udGV4dC5pbmZvKGBUaGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbHVlID0gdmFsdWUuZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5hcHBsaWVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBpbmRlcGVuZGVudGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGRpc2NoYXJnZUdpdmVuUGFyYW1ldGVyKHBhcmFtZXRlciwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlci5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyLi4uYCk7XG5cbiAgICBjb25zdCB1bmFyeSA9IHRoaXMuaXNVbmFyeSgpO1xuXG4gICAgaWYgKCF1bmFyeSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIHByb2NlZHVyZSBjYWxsIGlzIG5vdCB1bmFyeS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHZhbHVlID0gVmFsdWUuZnJvbVBhcmFtZXRlcihwYXJhbWV0ZXIsIGNvbnRleHQpLFxuICAgICAgICAgIHZhbHVlcyA9IFtcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgXTtcblxuICAgIHJldHVybiBwcm9jZWR1cmUuY2FsbE5vbWluYWxseSh2YWx1ZXMsICh2YWx1ZSwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgYm9vbGVhbiA9IHZhbHVlLmlzQm9vbGVhbigpO1xuXG4gICAgICBpZiAoIWJvb2xlYW4pIHtcbiAgICAgICAgY29udGV4dC5pbmZvKGBUaGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbHVlID0gdmFsdWUuZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb2NlZHVyZVJlZmVyZW5jZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBpbnN0YW50aWF0ZVByb2NlZHVyZVJlZmVyZW5jZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcGFyYW1ldGVycyk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IGNvbnRleHQuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5hbWUiLCJwYXJhbWV0ZXJzIiwiZ2V0TmFtZSIsImdldFBhcmFtZXRlcnMiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0Tm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJnZXRQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsImlzVW5hcnkiLCJwYXJhbWV0ZXJzTGVuZ3RoIiwibGVuZ3RoIiwidW5hcnkiLCJpc0VxdWFsVG8iLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRWYWx1ZXMiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwidmFsdWVzIiwibWFwIiwicGFyYW1ldGVyIiwidmFsdWUiLCJmaW5kVmFsdWUiLCJmaW5kUHJvY2VkdXJlUmVmZXJlbmNlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsInByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVBhcmFtZXRlcnMiLCJiaW5kIiwiYWRkUHJvY2VkdXJlUmVmZXJlbmNlIiwidmFsaWRhdGVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwdXNoIiwiYXBwbHlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJwcm9jZWR1cmUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwiY2FsbE5vbWluYWxseSIsImJvb2xlYW4iLCJpc0Jvb2xlYW4iLCJpbmZvIiwicHJpbWl0aXZlVmFsdWUiLCJnZXRQcmltaXRpdmVWYWx1ZSIsImRpc2NoYXJnZUdpdmVuUGFyYW1ldGVyIiwiVmFsdWUiLCJmcm9tUGFyYW1ldGVyIiwidG9KU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVByb2NlZHVyZVJlZmVyZW5jZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJOb2RlIiwiZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWGtFOzhEQUVoRDswQkFFSzt5QkFDSzs2QkFDa0I7Ozs7OztBQUU5QyxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHFDQUFxQixFQUN0QyxFQUFFQyxXQUFXLEVBQUUsR0FBR0MsbUNBQW1C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
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb2NlZHVyZVJlZmVyZW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtFbGVtZW50LCBjb250aW51YXRpb25VdGlsaXRpZXMsIGJyZWFrUG9pbnRVdGlsaXRpZXN9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFZhbHVlIGZyb20gXCIuLi92YWx1ZVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByb2NlZHVyZVJlZmVyZW5jZSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5cbmNvbnN0IHsgYWxsLCBldmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb2NlZHVyZVJlZmVyZW5jZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IG5vZGU7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZTtcbiAgfVxuXG4gIGdldFByb2NlZHVyZU5hbWUoKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlTmFtZSA9IHRoaXMubmFtZTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVOYW1lO1xuICB9XG5cbiAgaXNVbmFyeSgpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzTGVuZ3RoID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aCxcbiAgICAgICAgICB1bmFyeSA9IChwYXJhbWV0ZXJzTGVuZ3RoID09PSAxKTtcblxuICAgIHJldHVybiB1bmFyeTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaFByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFZhbHVlcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gaW5mZXJyZWRTdWJzdGl0dXRpb25zLCAvLy9cbiAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLmZpbmRWYWx1ZShzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCkge1xuICAgIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSB0aGlzLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgdmFsaWRhdGUgPSB1bmJyZWFrYWJsZShmdW5jdGlvbiAoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSB0aGlzLmZpbmRQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCk7XG5cbiAgICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQocHJvY2VkdXJlUmVmZXJlbmNlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSB0aGlzOyAvLy9cblxuICAgIGNvbnN0IHZhbGlkYXRlUGFyYW1ldGVycyA9IHRoaXMudmFsaWRhdGVQYXJhbWV0ZXJzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlUGFyYW1ldGVyc1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkUHJvY2VkdXJlUmVmZXJlbmNlKHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChwcm9jZWR1cmVSZWZlcmVuY2UsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZVBhcmFtZXRlcihwYXJhbWV0ZXIsIHBhcmFtZXRlcnMsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIGZ1bmN0aW9uIHJlZmVyZW5jZSdzICcke3BhcmFtZXRlclN0cmluZ30nIHBhcmFtZXRlci4uLmApO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlci52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHBhcmFtZXRlciwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlJ3MgJyR7cGFyYW1ldGVyU3RyaW5nfScgcGFyYW1ldGVyLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVBhcmFtZXRlcnMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UncyBwYXJhbWV0ZXJzLi4uYCk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gW107XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5wYXJhbWV0ZXJzLCAocGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVQYXJhbWV0ZXIocGFyYW1ldGVyLCBwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgcGFyYW1ldGVycywgc3RhdGUsIGNvbnRleHQsIChwYXJhbWV0ZXJzLCBzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UncyBwYXJhbWV0ZXJzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBhcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsXG4gICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBseWluZyB0aGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZU5hbWUgPSB0aGlzLmdldFByb2NlZHVyZU5hbWUoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgdmFsdWVzID0gdGhpcy5maW5kVmFsdWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZS5jYWxsTm9taW5hbGx5KHZhbHVlcywgKHZhbHVlLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBib29sZWFuID0gdmFsdWUuaXNCb29sZWFuKCk7XG5cbiAgICAgIGlmICghYm9vbGVhbikge1xuICAgICAgICBjb250ZXh0LmluZm8oYFRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbHVlID0gdmFsdWUuZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5hcHBsaWVkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UgaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke3Byb2NlZHVyZVJlZmVyZW5jZVN0cmluZ30nIGZ1bmN0aW9uIHJlZmVyZW5jZSBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHVuYXJ5ID0gdGhpcy5pc1VuYXJ5KCk7XG5cbiAgICBpZiAoIXVuYXJ5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nfScgZnVuY3Rpb24gcmVmZXJlbmNlIGlzIG5vdCB1bmFyeS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHZhbHVlID0gVmFsdWUuZnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgdmFsdWVzID0gW1xuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZS5jYWxsTm9taW5hbGx5KHZhbHVlcywgKHZhbHVlLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBib29sZWFuID0gdmFsdWUuaXNCb29sZWFuKCk7XG5cbiAgICAgIGlmICghYm9vbGVhbikge1xuICAgICAgICBjb250ZXh0LmluZm8oYFRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuXG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbHVlID0gdmFsdWUuZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmd9JyBmdW5jdGlvbiByZWZlcmVuY2UgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb2NlZHVyZVJlZmVyZW5jZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBpbnN0YW50aWF0ZVByb2NlZHVyZVJlZmVyZW5jZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcGFyYW1ldGVycyk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IGNvbnRleHQuZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlKTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5hbWUiLCJwYXJhbWV0ZXJzIiwiZ2V0TmFtZSIsImdldFBhcmFtZXRlcnMiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0Tm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJnZXRQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsImlzVW5hcnkiLCJwYXJhbWV0ZXJzTGVuZ3RoIiwibGVuZ3RoIiwidW5hcnkiLCJpc0VxdWFsVG8iLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlTWF0Y2hlcyIsIm1hdGNoUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRWYWx1ZXMiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwidmFsdWVzIiwibWFwIiwicGFyYW1ldGVyIiwidmFsdWUiLCJmaW5kVmFsdWUiLCJmaW5kUHJvY2VkdXJlUmVmZXJlbmNlIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsInByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVBhcmFtZXRlcnMiLCJiaW5kIiwiYWRkUHJvY2VkdXJlUmVmZXJlbmNlIiwidmFsaWRhdGVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwdXNoIiwiYXBwbHlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJwcm9jZWR1cmUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwiY2FsbE5vbWluYWxseSIsImJvb2xlYW4iLCJpc0Jvb2xlYW4iLCJpbmZvIiwicHJpbWl0aXZlVmFsdWUiLCJnZXRQcmltaXRpdmVWYWx1ZSIsImRpc2NoYXJnZUdpdmVuVGVybSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiVmFsdWUiLCJmcm9tVGVybSIsInRvSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQcm9jZWR1cmVSZWZlcmVuY2UiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyTm9kZSIsImZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVhrRTs4REFFaEQ7MEJBRUs7eUJBQ0s7NkJBQ2tCOzs7Ozs7QUFFOUMsTUFBTSxFQUFFQSxHQUFHLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDdEMsRUFBRUMsV0FBVyxF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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.576",
4
+ "version": "1.0.577",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -366,7 +366,7 @@ export default class CladicContext extends Context {
366
366
  const context = this, ///
367
367
  procedureReferenceString = procedureReference.getString();
368
368
 
369
- context.trace(`Adding the '${procedureReferenceString}' procedure call to the cladic context...`);
369
+ context.trace(`Adding the '${procedureReferenceString}' function call to the cladic context...`);
370
370
 
371
371
  const procedureReferenceA = procedureReference; ///
372
372
 
@@ -377,7 +377,7 @@ export default class CladicContext extends Context {
377
377
  if (procedureReferenceAEqualToProcedureallB) {
378
378
  const procedureReferenceString = procedureReference.getString();
379
379
 
380
- context.trace(`Removed the existing '${procedureReferenceString}' procedure call from the cladic context...`);
380
+ context.trace(`Removed the existing '${procedureReferenceString}' function call from the cladic context...`);
381
381
 
382
382
  return true;
383
383
  }
@@ -385,7 +385,7 @@ export default class CladicContext extends Context {
385
385
 
386
386
  this.procedureReferences.push(procedureReference);
387
387
 
388
- context.debug(`...added the '${procedureReferenceString}' procedure call to the cladic context.`);
388
+ context.debug(`...added the '${procedureReferenceString}' function call to the cladic context.`);
389
389
  }
390
390
 
391
391
  addAssignment(assignment) {
@@ -421,7 +421,7 @@ export default class MnemicContext extends Context {
421
421
  const context = this, ///
422
422
  procedureReferenceString = procedureReference.getString();
423
423
 
424
- context.trace(`Adding the '${procedureReferenceString}' procedure call to the mnemic context...`);
424
+ context.trace(`Adding the '${procedureReferenceString}' function call to the mnemic context...`);
425
425
 
426
426
  const procedureReferenceA = procedureReference; ///
427
427
 
@@ -432,7 +432,7 @@ export default class MnemicContext extends Context {
432
432
  if (procedureReferenceAEqualToProcedureallB) {
433
433
  const procedureReferenceString = procedureReference.getString();
434
434
 
435
- context.trace(`Removed the existing '${procedureReferenceString}' procedure call from the mnemic context...`);
435
+ context.trace(`Removed the existing '${procedureReferenceString}' function call from the mnemic context...`);
436
436
 
437
437
  return true;
438
438
  }
@@ -440,7 +440,7 @@ export default class MnemicContext extends Context {
440
440
 
441
441
  this.procedureReferences.push(procedureReference);
442
442
 
443
- context.debug(`...added the '${procedureReferenceString}' procedure call to the mnemic context.`);
443
+ context.debug(`...added the '${procedureReferenceString}' function call to the mnemic context.`);
444
444
  }
445
445
 
446
446
  addAssignment(assignment) {
@@ -68,12 +68,12 @@ export default class Fact extends Element {
68
68
 
69
69
  const factString = this.getString(); ///
70
70
 
71
- context.trace(`Validating the '${factString}' fact's procedure call...`);
71
+ context.trace(`Validating the '${factString}' fact's function reference...`);
72
72
 
73
73
  return this.procedureReference.validate(state, context, (procedureReference, context, back) => {
74
74
  this.procedureReference = procedureReference;
75
75
 
76
- context.trace(`...validated the '${factString}' fact's procedure call.`);
76
+ context.trace(`...validated the '${factString}' fact's function reference.`);
77
77
 
78
78
  return forward(state, context, back);
79
79
  }, back);
@@ -169,14 +169,14 @@ export default class Fact extends Element {
169
169
 
170
170
  const factString = this.getString(); ///
171
171
 
172
- context.trace(`Applying the '${factString}' fact's procedure call independently...`);
172
+ context.trace(`Applying the '${factString}' fact's function reference independently...`);
173
173
 
174
174
  const factContext = this.getContext(), ///
175
175
  generalContext = factContext, ///
176
176
  specificContext = context; ///
177
177
 
178
178
  return this.procedureReference.applyIndependently(generalContext, specificContext, (generalContext, specificContext, back) => {
179
- context.debug(`...applied the '${factString}' fact's procedure call independently.`);
179
+ context.debug(`...applied the '${factString}' fact's function reference independently.`);
180
180
 
181
181
  return forward(context, back);
182
182
  }, back);
@@ -144,12 +144,12 @@ export default define(class Hypothesis extends Element {
144
144
 
145
145
  const hypothesisString = this.getString(); ///
146
146
 
147
- context.trace(`Validating the '${hypothesisString}' hypothesis' procedure call...`);
147
+ context.trace(`Validating the '${hypothesisString}' hypothesis' function reference...`);
148
148
 
149
149
  return this.procedureReference.validate(state, context, (procedureReference, context, back) => {
150
150
  this.procedureReference = procedureReference;
151
151
 
152
- context.trace(`...validated the '${hypothesisString}' hypothesis' procedure call.`);
152
+ context.trace(`...validated the '${hypothesisString}' hypothesis' function reference.`);
153
153
 
154
154
  return forward(state, context, back);
155
155
  }, back);
@@ -200,10 +200,10 @@ export default define(class Hypothesis extends Element {
200
200
  const termString = term.getString(),
201
201
  hypothesisString = this.getString(); ///
202
202
 
203
- context.trace(`Discharging the '${hypothesisString}' hypothesis' procedure call given the '${termString}' term...`);
203
+ context.trace(`Discharging the '${hypothesisString}' hypothesis' function reference given the '${termString}' term...`);
204
204
 
205
205
  this.procedureReference.dischargeGivenTerm(term, context, (back) => {
206
- context.debug(`...discharged the '${hypothesisString}' hypothesis' procedure call given the '${termString}' term.`);
206
+ context.debug(`...discharged the '${hypothesisString}' hypothesis' function reference given the '${termString}' term.`);
207
207
 
208
208
  return forward(context, back);
209
209
  }, back);
@@ -87,12 +87,12 @@ export default define(class ProcedureReference extends Element {
87
87
 
88
88
  const procedureReferenceString = this.getString(); ///
89
89
 
90
- context.trace(`Validating the '${procedureReferenceString}' procedure call...`);
90
+ context.trace(`Validating the '${procedureReferenceString}' function reference...`);
91
91
 
92
92
  procedureReference = this.findProcedureReference(context);
93
93
 
94
94
  if (procedureReference !== null) {
95
- context.debug(`The '${procedureReferenceString}' procedure call is already present.`);
95
+ context.debug(`The '${procedureReferenceString}' function reference is already present.`);
96
96
 
97
97
  return forward(procedureReference, context, back);
98
98
  }
@@ -106,7 +106,7 @@ export default define(class ProcedureReference extends Element {
106
106
  ], state, context, (state, context, back) => {
107
107
  context.addProcedureReference(procedureReference);
108
108
 
109
- context.debug(`...validated the '${procedureReferenceString}' procedure call.`);
109
+ context.debug(`...validated the '${procedureReferenceString}' function reference.`);
110
110
 
111
111
  return forward(procedureReference, context, back);
112
112
  }, back);
@@ -116,12 +116,12 @@ export default define(class ProcedureReference extends Element {
116
116
  const parameterString = parameter.getString(),
117
117
  procedureReferenceString = this.getString(); ///
118
118
 
119
- context.trace(`Validating the '${procedureReferenceString}' procedure call's '${parameterString}' parameter...`);
119
+ context.trace(`Validating the '${procedureReferenceString}' function reference's '${parameterString}' parameter...`);
120
120
 
121
121
  return parameter.validate(state, context, (parameter, context, back) => {
122
122
  parameters.push(parameter);
123
123
 
124
- context.debug(`...validated the '${procedureReferenceString}' procedure call's '${parameterString}' parameter.`);
124
+ context.debug(`...validated the '${procedureReferenceString}' function reference's '${parameterString}' parameter.`);
125
125
 
126
126
  return forward(parameters, state, context, back);
127
127
  }, back);
@@ -130,7 +130,7 @@ export default define(class ProcedureReference extends Element {
130
130
  validateParameters(state, context, forward, back) {
131
131
  const procedureReferenceString = this.getString(); ///
132
132
 
133
- context.trace(`Validating the '${procedureReferenceString}' procedure call's parameters...`);
133
+ context.trace(`Validating the '${procedureReferenceString}' function reference's parameters...`);
134
134
 
135
135
  const parameters = [];
136
136
 
@@ -139,7 +139,7 @@ export default define(class ProcedureReference extends Element {
139
139
  }, parameters, state, context, (parameters, state, context, back) => {
140
140
  this.parameters = parameters;
141
141
 
142
- context.debug(`...validated the '${procedureReferenceString}' procedure call's parameters.`);
142
+ context.debug(`...validated the '${procedureReferenceString}' function reference's parameters.`);
143
143
 
144
144
  return forward(state, context, back);
145
145
  }, back);
@@ -149,7 +149,7 @@ export default define(class ProcedureReference extends Element {
149
149
  const context = specificContext,
150
150
  procedureReferenceString = this.getString(); ///
151
151
 
152
- context.trace(`Applying the '${procedureReferenceString}' procedure call independently...`);
152
+ context.trace(`Applying the '${procedureReferenceString}' function reference independently...`);
153
153
 
154
154
  const procedureName = this.getProcedureName(),
155
155
  procedure = context.findProcedureByProcedureName(procedureName),
@@ -159,7 +159,7 @@ export default define(class ProcedureReference extends Element {
159
159
  const boolean = value.isBoolean();
160
160
 
161
161
  if (!boolean) {
162
- context.info(`The '${procedureReferenceString}' procedure call did not return a boolean.`);
162
+ context.info(`The '${procedureReferenceString}' function reference did not return a boolean.`);
163
163
 
164
164
  return back();
165
165
  }
@@ -170,29 +170,29 @@ export default define(class ProcedureReference extends Element {
170
170
  return back();
171
171
  }
172
172
 
173
- context.trace(`...applied the '${procedureReferenceString}' procedure call independently.`);
173
+ context.trace(`...applied the '${procedureReferenceString}' function reference independently.`);
174
174
 
175
175
  return forward(generalContext, specificContext, back);
176
176
  }, back);
177
177
  }
178
178
 
179
- dischargeGivenParameter(parameter, context, forward, back) {
180
- const parameterString = parameter.getString(),
179
+ dischargeGivenTerm(term, context, forward, back) {
180
+ const termString = term.getString(),
181
181
  procedureReferenceString = this.getString(); ///
182
182
 
183
- context.trace(`Discharging the '${procedureReferenceString}' procedure call given the '${parameterString}' parameter...`);
183
+ context.trace(`Discharging the '${procedureReferenceString}' function reference given the '${termString}' term...`);
184
184
 
185
185
  const unary = this.isUnary();
186
186
 
187
187
  if (!unary) {
188
- context.debug(`The '${procedureReferenceString}' procedure call is not unary.`);
188
+ context.debug(`The '${procedureReferenceString}' function reference is not unary.`);
189
189
 
190
190
  return back();
191
191
  }
192
192
 
193
193
  const procedureName = this.getProcedureName(),
194
194
  procedure = context.findProcedureByProcedureName(procedureName),
195
- value = Value.fromParameter(parameter, context),
195
+ value = Value.fromTerm(term, context),
196
196
  values = [
197
197
  value
198
198
  ];
@@ -201,7 +201,7 @@ export default define(class ProcedureReference extends Element {
201
201
  const boolean = value.isBoolean();
202
202
 
203
203
  if (!boolean) {
204
- context.info(`The '${procedureReferenceString}' procedure call did not return a boolean.`);
204
+ context.info(`The '${procedureReferenceString}' function reference did not return a boolean.`);
205
205
 
206
206
  return back();
207
207
  }
@@ -212,7 +212,7 @@ export default define(class ProcedureReference extends Element {
212
212
  return back();
213
213
  }
214
214
 
215
- context.debug(`...discharged the '${procedureReferenceString}' procedure call given the '${parameterString}' parameter.`);
215
+ context.debug(`...discharged the '${procedureReferenceString}' function reference given the '${termString}' term.`);
216
216
 
217
217
  return forward(back);
218
218
  }, back);