@tricoteuses/assemblee 0.26.2 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/loaders.js CHANGED
@@ -100,7 +100,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
100
100
 
101
101
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
102
102
 
103
- var documentUidRegex = /^(ACIN|AVCE|AVIS|DECL|ETDI|LETT|PION|PNRE|PRJL|RAPP|RINF)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC)(\d+)(-.*)?$/;
103
+ var documentUidRegex = /^(ACIN|AVCE|AVIS|DECL|ETDI|LETT|PION|PNRE|PRJL|RAPP|RINF|RION)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC|TAP)(\d+)(-.*)?$/;
104
104
  var dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
105
105
  var reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
106
106
  var scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
@@ -1135,4 +1135,4 @@ function pathFromScrutinUid(scrutinsDir, uid) {
1135
1135
 
1136
1136
  return _path["default"].join(numeroMilliersDir, uid);
1137
1137
  }
1138
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sIm5hbWVzIjpbImRvY3VtZW50VWlkUmVnZXgiLCJkb3NzaWVyVWlkUmVnZXgiLCJyZXVuaW9uVWlkUmVnZXgiLCJzY3J1dGluVWlkUmVnZXgiLCJsb2FkQXNzZW1ibGVlRGF0YSIsImRhdGFEaXIiLCJlbmFibGVkRGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImxvZyIsImFjdGV1ckJ5VWlkIiwib3JnYW5lQnlVaWQiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImlnbm9yZUZvcldlYiIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiZGF0YXNldERpciIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJyZXBsYWNlIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1ckZpbGVQYXRoIiwiY29uc29sZSIsImFjdGV1ckpzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJ0b0FjdGV1ciIsInVpZCIsInVuZGVmaW5lZCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwib3JnYW5lIiwidG9PcmdhbmUiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsInJldW5pb24iLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRzT2RqIiwicG9pbnRPZGoiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRGaWxlUGF0aCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudCIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiUXVpbnplIiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJKU09OIiwicGFyc2UiLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5GaWxlUGF0aCIsInNjcnV0aW5Kc29uIiwic2NydXRpbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlTGVnaXNsYXRpZiIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImRvY3VtZW50c0RpciIsIm1hdGNoIiwiZXhlYyIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLElBQU1BLGdCQUFnQixHQUNwQix3R0FERjtBQUVBLElBQU1DLGVBQWUsR0FBRyx3QkFBeEI7QUFDQSxJQUFNQyxlQUFlLEdBQ25CLDJEQURGO0FBRUEsSUFBTUMsZUFBZSxHQUFHLDBCQUF4QjtBQUVBOztBQUNPLFNBQVNDLGlCQUFULENBQ0xDLE9BREssRUFFTEMsZUFGSyxFQUdMQyxXQUhLLEVBS0M7QUFBQSxpRkFEWSxFQUNaO0FBQUEsc0JBREpDLEdBQ0k7QUFBQSxNQURKQSxHQUNJLHlCQURFLEtBQ0Y7O0FBQ04sTUFBTUMsV0FBc0MsR0FBRyxFQUEvQztBQUNBLE1BQU1DLFdBQXNDLEdBQUcsRUFBL0M7O0FBQ0EsTUFBSUosZUFBZSxHQUFHSywwQkFBZ0JDLGdCQUF0QyxFQUF3RDtBQUFBLCtDQUNoQ0MsbUJBQVNDLGdCQUR1QjtBQUFBOztBQUFBO0FBQ3RELDBEQUFpRDtBQUFBLFlBQXRDQyxPQUFzQzs7QUFDL0MsWUFBSUEsT0FBTyxDQUFDQyxZQUFaLEVBQTBCO0FBQ3hCO0FBQ0Q7O0FBQ0QsWUFDRVQsV0FBVyxLQUFLVSwwQkFBWUMsR0FBNUIsSUFDQUgsT0FBTyxDQUFDUixXQUFSLEtBQXdCVSwwQkFBWUMsR0FEcEMsSUFFQVgsV0FBVyxLQUFLUSxPQUFPLENBQUNSLFdBSDFCLEVBSUU7QUFDQTtBQUNEOztBQUNELFlBQU1ZLFVBQVUsR0FBR0MsaUJBQUtDLElBQUwsQ0FDakJoQixPQURpQixFQUVqQlUsT0FBTyxDQUFDTyxRQUFSLENBQWlCQyxPQUFqQixDQUF5QixTQUF6QixFQUFvQyxVQUFwQyxDQUZpQixDQUFuQjs7QUFYK0Msb0RBZ0JqQiwyQkFBUUosVUFBUixFQUFvQixDQUFDLFNBQUQsQ0FBcEIsQ0FoQmlCO0FBQUE7O0FBQUE7QUFnQi9DLGlFQUFnRTtBQUFBLGdCQUFyREssZUFBcUQ7QUFDOUQsZ0JBQU1DLGNBQWMsR0FBR0QsZUFBZSxDQUFDQSxlQUFlLENBQUNFLE1BQWhCLEdBQXlCLENBQTFCLENBQXRDOztBQUNBLGdCQUFJLENBQUNELGNBQWMsQ0FBQ0UsUUFBZixDQUF3QixPQUF4QixDQUFMLEVBQXVDO0FBQ3JDO0FBQ0Q7O0FBQ0QsZ0JBQU1DLGNBQWMsR0FBR1IsaUJBQUtDLElBQUwsMEJBQVVGLFVBQVYsNEJBQXlCSyxlQUF6QixHQUF2Qjs7QUFDQSxnQkFBSWhCLEdBQUosRUFBUztBQUNQcUIsY0FBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkJvQixjQUE3QjtBQUNEOztBQUNELGdCQUFNRSxVQUFrQixHQUFHQyxvQkFBR0MsWUFBSCxDQUFnQkosY0FBaEIsRUFBZ0M7QUFDekRLLGNBQUFBLFFBQVEsRUFBRTtBQUQrQyxhQUFoQyxDQUEzQjs7QUFHQSxnQkFBTUMsTUFBTSxHQUFHQyw0QkFBd0JDLFFBQXhCLENBQWlDTixVQUFqQyxDQUFmLENBWjhELENBYTlEOzs7QUFDQSxnQkFBSXJCLFdBQVcsQ0FBQ3lCLE1BQU0sQ0FBQ0csR0FBUixDQUFYLEtBQTRCQyxTQUFoQyxFQUEyQztBQUN6QzdCLGNBQUFBLFdBQVcsQ0FBQ3lCLE1BQU0sQ0FBQ0csR0FBUixDQUFYLEdBQTBCSCxNQUExQjtBQUNEO0FBQ0Y7QUFqQzhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEsb0RBbUNqQiwyQkFBUWYsVUFBUixFQUFvQixDQUFDLFNBQUQsQ0FBcEIsQ0FuQ2lCO0FBQUE7O0FBQUE7QUFtQy9DLGlFQUFnRTtBQUFBLGdCQUFyRG9CLGVBQXFEO0FBQzlELGdCQUFNQyxjQUFjLEdBQUdELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDYixNQUFoQixHQUF5QixDQUExQixDQUF0Qzs7QUFDQSxnQkFBSSxDQUFDYyxjQUFjLENBQUNiLFFBQWYsQ0FBd0IsT0FBeEIsQ0FBTCxFQUF1QztBQUNyQztBQUNEOztBQUNELGdCQUFNYyxjQUFjLEdBQUdyQixpQkFBS0MsSUFBTCwwQkFBVUYsVUFBViw0QkFBeUJvQixlQUF6QixHQUF2Qjs7QUFDQSxnQkFBSS9CLEdBQUosRUFBUztBQUNQcUIsY0FBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkJpQyxjQUE3QjtBQUNEOztBQUNELGdCQUFNQyxVQUFrQixHQUFHWCxvQkFBR0MsWUFBSCxDQUFnQlMsY0FBaEIsRUFBZ0M7QUFDekRSLGNBQUFBLFFBQVEsRUFBRTtBQUQrQyxhQUFoQyxDQUEzQjs7QUFHQSxnQkFBTVUsTUFBTSxHQUFHUiw0QkFBd0JTLFFBQXhCLENBQWlDRixVQUFqQyxDQUFmLENBWjhELENBYTlEOzs7QUFDQSxnQkFBSWhDLFdBQVcsQ0FBQ2lDLE1BQU0sQ0FBQ04sR0FBUixDQUFYLEtBQTRCQyxTQUFoQyxFQUEyQztBQUN6QzVCLGNBQUFBLFdBQVcsQ0FBQ2lDLE1BQU0sQ0FBQ04sR0FBUixDQUFYLEdBQTBCTSxNQUExQjtBQUNEO0FBQ0Y7QUFwRDhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxRGhEO0FBdERxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUR2RDs7QUFFRCxNQUFNRSxZQUF3QyxHQUFHLEVBQWpEO0FBQ0EsTUFBTUMsYUFBMkMsR0FBRyxFQUFwRDtBQUNBLE1BQU1DLG9CQUF5RCxHQUFHLEVBQWxFOztBQUNBLE1BQUl6QyxlQUFlLEdBQUdLLDBCQUFnQnFDLE9BQXRDLEVBQStDO0FBQUEsZ0RBQ3ZCbkMsbUJBQVNvQyxPQURjO0FBQUE7O0FBQUE7QUFDN0MsNkRBQXdDO0FBQUEsWUFBN0JsQyxRQUE2Qjs7QUFDdEMsWUFBSUEsUUFBTyxDQUFDQyxZQUFaLEVBQTBCO0FBQ3hCO0FBQ0Q7O0FBQ0QsWUFDRVQsV0FBVyxLQUFLVSwwQkFBWUMsR0FBNUIsSUFDQUgsUUFBTyxDQUFDUixXQUFSLEtBQXdCVSwwQkFBWUMsR0FEcEMsSUFFQVgsV0FBVyxLQUFLUSxRQUFPLENBQUNSLFdBSDFCLEVBSUU7QUFDQTtBQUNEOztBQUNELFlBQU1ZLFdBQVUsR0FBR0MsaUJBQUtDLElBQUwsQ0FDakJoQixPQURpQixFQUVqQlUsUUFBTyxDQUFDTyxRQUFSLENBQWlCQyxPQUFqQixDQUF5QixTQUF6QixFQUFvQyxVQUFwQyxDQUZpQixDQUFuQjs7QUFYc0Msb0RBZVAsMkJBQVFKLFdBQVIsQ0FmTztBQUFBOztBQUFBO0FBZXRDLGlFQUFvRDtBQUFBLGdCQUF6QytCLGdCQUF5QztBQUNsRCxnQkFBTUMsZUFBZSxHQUFHRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUN4QixNQUFqQixHQUEwQixDQUEzQixDQUF4Qzs7QUFDQSxnQkFBSSxDQUFDeUIsZUFBZSxDQUFDeEIsUUFBaEIsQ0FBeUIsT0FBekIsQ0FBTCxFQUF3QztBQUN0QztBQUNEOztBQUNELGdCQUFNeUIsZUFBZSxHQUFHaEMsaUJBQUtDLElBQUwsMEJBQVVGLFdBQVYsNEJBQXlCK0IsZ0JBQXpCLEdBQXhCOztBQUNBLGdCQUFJMUMsR0FBSixFQUFTO0FBQ1BxQixjQUFBQSxPQUFPLENBQUNyQixHQUFSLHlCQUE2QjRDLGVBQTdCO0FBQ0Q7O0FBQ0QsZ0JBQU1DLFdBQW1CLEdBQUd0QixvQkFBR0MsWUFBSCxDQUFnQm9CLGVBQWhCLEVBQWlDO0FBQzNEbkIsY0FBQUEsUUFBUSxFQUFFO0FBRGlELGFBQWpDLENBQTVCOztBQUdBLGdCQUFNcUIsT0FBTyxHQUFHQyxpQkFBZUMsU0FBZixDQUF5QkgsV0FBekIsQ0FBaEI7O0FBQ0EsZ0JBQUlSLFlBQVksQ0FBQ1MsT0FBTyxDQUFDakIsR0FBVCxDQUFaLEtBQThCQyxTQUFsQyxFQUE2QztBQUMzQ08sY0FBQUEsWUFBWSxDQUFDUyxPQUFPLENBQUNqQixHQUFULENBQVosR0FBNEJpQixPQUE1QjtBQUNEOztBQUVELGdCQUFNRyxJQUFHLEdBQUdILE9BQU8sQ0FBQ0ksY0FBUixDQUF1QkMsV0FBdkIsR0FBcUNDLEtBQXJDLENBQTJDLEdBQTNDLEVBQWdELENBQWhELENBQVo7QUFDQSxnQkFBSUMsYUFBYSxHQUFHZixhQUFhLENBQUNXLElBQUQsQ0FBakM7O0FBQ0EsZ0JBQUlJLGFBQWEsS0FBS3ZCLFNBQXRCLEVBQWlDO0FBQy9CdUIsY0FBQUEsYUFBYSxHQUFHZixhQUFhLENBQUNXLElBQUQsQ0FBYixHQUFxQixFQUFyQztBQUNEOztBQUNESSxZQUFBQSxhQUFhLENBQUNDLElBQWQsQ0FBbUJSLE9BQW5CO0FBRUEsZ0JBQU1TLEdBQUcsR0FBR1QsT0FBTyxDQUFDUyxHQUFwQjs7QUFDQSxnQkFBSUEsR0FBRyxLQUFLekIsU0FBWixFQUF1QjtBQUFBLDBEQUNFeUIsR0FBRyxDQUFDQyxTQUFKLElBQWlCLEVBRG5CO0FBQUE7O0FBQUE7QUFDckIsdUVBQTRDO0FBQUEsc0JBQWpDQyxRQUFpQzs7QUFBQSw4REFDUEEsUUFBUSxDQUFDQyx1QkFBVCxJQUNqQyxFQUZ3QztBQUFBOztBQUFBO0FBQzFDLDJFQUNNO0FBQUEsMEJBREtDLG9CQUNMO0FBQ0osMEJBQUlDLG9CQUFvQixHQUN0QnJCLG9CQUFvQixDQUFDb0Isb0JBQUQsQ0FEdEI7O0FBRUEsMEJBQUlDLG9CQUFvQixLQUFLOUIsU0FBN0IsRUFBd0M7QUFDdEM4Qix3QkFBQUEsb0JBQW9CLEdBQUdyQixvQkFBb0IsQ0FDekNvQixvQkFEeUMsQ0FBcEIsR0FFbkIsRUFGSjtBQUdEOztBQUNEQyxzQkFBQUEsb0JBQW9CLENBQUNOLElBQXJCLENBQTBCUixPQUExQjtBQUNEO0FBWHlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZM0M7QUFib0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWN0QjtBQUNGO0FBdkRxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0R2QztBQXpENEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBEOUM7O0FBRUQsTUFBTWUsZUFBOEMsR0FBRyxFQUF2RDs7QUFDQSxNQUFJL0QsZUFBZSxHQUFHSywwQkFBZ0IyRCxXQUF0QyxFQUFtRDtBQUFBLGdEQUMzQnpELG1CQUFTMEQsV0FEa0I7QUFBQTs7QUFBQTtBQUNqRCw2REFBNEM7QUFBQSxZQUFqQ3hELFNBQWlDOztBQUMxQyxZQUFJQSxTQUFPLENBQUNDLFlBQVosRUFBMEI7QUFDeEI7QUFDRDs7QUFDRCxZQUNFVCxXQUFXLEtBQUtVLDBCQUFZQyxHQUE1QixJQUNBSCxTQUFPLENBQUNSLFdBQVIsS0FBd0JVLDBCQUFZQyxHQURwQyxJQUVBWCxXQUFXLEtBQUtRLFNBQU8sQ0FBQ1IsV0FIMUIsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBTVksWUFBVSxHQUFHQyxpQkFBS0MsSUFBTCxDQUNqQmhCLE9BRGlCLEVBRWpCVSxTQUFPLENBQUNPLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFNBQXpCLEVBQW9DLFVBQXBDLENBRmlCLENBQW5COztBQVgwQyxvREFnQlIsMkJBQVFKLFlBQVIsQ0FoQlE7QUFBQTs7QUFBQTtBQWdCMUMsaUVBQXVEO0FBQUEsZ0JBQTVDcUQsbUJBQTRDO0FBQ3JELGdCQUFNQyxrQkFBa0IsR0FDdEJELG1CQUFtQixDQUFDQSxtQkFBbUIsQ0FBQzlDLE1BQXBCLEdBQTZCLENBQTlCLENBRHJCOztBQUVBLGdCQUFJLENBQUMrQyxrQkFBa0IsQ0FBQzlDLFFBQW5CLENBQTRCLE9BQTVCLENBQUwsRUFBMkM7QUFDekM7QUFDRDs7QUFDRCxnQkFBTStDLGtCQUFrQixHQUFHdEQsaUJBQUtDLElBQUwsMEJBQVVGLFlBQVYsNEJBQXlCcUQsbUJBQXpCLEdBQTNCOztBQUNBLGdCQUFJaEUsR0FBSixFQUFTO0FBQ1BxQixjQUFBQSxPQUFPLENBQUNyQixHQUFSLHlCQUE2QmtFLGtCQUE3QjtBQUNEOztBQUNELGdCQUFNQyxjQUFzQixHQUFHNUMsb0JBQUdDLFlBQUgsQ0FBZ0IwQyxrQkFBaEIsRUFBb0M7QUFDakV6QyxjQUFBQSxRQUFRLEVBQUU7QUFEdUQsYUFBcEMsQ0FBL0I7O0FBR0EsZ0JBQU0yQyxVQUFVLEdBQUdDLHFCQUFtQkMsWUFBbkIsQ0FBZ0NILGNBQWhDLENBQW5COztBQUNBLGdCQUFJTixlQUFlLENBQUNPLFVBQVUsQ0FBQ3ZDLEdBQVosQ0FBZixLQUFvQ0MsU0FBeEMsRUFBbUQ7QUFDakQrQixjQUFBQSxlQUFlLENBQUNPLFVBQVUsQ0FBQ3ZDLEdBQVosQ0FBZixHQUFrQ3VDLFVBQWxDO0FBQ0Q7QUFDRjtBQWpDeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtDM0M7QUFuQ2dEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQ2xEOztBQUVELE1BQU1HLGFBQTBDLEdBQUcsRUFBbkQ7QUFDQSxNQUFNQyxpQ0FFTCxHQUFHLEVBRko7QUFHQSxNQUFNQyxpQ0FFTCxHQUFHLEVBRko7QUFHQSxNQUFNQyx5QkFBa0UsR0FBRyxFQUEzRTs7QUFDQSxNQUFJNUUsZUFBZSxHQUFHSywwQkFBZ0J3RSxtQkFBdEMsRUFBMkQ7QUFBQSxpREFDbkN0RSxtQkFBU3VFLG1CQUQwQjtBQUFBOztBQUFBO0FBQ3pELGdFQUFvRDtBQUFBLFlBQXpDckUsU0FBeUM7O0FBQ2xELFlBQUlBLFNBQU8sQ0FBQ0MsWUFBWixFQUEwQjtBQUN4QjtBQUNEOztBQUNELFlBQ0VULFdBQVcsS0FBS1UsMEJBQVlDLEdBQTVCLElBQ0FILFNBQU8sQ0FBQ1IsV0FBUixLQUF3QlUsMEJBQVlDLEdBRHBDLElBRUFYLFdBQVcsS0FBS1EsU0FBTyxDQUFDUixXQUgxQixFQUlFO0FBQ0E7QUFDRDs7QUFDRCxZQUFNWSxZQUFVLEdBQUdDLGlCQUFLQyxJQUFMLENBQ2pCaEIsT0FEaUIsRUFFakJVLFNBQU8sQ0FBQ08sUUFBUixDQUFpQkMsT0FBakIsQ0FBeUIsU0FBekIsRUFBb0MsVUFBcEMsQ0FGaUIsQ0FBbkI7O0FBWGtELHFEQWdCbEIsMkJBQVFKLFlBQVIsRUFBb0IsQ0FBQyxXQUFELENBQXBCLENBaEJrQjtBQUFBOztBQUFBO0FBZ0JsRCxvRUFBb0U7QUFBQSxnQkFBekRrRSxpQkFBeUQ7QUFDbEUsZ0JBQU1DLGdCQUFnQixHQUFHRCxpQkFBaUIsQ0FBQ0EsaUJBQWlCLENBQUMzRCxNQUFsQixHQUEyQixDQUE1QixDQUExQzs7QUFDQSxnQkFBSSxDQUFDNEQsZ0JBQWdCLENBQUMzRCxRQUFqQixDQUEwQixPQUExQixDQUFMLEVBQXlDO0FBQ3ZDO0FBQ0Q7O0FBQ0QsZ0JBQU00RCxnQkFBZ0IsR0FBR25FLGlCQUFLQyxJQUFMLDBCQUFVRixZQUFWLDRCQUF5QmtFLGlCQUF6QixHQUF6Qjs7QUFDQSxnQkFBSTdFLEdBQUosRUFBUztBQUNQcUIsY0FBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRSxnQkFBN0I7QUFDRDs7QUFDRCxnQkFBTUMsWUFBb0IsR0FBR3pELG9CQUFHQyxZQUFILENBQWdCdUQsZ0JBQWhCLEVBQWtDO0FBQzdEdEQsY0FBQUEsUUFBUSxFQUFFO0FBRG1ELGFBQWxDLENBQTdCOztBQUdBLGdCQUFNd0QsUUFBUSxHQUFHQyw4QkFBMkJDLFVBQTNCLENBQXNDSCxZQUF0QyxDQUFqQjs7QUFDQSxnQkFBSVQsYUFBYSxDQUFDVSxRQUFRLENBQUNwRCxHQUFWLENBQWIsS0FBZ0NDLFNBQXBDLEVBQStDO0FBQzdDeUMsY0FBQUEsYUFBYSxDQUFDVSxRQUFRLENBQUNwRCxHQUFWLENBQWIsR0FBOEJvRCxRQUE5QjtBQUNEO0FBQ0Y7QUFoQ2lEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEscURBa0NuQiwyQkFBUXRFLFlBQVIsRUFBb0IsQ0FBQyxVQUFELENBQXBCLENBbENtQjtBQUFBOztBQUFBO0FBa0NsRCxvRUFBa0U7QUFBQSxnQkFBdkR5RSxnQkFBdUQ7QUFDaEUsZ0JBQU1DLGVBQWUsR0FBR0QsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDbEUsTUFBakIsR0FBMEIsQ0FBM0IsQ0FBeEM7O0FBQ0EsZ0JBQUksQ0FBQ21FLGVBQWUsQ0FBQ2xFLFFBQWhCLENBQXlCLE9BQXpCLENBQUwsRUFBd0M7QUFDdEM7QUFDRDs7QUFDRCxnQkFBTW1FLGVBQWUsR0FBRzFFLGlCQUFLQyxJQUFMLDBCQUFVRixZQUFWLDRCQUF5QnlFLGdCQUF6QixHQUF4Qjs7QUFDQSxnQkFBSXBGLEdBQUosRUFBUztBQUNQcUIsY0FBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkJzRixlQUE3QjtBQUNEOztBQUNELGdCQUFNQyxXQUFtQixHQUFHaEUsb0JBQUdDLFlBQUgsQ0FBZ0I4RCxlQUFoQixFQUFpQztBQUMzRDdELGNBQUFBLFFBQVEsRUFBRTtBQURpRCxhQUFqQyxDQUE1Qjs7QUFHQSxnQkFBTStELE9BQU8sR0FDWE4sOEJBQTJCTyxzQkFBM0IsQ0FBa0RGLFdBQWxELENBREY7O0FBRUEsZ0JBQU1HLFlBQVksR0FBR0YsT0FBTyxDQUFDRSxZQUE3Qjs7QUFDQSxnQkFDRUEsWUFBWSxDQUFDQyxXQUFiLElBQ0FuQixpQ0FBaUMsQ0FBQ2tCLFlBQVksQ0FBQ0MsV0FBZCxDQUFqQyxLQUNFN0QsU0FISixFQUlFO0FBQ0EwQyxjQUFBQSxpQ0FBaUMsQ0FBQ2tCLFlBQVksQ0FBQ0MsV0FBZCxDQUFqQyxHQUE4REgsT0FBOUQ7QUFDRDs7QUFDRCxnQkFDRUUsWUFBWSxDQUFDRSxXQUFiLElBQ0FuQixpQ0FBaUMsQ0FBQ2lCLFlBQVksQ0FBQ0UsV0FBZCxDQUFqQyxLQUNFOUQsU0FISixFQUlFO0FBQ0EyQyxjQUFBQSxpQ0FBaUMsQ0FBQ2lCLFlBQVksQ0FBQ0UsV0FBZCxDQUFqQyxHQUE4REosT0FBOUQ7QUFDRDs7QUFDRCxnQkFBSWQseUJBQXlCLENBQUNjLE9BQU8sQ0FBQzNELEdBQVQsQ0FBekIsS0FBMkNDLFNBQS9DLEVBQTBEO0FBQ3hENEMsY0FBQUEseUJBQXlCLENBQUNjLE9BQU8sQ0FBQzNELEdBQVQsQ0FBekIsR0FBeUMyRCxPQUF6QztBQUNEO0FBQ0Y7QUFsRWlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtRW5EO0FBcEV3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUUxRDs7QUFFRCxNQUFJSyxVQUFvQyxHQUFHLEVBQTNDOztBQUNBLE1BQUkvRixlQUFlLEdBQUdLLDBCQUFnQjJGLE1BQXRDLEVBQThDO0FBQzVDO0FBQ0UsVUFBTUMsWUFBb0IsR0FBR25GLGlCQUFLQyxJQUFMLENBQzNCaEIsT0FEMkIsNEJBR3pCO0FBQ0FFLE1BQUFBLFdBQVcsS0FBS1UsMEJBQVlDLEdBQTVCLEdBQWtDRCwwQkFBWXVGLE1BQTlDLEdBQXVEakcsV0FKOUIsR0FNM0IsY0FOMkIsQ0FBN0I7O0FBUUEsVUFBSXdCLG9CQUFHMEUsVUFBSCxDQUFjRixZQUFkLENBQUosRUFBaUM7QUFDL0IsWUFBSS9GLEdBQUosRUFBUztBQUNQcUIsVUFBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRixZQUE3QjtBQUNEOztBQUNELFlBQU1HLElBQVksR0FBRzNFLG9CQUFHQyxZQUFILENBQWdCdUUsWUFBaEIsRUFBOEI7QUFBRXRFLFVBQUFBLFFBQVEsRUFBRTtBQUFaLFNBQTlCLENBQXJCOztBQUNBMEUsUUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWNQLFVBQWQsRUFBMEJRLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixJQUFYLENBQTFCO0FBQ0QsT0FORCxNQU1PLElBQUlsRyxHQUFKLEVBQVM7QUFDZHFCLFFBQUFBLE9BQU8sQ0FBQ3JCLEdBQVIsa0NBQXNDK0YsWUFBdEM7QUFDRDtBQUNGO0FBRUQ7QUFDRSxVQUFNQSxhQUFvQixHQUFHbkYsaUJBQUtDLElBQUwsQ0FDM0JoQixPQUQyQixFQUUzQixrQkFGMkIsRUFHM0IsZ0JBSDJCLENBQTdCOztBQUtBLFVBQUkwQixvQkFBRzBFLFVBQUgsQ0FBY0YsYUFBZCxDQUFKLEVBQWlDO0FBQy9CLFlBQUkvRixHQUFKLEVBQVM7QUFDUHFCLFVBQUFBLE9BQU8sQ0FBQ3JCLEdBQVIseUJBQTZCK0YsYUFBN0I7QUFDRDs7QUFDRCxZQUFNRyxLQUFZLEdBQUczRSxvQkFBR0MsWUFBSCxDQUFnQnVFLGFBQWhCLEVBQThCO0FBQUV0RSxVQUFBQSxRQUFRLEVBQUU7QUFBWixTQUE5QixDQUFyQjs7QUFDQTBFLFFBQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjUCxVQUFkLEVBQTBCUSxJQUFJLENBQUNDLEtBQUwsQ0FBV0osS0FBWCxDQUExQjtBQUNELE9BTkQsTUFNTyxJQUFJbEcsR0FBSixFQUFTO0FBQ2RxQixRQUFBQSxPQUFPLENBQUNyQixHQUFSLGtDQUFzQytGLGFBQXRDO0FBQ0Q7QUFDRjtBQUNGOztBQUVELE1BQU1RLFlBQXdDLEdBQUcsRUFBakQ7O0FBQ0EsTUFBSXpHLGVBQWUsR0FBR0ssMEJBQWdCcUcsUUFBdEMsRUFBZ0Q7QUFBQSxpREFDeEJuRyxtQkFBU29HLFFBRGU7QUFBQTs7QUFBQTtBQUM5QyxnRUFBeUM7QUFBQSxZQUE5QmxHLFNBQThCOztBQUN2QyxZQUFJQSxTQUFPLENBQUNDLFlBQVosRUFBMEI7QUFDeEI7QUFDRDs7QUFDRCxZQUNFVCxXQUFXLEtBQUtVLDBCQUFZQyxHQUE1QixJQUNBSCxTQUFPLENBQUNSLFdBQVIsS0FBd0JVLDBCQUFZQyxHQURwQyxJQUVBWCxXQUFXLEtBQUtRLFNBQU8sQ0FBQ1IsV0FIMUIsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBTVksWUFBVSxHQUFHQyxpQkFBS0MsSUFBTCxDQUNqQmhCLE9BRGlCLEVBRWpCVSxTQUFPLENBQUNPLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFNBQXpCLEVBQW9DLFVBQXBDLENBRmlCLENBQW5COztBQVh1QyxxREFnQlIsMkJBQVFKLFlBQVIsQ0FoQlE7QUFBQTs7QUFBQTtBQWdCdkMsb0VBQW9EO0FBQUEsZ0JBQXpDK0YsZ0JBQXlDO0FBQ2xELGdCQUFNQyxlQUFlLEdBQUdELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQ3hGLE1BQWpCLEdBQTBCLENBQTNCLENBQXhDOztBQUNBLGdCQUFJLENBQUN5RixlQUFlLENBQUN4RixRQUFoQixDQUF5QixPQUF6QixDQUFMLEVBQXdDO0FBQ3RDO0FBQ0Q7O0FBQ0QsZ0JBQU15RixlQUFlLEdBQUdoRyxpQkFBS0MsSUFBTCwwQkFBVUYsWUFBViw0QkFBeUIrRixnQkFBekIsR0FBeEI7O0FBQ0EsZ0JBQUkxRyxHQUFKLEVBQVM7QUFDUHFCLGNBQUFBLE9BQU8sQ0FBQ3JCLEdBQVIseUJBQTZCNEcsZUFBN0I7QUFDRDs7QUFDRCxnQkFBTUMsV0FBbUIsR0FBR3RGLG9CQUFHQyxZQUFILENBQWdCb0YsZUFBaEIsRUFBaUM7QUFDM0RuRixjQUFBQSxRQUFRLEVBQUU7QUFEaUQsYUFBakMsQ0FBNUI7O0FBR0EsZ0JBQU1xRixPQUFPLEdBQUdDLGtCQUFnQkMsU0FBaEIsQ0FBMEJILFdBQTFCLENBQWhCOztBQUNBLGdCQUFJTixZQUFZLENBQUNPLE9BQU8sQ0FBQ2pGLEdBQVQsQ0FBWixLQUE4QkMsU0FBbEMsRUFBNkM7QUFDM0N5RSxjQUFBQSxZQUFZLENBQUNPLE9BQU8sQ0FBQ2pGLEdBQVQsQ0FBWixHQUE0QmlGLE9BQTVCO0FBQ0Q7QUFDRjtBQWhDc0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDeEM7QUFsQzZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQy9DOztBQUVELFNBQU87QUFDTDdHLElBQUFBLFdBQVcsRUFBWEEsV0FESztBQUVMNEQsSUFBQUEsZUFBZSxFQUFmQSxlQUZLO0FBR0xVLElBQUFBLGFBQWEsRUFBYkEsYUFISztBQUlMQyxJQUFBQSxpQ0FBaUMsRUFBakNBLGlDQUpLO0FBS0xDLElBQUFBLGlDQUFpQyxFQUFqQ0EsaUNBTEs7QUFNTEMsSUFBQUEseUJBQXlCLEVBQXpCQSx5QkFOSztBQU9MeEUsSUFBQUEsV0FBVyxFQUFYQSxXQVBLO0FBUUwyRixJQUFBQSxVQUFVLEVBQVZBLFVBUks7QUFTTHhELElBQUFBLFlBQVksRUFBWkEsWUFUSztBQVVMQyxJQUFBQSxhQUFhLEVBQWJBLGFBVks7QUFXTEMsSUFBQUEsb0JBQW9CLEVBQXBCQSxvQkFYSztBQVlMZ0UsSUFBQUEsWUFBWSxFQUFaQTtBQVpLLEdBQVA7QUFjRDtBQUVEOzs7QUFDTyxTQUFTVSw2QkFBVCxDQUNMcEgsT0FESyxFQUVMQyxlQUZLLEVBR0xDLFdBSEssRUFLQztBQUFBLGtGQURZLEVBQ1o7QUFBQSx3QkFESkMsR0FDSTtBQUFBLE1BREpBLEdBQ0ksMEJBREUsS0FDRjs7QUFDTixNQUFNQyxXQUFzQyxHQUFHLEVBQS9DO0FBQ0EsTUFBTUMsV0FBc0MsR0FBRyxFQUEvQzs7QUFDQSxNQUFJSixlQUFlLEdBQUdLLDBCQUFnQkMsZ0JBQXRDLEVBQXdEO0FBQUEsaURBQ2hDQyxtQkFBU0MsZ0JBRHVCO0FBQUE7O0FBQUE7QUFDdEQsZ0VBQWlEO0FBQUEsWUFBdENDLE9BQXNDOztBQUMvQyxZQUFJQSxPQUFPLENBQUNDLFlBQVosRUFBMEI7QUFDeEI7QUFDRDs7QUFDRCxZQUNFVCxXQUFXLEtBQUtVLDBCQUFZQyxHQUE1QixJQUNBSCxPQUFPLENBQUNSLFdBQVIsS0FBd0JVLDBCQUFZQyxHQURwQyxJQUVBWCxXQUFXLEtBQUtRLE9BQU8sQ0FBQ1IsV0FIMUIsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBTWdHLFlBQW9CLEdBQUduRixpQkFBS0MsSUFBTCxDQUMzQmhCLE9BRDJCLEVBRTNCVSxPQUFPLENBQUNPLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFNBQXpCLEVBQW9DLGVBQXBDLENBRjJCLENBQTdCOztBQUlBLFlBQUlmLEdBQUosRUFBUztBQUNQcUIsVUFBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRixZQUE3QjtBQUNEOztBQUNELFlBQU1HLElBQVksR0FBRzNFLG9CQUFHQyxZQUFILENBQWdCdUUsWUFBaEIsRUFBOEI7QUFBRXRFLFVBQUFBLFFBQVEsRUFBRTtBQUFaLFNBQTlCLENBQXJCOztBQUNBLFlBQU1uQixnQkFBZ0IsR0FBR3FCLDRCQUF3QnVGLGtCQUF4QixDQUEyQ2hCLElBQTNDLENBQXpCOztBQW5CK0MscURBb0IxQjVGLGdCQUFnQixDQUFDNkcsT0FwQlM7QUFBQTs7QUFBQTtBQW9CL0Msb0VBQStDO0FBQUEsZ0JBQXBDekYsTUFBb0M7O0FBQzdDO0FBQ0EsZ0JBQUl6QixXQUFXLENBQUN5QixNQUFNLENBQUNHLEdBQVIsQ0FBWCxLQUE0QkMsU0FBaEMsRUFBMkM7QUFDekM3QixjQUFBQSxXQUFXLENBQUN5QixNQUFNLENBQUNHLEdBQVIsQ0FBWCxHQUEwQkgsTUFBMUI7QUFDRDtBQUNGO0FBekI4QztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLHFEQTBCMUJwQixnQkFBZ0IsQ0FBQzhHLE9BMUJTO0FBQUE7O0FBQUE7QUEwQi9DLG9FQUErQztBQUFBLGdCQUFwQ2pGLE1BQW9DOztBQUM3QztBQUNBLGdCQUFJakMsV0FBVyxDQUFDaUMsTUFBTSxDQUFDTixHQUFSLENBQVgsS0FBNEJDLFNBQWhDLEVBQTJDO0FBQ3pDNUIsY0FBQUEsV0FBVyxDQUFDaUMsTUFBTSxDQUFDTixHQUFSLENBQVgsR0FBMEJNLE1BQTFCO0FBQ0Q7QUFDRjtBQS9COEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdDaEQ7QUFqQ3FEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQ3ZEOztBQUVELE1BQU1FLFlBQXdDLEdBQUcsRUFBakQ7QUFDQSxNQUFNQyxhQUEyQyxHQUFHLEVBQXBEO0FBQ0EsTUFBTUMsb0JBQXlELEdBQUcsRUFBbEU7O0FBQ0EsTUFBSXpDLGVBQWUsR0FBR0ssMEJBQWdCcUMsT0FBdEMsRUFBK0M7QUFBQSxpREFDdkJuQyxtQkFBU29DLE9BRGM7QUFBQTs7QUFBQTtBQUM3QyxnRUFBd0M7QUFBQSxZQUE3QmxDLFNBQTZCOztBQUN0QyxZQUFJQSxTQUFPLENBQUNDLFlBQVosRUFBMEI7QUFDeEI7QUFDRDs7QUFDRCxZQUNFVCxXQUFXLEtBQUtVLDBCQUFZQyxHQUE1QixJQUNBSCxTQUFPLENBQUNSLFdBQVIsS0FBd0JVLDBCQUFZQyxHQURwQyxJQUVBWCxXQUFXLEtBQUtRLFNBQU8sQ0FBQ1IsV0FIMUIsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBTWdHLGNBQW9CLEdBQUduRixpQkFBS0MsSUFBTCxDQUMzQmhCLE9BRDJCLEVBRTNCVSxTQUFPLENBQUNPLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFNBQXpCLEVBQW9DLGVBQXBDLENBRjJCLENBQTdCOztBQUlBLFlBQUlmLEdBQUosRUFBUztBQUNQcUIsVUFBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRixjQUE3QjtBQUNEOztBQUNELFlBQU1HLE1BQVksR0FBRzNFLG9CQUFHQyxZQUFILENBQWdCdUUsY0FBaEIsRUFBOEI7QUFBRXRFLFVBQUFBLFFBQVEsRUFBRTtBQUFaLFNBQTlCLENBQXJCOztBQUNBLFlBQU1nQixPQUFPLEdBQUdNLGlCQUFlc0UsU0FBZixDQUF5Qm5CLE1BQXpCLENBQWhCOztBQW5Cc0MscURBb0JoQnpELE9BQU8sQ0FBQzZFLFFBcEJRO0FBQUE7O0FBQUE7QUFvQnRDLG9FQUF3QztBQUFBLGdCQUE3QnhFLE9BQTZCOztBQUN0QyxnQkFBSVQsWUFBWSxDQUFDUyxPQUFPLENBQUNqQixHQUFULENBQVosS0FBOEJDLFNBQWxDLEVBQTZDO0FBQzNDTyxjQUFBQSxZQUFZLENBQUNTLE9BQU8sQ0FBQ2pCLEdBQVQsQ0FBWixHQUE0QmlCLE9BQTVCO0FBQ0Q7O0FBRUQsZ0JBQU1HLEtBQUcsR0FBR0gsT0FBTyxDQUFDSSxjQUFSLENBQXVCQyxXQUF2QixHQUFxQ0MsS0FBckMsQ0FBMkMsR0FBM0MsRUFBZ0QsQ0FBaEQsQ0FBWjtBQUNBLGdCQUFJQyxhQUFhLEdBQUdmLGFBQWEsQ0FBQ1csS0FBRCxDQUFqQzs7QUFDQSxnQkFBSUksYUFBYSxLQUFLdkIsU0FBdEIsRUFBaUM7QUFDL0J1QixjQUFBQSxhQUFhLEdBQUdmLGFBQWEsQ0FBQ1csS0FBRCxDQUFiLEdBQXFCLEVBQXJDO0FBQ0Q7O0FBQ0RJLFlBQUFBLGFBQWEsQ0FBQ0MsSUFBZCxDQUFtQlIsT0FBbkI7QUFFQSxnQkFBTVMsR0FBRyxHQUFHVCxPQUFPLENBQUNTLEdBQXBCOztBQUNBLGdCQUFJQSxHQUFHLEtBQUt6QixTQUFaLEVBQXVCO0FBQUEsMkRBQ0V5QixHQUFHLENBQUNDLFNBQUosSUFBaUIsRUFEbkI7QUFBQTs7QUFBQTtBQUNyQiwwRUFBNEM7QUFBQSxzQkFBakNDLFFBQWlDOztBQUFBLCtEQUNQQSxRQUFRLENBQUNDLHVCQUFULElBQ2pDLEVBRndDO0FBQUE7O0FBQUE7QUFDMUMsOEVBQ007QUFBQSwwQkFES0Msb0JBQ0w7QUFDSiwwQkFBSUMsb0JBQW9CLEdBQ3RCckIsb0JBQW9CLENBQUNvQixvQkFBRCxDQUR0Qjs7QUFFQSwwQkFBSUMsb0JBQW9CLEtBQUs5QixTQUE3QixFQUF3QztBQUN0QzhCLHdCQUFBQSxvQkFBb0IsR0FBR3JCLG9CQUFvQixDQUN6Q29CLG9CQUR5QyxDQUFwQixHQUVuQixFQUZKO0FBR0Q7O0FBQ0RDLHNCQUFBQSxvQkFBb0IsQ0FBQ04sSUFBckIsQ0FBMEJSLE9BQTFCO0FBQ0Q7QUFYeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVkzQztBQWJvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY3RCO0FBQ0Y7QUFoRHFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpRHZDO0FBbEQ0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUQ5Qzs7QUFFRCxNQUFNZSxlQUE4QyxHQUFHLEVBQXZEOztBQUNBLE1BQUkvRCxlQUFlLEdBQUdLLDBCQUFnQjJELFdBQXRDLEVBQW1EO0FBQUEsaURBQzNCekQsbUJBQVMwRCxXQURrQjtBQUFBOztBQUFBO0FBQ2pELGdFQUE0QztBQUFBLFlBQWpDeEQsU0FBaUM7O0FBQzFDLFlBQUlBLFNBQU8sQ0FBQ0MsWUFBWixFQUEwQjtBQUN4QjtBQUNEOztBQUNELFlBQ0VULFdBQVcsS0FBS1UsMEJBQVlDLEdBQTVCLElBQ0FILFNBQU8sQ0FBQ1IsV0FBUixLQUF3QlUsMEJBQVlDLEdBRHBDLElBRUFYLFdBQVcsS0FBS1EsU0FBTyxDQUFDUixXQUgxQixFQUlFO0FBQ0E7QUFDRDs7QUFDRCxZQUFNZ0csY0FBb0IsR0FBR25GLGlCQUFLQyxJQUFMLENBQzNCaEIsT0FEMkIsRUFFM0JVLFNBQU8sQ0FBQ08sUUFBUixDQUFpQkMsT0FBakIsQ0FBeUIsU0FBekIsRUFBb0MsZUFBcEMsQ0FGMkIsQ0FBN0I7O0FBSUEsWUFBSWYsR0FBSixFQUFTO0FBQ1BxQixVQUFBQSxPQUFPLENBQUNyQixHQUFSLHlCQUE2QitGLGNBQTdCO0FBQ0Q7O0FBQ0QsWUFBTUcsTUFBWSxHQUFHM0Usb0JBQUdDLFlBQUgsQ0FBZ0J1RSxjQUFoQixFQUE4QjtBQUFFdEUsVUFBQUEsUUFBUSxFQUFFO0FBQVosU0FBOUIsQ0FBckI7O0FBQ0EsWUFBTXNDLFdBQVcsR0FBR00scUJBQW1Ca0QsYUFBbkIsQ0FBaUNyQixNQUFqQyxDQUFwQjs7QUFuQjBDLHFEQW9CWm5DLFdBQVcsQ0FBQ3lELGlCQXBCQTtBQUFBOztBQUFBO0FBb0IxQyxvRUFBNkQ7QUFBQSxnQkFBbERDLGVBQWtEOztBQUFBLHlEQUNsQ0EsZUFBZSxDQUFDMUQsV0FEa0I7QUFBQTs7QUFBQTtBQUMzRCx3RUFBc0Q7QUFBQSxvQkFBM0NLLFVBQTJDOztBQUNwRCxvQkFBSVAsZUFBZSxDQUFDTyxVQUFVLENBQUN2QyxHQUFaLENBQWYsS0FBb0NDLFNBQXhDLEVBQW1EO0FBQ2pEK0Isa0JBQUFBLGVBQWUsQ0FBQ08sVUFBVSxDQUFDdkMsR0FBWixDQUFmLEdBQWtDdUMsVUFBbEM7QUFDRDtBQUNGO0FBTDBEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNNUQ7QUExQnlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyQjNDO0FBNUJnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkJsRDs7QUFFRCxNQUFNRyxhQUEwQyxHQUFHLEVBQW5EO0FBQ0EsTUFBTUMsaUNBRUwsR0FBRyxFQUZKO0FBR0EsTUFBTUMsaUNBRUwsR0FBRyxFQUZKO0FBR0EsTUFBTUMseUJBQWtFLEdBQUcsRUFBM0U7O0FBQ0EsTUFBSTVFLGVBQWUsR0FBR0ssMEJBQWdCd0UsbUJBQXRDLEVBQTJEO0FBQUEsaURBQ25DdEUsbUJBQVN1RSxtQkFEMEI7QUFBQTs7QUFBQTtBQUN6RCxnRUFBb0Q7QUFBQSxZQUF6Q3JFLFNBQXlDOztBQUNsRCxZQUFJQSxTQUFPLENBQUNDLFlBQVosRUFBMEI7QUFDeEI7QUFDRDs7QUFDRCxZQUNFVCxXQUFXLEtBQUtVLDBCQUFZQyxHQUE1QixJQUNBSCxTQUFPLENBQUNSLFdBQVIsS0FBd0JVLDBCQUFZQyxHQURwQyxJQUVBWCxXQUFXLEtBQUtRLFNBQU8sQ0FBQ1IsV0FIMUIsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsWUFBTWdHLGNBQW9CLEdBQUduRixpQkFBS0MsSUFBTCxDQUMzQmhCLE9BRDJCLEVBRTNCVSxTQUFPLENBQUNPLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFNBQXpCLEVBQW9DLGVBQXBDLENBRjJCLENBQTdCOztBQUlBLFlBQUlmLEdBQUosRUFBUztBQUNQcUIsVUFBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRixjQUE3QjtBQUNEOztBQUNELFlBQU1HLE1BQVksR0FBRzNFLG9CQUFHQyxZQUFILENBQWdCdUUsY0FBaEIsRUFBOEI7QUFBRXRFLFVBQUFBLFFBQVEsRUFBRTtBQUFaLFNBQTlCLENBQXJCOztBQUNBLFlBQU1tRCxtQkFBbUIsR0FDdkJNLDhCQUEyQndDLHFCQUEzQixDQUFpRHhCLE1BQWpELENBREY7O0FBbkJrRCxxREFxQjNCdEIsbUJBQW1CLENBQUM0QyxpQkFyQk87QUFBQTs7QUFBQTtBQXFCbEQsb0VBQThEO0FBQUEsZ0JBQW5EdkMsUUFBbUQ7O0FBQzVELGdCQUFJVixhQUFhLENBQUNVLFFBQVEsQ0FBQ3BELEdBQVYsQ0FBYixLQUFnQ0MsU0FBcEMsRUFBK0M7QUFDN0N5QyxjQUFBQSxhQUFhLENBQUNVLFFBQVEsQ0FBQ3BELEdBQVYsQ0FBYixHQUE4Qm9ELFFBQTlCO0FBQ0Q7QUFDRjtBQXpCaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxxREEwQjVCTCxtQkFBbUIsQ0FBQytDLHNCQTFCUTtBQUFBOztBQUFBO0FBMEJsRCxvRUFBa0U7QUFBQSxnQkFBdkRuQyxPQUF1RDtBQUNoRSxnQkFBTUUsWUFBWSxHQUFHRixPQUFPLENBQUNFLFlBQTdCOztBQUNBLGdCQUNFQSxZQUFZLENBQUNDLFdBQWIsSUFDQW5CLGlDQUFpQyxDQUFDa0IsWUFBWSxDQUFDQyxXQUFkLENBQWpDLEtBQ0U3RCxTQUhKLEVBSUU7QUFDQTBDLGNBQUFBLGlDQUFpQyxDQUFDa0IsWUFBWSxDQUFDQyxXQUFkLENBQWpDLEdBQThESCxPQUE5RDtBQUNEOztBQUNELGdCQUNFRSxZQUFZLENBQUNFLFdBQWIsSUFDQW5CLGlDQUFpQyxDQUFDaUIsWUFBWSxDQUFDRSxXQUFkLENBQWpDLEtBQ0U5RCxTQUhKLEVBSUU7QUFDQTJDLGNBQUFBLGlDQUFpQyxDQUFDaUIsWUFBWSxDQUFDRSxXQUFkLENBQWpDLEdBQThESixPQUE5RDtBQUNEOztBQUNELGdCQUFJZCx5QkFBeUIsQ0FBQ2MsT0FBTyxDQUFDM0QsR0FBVCxDQUF6QixLQUEyQ0MsU0FBL0MsRUFBMEQ7QUFDeEQ0QyxjQUFBQSx5QkFBeUIsQ0FBQ2MsT0FBTyxDQUFDM0QsR0FBVCxDQUF6QixHQUF5QzJELE9BQXpDO0FBQ0Q7QUFDRjtBQTdDaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThDbkQ7QUEvQ3dEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRDFEOztBQUVELE1BQU1LLFVBQW9DLEdBQUcsRUFBN0M7O0FBQ0EsTUFBSS9GLGVBQWUsR0FBR0ssMEJBQWdCMkYsTUFBdEMsRUFBOEM7QUFDNUMsUUFBTUQsV0FBVSxHQUFHLEVBQW5CO0FBRUE7QUFDRSxVQUFNRSxjQUFvQixHQUFHbkYsaUJBQUtDLElBQUwsQ0FDM0JoQixPQUQyQiw0QkFHekI7QUFDQUUsTUFBQUEsV0FBVyxLQUFLVSwwQkFBWUMsR0FBNUIsR0FBa0NELDBCQUFZdUYsTUFBOUMsR0FBdURqRyxXQUo5QixHQU0zQixjQU4yQixDQUE3Qjs7QUFRQSxVQUFJd0Isb0JBQUcwRSxVQUFILENBQWNGLGNBQWQsQ0FBSixFQUFpQztBQUMvQixZQUFJL0YsR0FBSixFQUFTO0FBQ1BxQixVQUFBQSxPQUFPLENBQUNyQixHQUFSLHlCQUE2QitGLGNBQTdCO0FBQ0Q7O0FBQ0QsWUFBTUcsTUFBWSxHQUFHM0Usb0JBQUdDLFlBQUgsQ0FBZ0J1RSxjQUFoQixFQUE4QjtBQUFFdEUsVUFBQUEsUUFBUSxFQUFFO0FBQVosU0FBOUIsQ0FBckI7O0FBQ0EwRSxRQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBY1AsV0FBZCxFQUEwQlEsSUFBSSxDQUFDQyxLQUFMLENBQVdKLE1BQVgsQ0FBMUI7QUFDRCxPQU5ELE1BTU8sSUFBSWxHLEdBQUosRUFBUztBQUNkcUIsUUFBQUEsT0FBTyxDQUFDckIsR0FBUixrQ0FBc0MrRixjQUF0QztBQUNEO0FBQ0Y7QUFFRDtBQUNFLFVBQU1BLGNBQW9CLEdBQUduRixpQkFBS0MsSUFBTCxDQUMzQmhCLE9BRDJCLEVBRTNCLGtCQUYyQixFQUczQixnQkFIMkIsQ0FBN0I7O0FBS0EsVUFBSTBCLG9CQUFHMEUsVUFBSCxDQUFjRixjQUFkLENBQUosRUFBaUM7QUFDL0IsWUFBSS9GLEdBQUosRUFBUztBQUNQcUIsVUFBQUEsT0FBTyxDQUFDckIsR0FBUix5QkFBNkIrRixjQUE3QjtBQUNEOztBQUNELFlBQU1HLE1BQVksR0FBRzNFLG9CQUFHQyxZQUFILENBQWdCdUUsY0FBaEIsRUFBOEI7QUFBRXRFLFVBQUFBLFFBQVEsRUFBRTtBQUFaLFNBQTlCLENBQXJCOztBQUNBMEUsUUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWNQLFdBQWQsRUFBMEJRLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixNQUFYLENBQTFCO0FBQ0QsT0FORCxNQU1PLElBQUlsRyxHQUFKLEVBQVM7QUFDZHFCLFFBQUFBLE9BQU8sQ0FBQ3JCLEdBQVIsa0NBQXNDK0YsY0FBdEM7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsTUFBTVEsWUFBd0MsR0FBRyxFQUFqRDs7QUFDQSxNQUFJekcsZUFBZSxHQUFHSywwQkFBZ0JxRyxRQUF0QyxFQUFnRDtBQUFBLGlEQUN4Qm5HLG1CQUFTb0csUUFEZTtBQUFBOztBQUFBO0FBQzlDLGdFQUF5QztBQUFBLFlBQTlCbEcsU0FBOEI7O0FBQ3ZDLFlBQUlBLFNBQU8sQ0FBQ0MsWUFBWixFQUEwQjtBQUN4QjtBQUNEOztBQUNELFlBQ0VULFdBQVcsS0FBS1UsMEJBQVlDLEdBQTVCLElBQ0FILFNBQU8sQ0FBQ1IsV0FBUixLQUF3QlUsMEJBQVlDLEdBRHBDLElBRUFYLFdBQVcsS0FBS1EsU0FBTyxDQUFDUixXQUgxQixFQUlFO0FBQ0E7QUFDRDs7QUFDRCxZQUFNZ0csY0FBb0IsR0FBR25GLGlCQUFLQyxJQUFMLENBQzNCaEIsT0FEMkIsRUFFM0JVLFNBQU8sQ0FBQ08sUUFBUixDQUFpQkMsT0FBakIsQ0FBeUIsU0FBekIsRUFBb0MsZUFBcEMsQ0FGMkIsQ0FBN0I7O0FBSUEsWUFBSWYsR0FBSixFQUFTO0FBQ1BxQixVQUFBQSxPQUFPLENBQUNyQixHQUFSLHlCQUE2QitGLGNBQTdCO0FBQ0Q7O0FBQ0QsWUFBTUcsTUFBWSxHQUFHM0Usb0JBQUdDLFlBQUgsQ0FBZ0J1RSxjQUFoQixFQUE4QjtBQUFFdEUsVUFBQUEsUUFBUSxFQUFFO0FBQVosU0FBOUIsQ0FBckI7O0FBQ0EsWUFBTWdGLFFBQVEsR0FBR00sa0JBQWdCYSxVQUFoQixDQUEyQjFCLE1BQTNCLENBQWpCOztBQW5CdUMscURBb0JqQk8sUUFBUSxDQUFDQSxRQXBCUTtBQUFBOztBQUFBO0FBb0J2QyxvRUFBeUM7QUFBQSxnQkFBOUJLLE9BQThCOztBQUN2QyxnQkFBSVAsWUFBWSxDQUFDTyxPQUFPLENBQUNqRixHQUFULENBQVosS0FBOEJDLFNBQWxDLEVBQTZDO0FBQzNDeUUsY0FBQUEsWUFBWSxDQUFDTyxPQUFPLENBQUNqRixHQUFULENBQVosR0FBNEJpRixPQUE1QjtBQUNEO0FBQ0Y7QUF4QnNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QnhDO0FBMUI2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkIvQzs7QUFFRCxTQUFPO0FBQ0w3RyxJQUFBQSxXQUFXLEVBQVhBLFdBREs7QUFFTDRELElBQUFBLGVBQWUsRUFBZkEsZUFGSztBQUdMVSxJQUFBQSxhQUFhLEVBQWJBLGFBSEs7QUFJTEMsSUFBQUEsaUNBQWlDLEVBQWpDQSxpQ0FKSztBQUtMQyxJQUFBQSxpQ0FBaUMsRUFBakNBLGlDQUxLO0FBTUxDLElBQUFBLHlCQUF5QixFQUF6QkEseUJBTks7QUFPTHhFLElBQUFBLFdBQVcsRUFBWEEsV0FQSztBQVFMMkYsSUFBQUEsVUFBVSxFQUFWQSxVQVJLO0FBU0x4RCxJQUFBQSxZQUFZLEVBQVpBLFlBVEs7QUFVTEMsSUFBQUEsYUFBYSxFQUFiQSxhQVZLO0FBV0xDLElBQUFBLG9CQUFvQixFQUFwQkEsb0JBWEs7QUFZTGdFLElBQUFBLFlBQVksRUFBWkE7QUFaSyxHQUFQO0FBY0Q7O0FBRU0sU0FBU3NCLG1CQUFULENBQTZCQyxZQUE3QixFQUFtRGpHLEdBQW5ELEVBQXdFO0FBQzdFLE1BQU1rRyxLQUFLLEdBQUd2SSxnQkFBZ0IsQ0FBQ3dJLElBQWpCLENBQXNCbkcsR0FBdEIsQ0FBZDs7QUFDQW9HLHFCQUFPQyxjQUFQLENBQ0VILEtBREYsRUFFRSxJQUZGLG1EQUc0Q2xHLEdBSDVDOztBQUtBLE1BQU1zRyxZQUFZLEdBQUd2SCxpQkFBS0MsSUFBTCxDQUFVaUgsWUFBVixFQUF3QkMsS0FBSyxDQUFFLENBQUYsQ0FBN0IsQ0FBckI7O0FBQ0EsTUFBTUssVUFBVSxHQUFHeEgsaUJBQUtDLElBQUwsQ0FBVXNILFlBQVYsRUFBd0JKLEtBQUssQ0FBRSxDQUFGLENBQTdCLENBQW5COztBQUNBLE1BQU1NLGFBQWEsR0FBR3pILGlCQUFLQyxJQUFMLENBQVV1SCxVQUFWLEVBQXNCTCxLQUFLLENBQUUsQ0FBRixDQUEzQixDQUF0Qjs7QUFDQSxNQUFNTyxjQUFjLEdBQUcxSCxpQkFBS0MsSUFBTCxDQUFVd0gsYUFBVixFQUF5Qk4sS0FBSyxDQUFFLENBQUYsQ0FBOUIsQ0FBdkI7O0FBQ0EsTUFBTVEsT0FBTyxHQUFHM0gsaUJBQUtDLElBQUwsQ0FBVXlILGNBQVYsRUFBMEJQLEtBQUssQ0FBRSxDQUFGLENBQS9CLENBQWhCOztBQUNBLE1BQUlTLE1BQU0sR0FBRyxXQUFXVCxLQUFLLENBQUUsQ0FBRixDQUE3QjtBQUNBUyxFQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjRCxNQUFNLENBQUN0SCxNQUFQLEdBQWdCLENBQTlCLENBQVQ7O0FBQ0EsTUFBTXdILGlCQUFpQixHQUFHOUgsaUJBQUtDLElBQUwsQ0FBVTBILE9BQVYsRUFBbUJDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLENBQWQsRUFBaUIsQ0FBakIsQ0FBbkIsQ0FBMUI7O0FBQ0FsSCxzQkFBR29ILGFBQUgsQ0FBaUJELGlCQUFqQjs7QUFDQSxTQUFPOUgsaUJBQUtDLElBQUwsQ0FBVTZILGlCQUFWLEVBQTZCN0csR0FBN0IsQ0FBUDtBQUNEOztBQUVNLFNBQVMrRywrQkFBVCxDQUNMQyxXQURLLEVBRUxoSCxHQUZLLEVBR0c7QUFDUixNQUFNa0csS0FBSyxHQUFHdEksZUFBZSxDQUFDdUksSUFBaEIsQ0FBcUJuRyxHQUFyQixDQUFkOztBQUNBb0cscUJBQU9DLGNBQVAsQ0FDRUgsS0FERixFQUVFLElBRkYsZ0VBR3lEbEcsR0FIekQ7O0FBS0EsTUFBTXdHLGFBQWEsR0FBR3pILGlCQUFLQyxJQUFMLENBQVVnSSxXQUFWLEVBQXVCZCxLQUFLLENBQUUsQ0FBRixDQUE1QixDQUF0Qjs7QUFDQSxNQUFNTyxjQUFjLEdBQUcxSCxpQkFBS0MsSUFBTCxDQUFVd0gsYUFBVixFQUF5Qk4sS0FBSyxDQUFFLENBQUYsQ0FBOUIsQ0FBdkI7O0FBQ0EsTUFBSVMsTUFBTSxHQUFHLFdBQVdULEtBQUssQ0FBRSxDQUFGLENBQTdCO0FBQ0FTLEVBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDQyxNQUFQLENBQWNELE1BQU0sQ0FBQ3RILE1BQVAsR0FBZ0IsQ0FBOUIsQ0FBVDs7QUFDQSxNQUFNd0gsaUJBQWlCLEdBQUc5SCxpQkFBS0MsSUFBTCxDQUFVeUgsY0FBVixFQUEwQkUsTUFBTSxDQUFDQyxNQUFQLENBQWMsQ0FBZCxFQUFpQixDQUFqQixDQUExQixDQUExQjs7QUFDQWxILHNCQUFHb0gsYUFBSCxDQUFpQkQsaUJBQWpCOztBQUNBLFNBQU85SCxpQkFBS0MsSUFBTCxDQUFVNkgsaUJBQVYsRUFBNkI3RyxHQUE3QixDQUFQO0FBQ0Q7O0FBRU0sU0FBU2lILGtCQUFULENBQTRCQyxXQUE1QixFQUFpRGxILEdBQWpELEVBQXNFO0FBQzNFLE1BQU1rRyxLQUFLLEdBQUdySSxlQUFlLENBQUNzSSxJQUFoQixDQUFxQm5HLEdBQXJCLENBQWQ7O0FBQ0FvRyxxQkFBT0MsY0FBUCxDQUNFSCxLQURGLEVBRUUsSUFGRixrREFHMkNsRyxHQUgzQzs7QUFLQSxNQUFNdUcsVUFBVSxHQUFHeEgsaUJBQUtDLElBQUwsQ0FBVWtJLFdBQVYsRUFBdUJoQixLQUFLLENBQUUsQ0FBRixDQUE1QixDQUFuQjs7QUFDQSxNQUFNTSxhQUFhLEdBQUd6SCxpQkFBS0MsSUFBTCxDQUFVdUgsVUFBVixFQUFzQkwsS0FBSyxDQUFFLENBQUYsQ0FBM0IsQ0FBdEI7O0FBQ0EsTUFBTU8sY0FBYyxHQUFHMUgsaUJBQUtDLElBQUwsQ0FBVXdILGFBQVYsRUFBeUJOLEtBQUssQ0FBRSxDQUFGLENBQTlCLENBQXZCOztBQUNBLE1BQU1pQixVQUFVLEdBQUdwSSxpQkFBS0MsSUFBTCxDQUFVeUgsY0FBVixFQUEwQlAsS0FBSyxDQUFFLENBQUYsQ0FBL0IsQ0FBbkI7O0FBQ0EsTUFBTWtCLEtBQUssR0FBR3JJLGlCQUFLQyxJQUFMLENBQVVtSSxVQUFWLEVBQXNCakIsS0FBSyxDQUFFLENBQUYsQ0FBM0IsQ0FBZDs7QUFDQSxNQUFJUyxNQUFNLEdBQUcsY0FBY1QsS0FBSyxDQUFFLENBQUYsQ0FBaEM7QUFDQVMsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0QsTUFBTSxDQUFDdEgsTUFBUCxHQUFnQixDQUE5QixDQUFUOztBQUNBLE1BQU1nSSxpQkFBaUIsR0FBR3RJLGlCQUFLQyxJQUFMLENBQVVvSSxLQUFWLEVBQWlCVCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQWpCLENBQTFCOztBQUNBLE1BQU1DLGlCQUFpQixHQUFHOUgsaUJBQUtDLElBQUwsQ0FBVXFJLGlCQUFWLEVBQTZCVixNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQTdCLENBQTFCOztBQUNBbEgsc0JBQUdvSCxhQUFILENBQWlCRCxpQkFBakI7O0FBQ0EsU0FBTzlILGlCQUFLQyxJQUFMLENBQVU2SCxpQkFBVixFQUE2QjdHLEdBQTdCLENBQVA7QUFDRDs7QUFFTSxTQUFTc0gsa0JBQVQsQ0FBNEJDLFdBQTVCLEVBQWlEdkgsR0FBakQsRUFBc0U7QUFDM0UsTUFBTWtHLEtBQUssR0FBR3BJLGVBQWUsQ0FBQ3FJLElBQWhCLENBQXFCbkcsR0FBckIsQ0FBZDs7QUFDQW9HLHFCQUFPQyxjQUFQLENBQ0VILEtBREYsRUFFRSxJQUZGLGtEQUcyQ2xHLEdBSDNDOztBQUtBLE1BQU13RyxhQUFhLEdBQUd6SCxpQkFBS0MsSUFBTCxDQUFVdUksV0FBVixFQUF1QnJCLEtBQUssQ0FBRSxDQUFGLENBQTVCLENBQXRCOztBQUNBLE1BQU1PLGNBQWMsR0FBRzFILGlCQUFLQyxJQUFMLENBQVV3SCxhQUFWLEVBQXlCTixLQUFLLENBQUUsQ0FBRixDQUE5QixDQUF2Qjs7QUFDQSxNQUFJUyxNQUFNLEdBQUcsV0FBV1QsS0FBSyxDQUFFLENBQUYsQ0FBN0I7QUFDQVMsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0QsTUFBTSxDQUFDdEgsTUFBUCxHQUFnQixDQUE5QixDQUFUOztBQUNBLE1BQU13SCxpQkFBaUIsR0FBRzlILGlCQUFLQyxJQUFMLENBQVV5SCxjQUFWLEVBQTBCRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQTFCLENBQTFCOztBQUNBbEgsc0JBQUdvSCxhQUFILENBQWlCRCxpQkFBakI7O0FBQ0EsU0FBTzlILGlCQUFLQyxJQUFMLENBQVU2SCxpQkFBVixFQUE2QjdHLEdBQTdCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfFBJT058UE5SRXxQUkpMfFJBUFB8UklORikoQU58U04pKFJcXGQrKVtMU10oXFxkKykoQnxCVEF8QlRDKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuUXVpbnplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLyoqIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlF1aW56ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdfQ==
1138
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sIm5hbWVzIjpbImRvY3VtZW50VWlkUmVnZXgiLCJkb3NzaWVyVWlkUmVnZXgiLCJyZXVuaW9uVWlkUmVnZXgiLCJzY3J1dGluVWlkUmVnZXgiLCJsb2FkQXNzZW1ibGVlRGF0YSIsImRhdGFEaXIiLCJlbmFibGVkRGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImxvZyIsImFjdGV1ckJ5VWlkIiwib3JnYW5lQnlVaWQiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImlnbm9yZUZvcldlYiIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiZGF0YXNldERpciIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJyZXBsYWNlIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1ckZpbGVQYXRoIiwiY29uc29sZSIsImFjdGV1ckpzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJ0b0FjdGV1ciIsInVpZCIsInVuZGVmaW5lZCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwib3JnYW5lIiwidG9PcmdhbmUiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsInJldW5pb24iLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRzT2RqIiwicG9pbnRPZGoiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRGaWxlUGF0aCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudCIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiUXVpbnplIiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJKU09OIiwicGFyc2UiLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5GaWxlUGF0aCIsInNjcnV0aW5Kc29uIiwic2NydXRpbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlTGVnaXNsYXRpZiIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImRvY3VtZW50c0RpciIsIm1hdGNoIiwiZXhlYyIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLElBQU1BLGdCQUFnQixHQUNwQixpSEFERjtBQUVBLElBQU1DLGVBQWUsR0FBRyx3QkFBeEI7QUFDQSxJQUFNQyxlQUFlLEdBQ25CLDJEQURGO0FBRUEsSUFBTUMsZUFBZSxH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QUFHQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0QsTUFBTSxDQUFDdEgsTUFBUCxHQUFnQixDQUE5QixDQUFUOztBQUNBLE1BQU13SCxpQkFBaUIsR0FBRzlILGlCQUFLQyxJQUFMLENBQVV5SCxjQUFWLEVBQTBCRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQTFCLENBQTFCOztBQUNBbEgsc0JBQUdvSCxhQUFILENBQWlCRCxpQkFBakI7O0FBQ0EsU0FBTzlILGlCQUFLQyxJQUFMLENBQVU2SCxpQkFBVixFQUE2QjdHLEdBQTdCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuUXVpbnplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLyoqIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlF1aW56ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdfQ==