@rentman/rm-core 1.0.32 → 1.0.34

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/dist/rm-core.js CHANGED
@@ -6685,7 +6685,7 @@ var RequestColumnExpansionFactory_RequestColumnExpansionFactory = /** @class */
6685
6685
  var main_RmCore = /** @class */ (function () {
6686
6686
  /* tslint:disable:max-line-length*/
6687
6687
  function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
6688
- this.version = '1.0.32';
6688
+ this.version = '1.0.34';
6689
6689
  this.apiFormatter = new ApiFormatter_ApiFormatter();
6690
6690
  this.keyService = new KeyService();
6691
6691
  this.queryService = new QueryService();
@@ -6830,4 +6830,4 @@ function identity(value) {
6830
6830
  /***/ })
6831
6831
  /******/ ]);
6832
6832
  });
6833
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU2V0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0VkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21haW4udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENB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QUUsSUFBSSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25TLENBQUM7SUFDRixhQUFDO0FBQUQsQ0FBQzs7QUFFSztBQUNOLENBQUM7QUFFSyxrQkFBb0IsS0FBSztJQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdKc0I7QUFDSztBQUNIO0FBRUM7QUFDRSIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBkZWZhdWx0cztcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlOnRyaXBsZS1lcXVhbHNcblx0XHRpZiAobmVlZGxlID09IGhheSlcblx0XHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXkgKHNvdXJjZSwgY2FsbGJhY2spIHtcblx0Y29uc3QgZmlsdGVyZWQgPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlNcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xuXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XG5cblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcblxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcblx0cmV0dXJuICEhKG5vZGUgJiZcblx0XHQoXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcblx0XHQpXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XG5cdGlmIChvMSA9PT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcblxuXHRsZXQgbGVuZ3RoO1xuXHRsZXQga2V5O1xuXHRsZXQga2V5U2V0O1xuXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcblxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcblxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcblxuXHRpZiAoZGVzdGluYXRpb24pIHtcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcblx0XHR9XG5cblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XG5cdFx0fVxuXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xuXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcblxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XG5cdFx0fVxuXHR9XG5cblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0NoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKHNvdXJjZSwgZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2hhbGxvd0NvcHlGaWVsZHMgKHNoYWxsb3dTb3VyY2UsIGRlZXBTb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW4uaWRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlLCBmaXJzdCwgc2Vjb25kKSB7XG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcblx0fVxuXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XG5cdH1cblxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xuXHR9XG5cblx0Y2xvbmVEYXRlIChkYXRlKSB7XG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcblx0fVxuXG5cdGlkZW50aXR5IChpbnB1dCkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHR0ZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IHN0cmluZywgcGFyZW50SWQ/OiBudW1iZXIpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xuXHR9XG5cblx0ZGVsZXRlIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykpO1xuXHR9XG5cblx0cmVxdWVzdFNrZWxldG9uIChwYXJhbXM6IGFueSwgcmVxdWVzdENhbmNlbGVyPzogUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XG5cdH1cblxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IHN0cmluZywgcGFyZW50SWQ6IG51bWJlciwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbXMpKTtcblx0fVxuXG5cdGNvbHVtbnMgKGl0ZW1UeXBlOiBzdHJpbmcsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IG9iamVjdCwgY29sdW1uczogb2JqZWN0LCBhbGxMaW5rcz86IGJvb2xlYW4sIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBhbGxMaW5rcywgbGltaXQpKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtVHlwZU1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpZEFycmF5Lmxlbmd0aDsgaSsrKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWRBcnJheVtpXSwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Y29uc3Qga2V5cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xuXHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xuXHRcdH1cblxuXHRcdGlmIChyZXR1cm5LZXlzKVxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXS5sZW5ndGg7IGkrKylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdH1cblxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcblx0fVxuXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xuXHRDQUNIRUQgPSAnY2FjaGVkJyxcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdExPQ0FMID0gJ2xvY2FsJ1xufVxuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonOyIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG4vKmV4cG9ydCB0eXBlIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge1xuXHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0/OiBJdGVtRW50cnlbXTtcblx0W0VOVFJZX1NUQVRVUy5FWFBBTkRdPzogSXRlbUVudHJ5W107XG5cdFtFTlRSWV9TVEFUVVMuTE9DQUxdPzogSXRlbUVudHJ5W107XG5cdFtFTlRSWV9TVEFUVVMuUFJPTUlTRURdPzogUHJvbWlzZTxJdGVtRW50cnlbXT47XG5cdFtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXT86IFByb21pc2U8SXRlbUVudHJ5W10+O1xuXHRbRU5UUllfU1RBVFVTLlJFU09MVkVdPzogSXRlbUVudHJ5W107XG59OyovXG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1cyB7XG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBudW1iZXIsXG5cdFx0cHVibGljIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+IC8vIHRvZG86IHByb21pc2UgcmV0dXJuIHR5cGVcblx0KSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0dGhpcy5lbnRyaWVzW0VOVFJZX1NUQVRVU1tzdGF0dXNdXSA9IFtdO1xuXHR9XG5cblx0YWRkIChlbnRyeVN0YXR1czogRW50cnlTdGF0dXM8SXRlbUVudHJ5Pik6IHZvaWQge1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcblxuXHRcdHRoaXMuZW50cmllc1tzdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcblx0fVxuXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCk6IG51bWJlcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEFycmF5ICgpOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRyZXN1bHQucHVzaChzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxlciB7XG5cdGNvbXBpbGF0aW9uID0ge1xuXHRcdGNyZWF0ZToge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0XHR1cGRhdGU6IHt9LFxuXHRcdG1vdmU6IHt9XG5cdH07XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uT3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKCk7XG5cdFx0dGhpcy5wb3N0UHJvY2VzcygpO1xuXHR9XG5cblx0Z2V0UGFyZW50IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID9cblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgOlxuXHRcdFx0e2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnksIHBhcmVudElkLCBwYXJlbnRUeXBlKSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoaXRlbUVudHJ5KTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRwb3N0UHJvY2VzcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUVudHJ5W2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcblx0XHRcdFx0dGhpcy5jb21waWxhdGlvbi5tb3ZlLFxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBbXV1cblx0XHRcdCk7XG5cblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc0VkaXRhYmxlQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbk9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXS5lZGl0O1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNFZGl0YWJsZUl0ZW1zIChjb2xsZWN0aW9uRW50cnkpIHtcblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdLmVkaXRJdGVtcztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmNvbGxlY3Rpb25zKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudCAhPT0gbnVsbCA/IHBhcmVudC5pdGVtSWQgOiAwO1xuXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRhYmxlQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpKSB7XG5cdFx0XHRcdGxldCBhZGRlZEl0ZW1zO1xuXHRcdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGFkZGVkSXRlbSkpXG5cdFx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudElkLCBwYXJlbnQuaXRlbVR5cGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oYXNFZGl0YWJsZUl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBDaGFuZ2VzQ29tcGlsZXIgfSBmcm9tIFwiLi9DaGFuZ2VzQ29tcGlsZXJcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IEl0ZW1IYW5kbGVyIH0gZnJvbSBcIi4vSXRlbUhhbmRsZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB0aGUgZG9jdW1lbnQgY3JlYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxuXHRnZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5IChpdGVtVHlwZSkge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbGJlZHJhZyc6XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsJzpcblx0XHRcdGNhc2UgJ01pbmZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdH1cblx0fVxuXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGV4ZWN1dGUgKHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucywgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UsIHBhcmFtZXRlcnM/LCBjb2xsZWN0aW9uT3B0aW9ucz8sIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz8pIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdHMoXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxlckZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucywgY29sbGVjdGlvbk9wdGlvbnMpLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChjb21waWxhdGlvbiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50KS5ydW4oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cylcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXNwb25zZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xuXHRcdFx0aWYgKGlzRnVuY3Rpb24ob25BZnRlckNyZWF0ZUNhbGxiYWNrKSlcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZSwgY29udmVyc2lvbk1hcCkge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG5ld0l0ZW1JZCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUZpZWxkcyhpdGVtRW50cnksIGZpZWxkcyk7XG5cblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucywgdHJ1ZSk7XG5cblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcmlvcml0aXplVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXMgPSBbW10sIFtdLCBbXV07XG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXG5cdFx0XHRcdHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcblx0fVxuXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3RzID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKSB7XG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgocGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZm9ybWF0UmVxdWVzdChpdGVtRW50cnkpO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGNvbGxlY3Rpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAoZW50cnkuZml0dGluZy5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoZW50cnkuY29sbGVjdGlvbi5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0RGVyaXZlZChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlRmllbGRzKGl0ZW1FbnRyeSwgZmllbGRzKTtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uKSB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGlkQXJyYXkgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpZEFycmF5XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkQXJyYXkgPSByZXNwb25zZS5pdGVtcztcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxuXHRcdFx0XHRleGVjdXRlTW92ZVJlcXVlc3QocGFyZW50VHlwZSwgcGFyZW50SWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0XHQvLyBvbmx5IHRoZSBwYXJlbnQgaWQgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWRcblx0XHRcdGNvbnN0IGNvbXBpbGF0aW9uRW50cmllcyA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXTtcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdHJlcXVlc3RzLnB1c2goXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0bmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCA/IG5ld1BhcmVudElkIDogcGFyZW50SWQsXG5cdFx0XHRcdFx0dGhpcy5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZShyZXNwb25zZSwgY29tcGlsYXRpb25FbnRyaWVzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAocmVzcG9uc2UsIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlQ29sbGVjdGlvbk1hcCA9IHt9O1xuXHRcdGNvbnN0IGFkZENvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHQpO1xuXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aChcblx0XHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXG5cdFx0XHRbe30sIHt9LCBbXV1cblx0XHQpO1xuXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcCwgbWV0aG9kKSB7XG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSlbbWV0aG9kXShcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczogYW55ID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtQ29sdW1ucyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gdGhlcmUgbWlnaHQgYmUgaXRlbSBjb2x1bW5zIChsaWtlIHN1YnByb2plY3QpIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZm9yRWFjaChcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlSXRlbUZpZWxkcyhpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlSXRlbUZpZWxkcyhpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcblx0cHJpdmF0ZSBleGVjdXRlUmVxdWVzdHMgKGNoYW5nZXM6IENoYW5nZXNDb21waWxlciwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXMuY29tcGlsYXRpb247XG5cdFx0Y29uc3Qgc2luZ2xlSXRlbXMgPSBjaGFuZ2VzLnNpbmdsZUl0ZW1zO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY2hhbmdlcy5jb2xsZWN0aW9ucztcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoY29tcGlsYXRpb24uY3JlYXRlLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVNb3ZlUmVxdWVzdHMoY29tcGlsYXRpb24ubW92ZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LCAvLyBpdGVtIGlkIGNvbnZlcnNpb24gbWFwXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE1BWUJFID0gJ21heWJlJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IGVudHJ5KVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJ5KSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5pbmRleE9mKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRpZiAoaW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zbGljZSgpO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkubWF0Y2hQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm1hdGNoUGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogT25seSByZXNvdXJjZXNcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cblx0ICovXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRUeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRJZFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSwgZmllbGRzKSB7XG5cdFx0Y29uc3QgZml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IG1heWJlUmVzdWx0ID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtmaXR0aW5nOiBmaXR0aW5nUmVzdWx0LCBub3RmaXR0aW5nOiBub3RGaXR0aW5nUmVzdWx0LCBtYXliZTogbWF5YmVSZXN1bHR9O1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QocGFyZW50VHlwZSwgcGFyZW50SWQsIGZpZWxkcywgaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcblxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcblx0XHRcdFx0Zml0dGluZ1Jlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRtYXliZVJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG5vdEZpdHRpbmdSZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZSwgZW50cnlLZXkpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZW50cnkucmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxuXHRcdFx0XHRxdWVyeTogbnVsbCxcblx0XHRcdFx0cXVlcnlJdGVtVHlwZTogbnVsbCxcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2UsXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxuXHRcdFx0XHRlbnRyeUtleTogJycsXG5cdFx0XHRcdGFkZExvY2FsSXRlbXM6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcik6IG51bWJlcltdIHtcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxuXHQgKi9cblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbik6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZW1vdmVkRW50cmllcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtRW50cnkpKVxuXHRcdFx0XHRmaWx0ZXJlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZW1vdmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksIENvbGxlY3Rpb25FbnRyeUZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSBcIi4uL2luZGV4XCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSBcIi4vQ29sdW1uVXRpbFwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbVJlcXVlc3RTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbVJlcXVlc3RTZXJ2aWNlXCI7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZFtwYXJlbnRJZF0pO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkRXhwYW5kW3BhcmVudElkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlJFU09MVkVdKVxuXHRcdFx0cmVzdWx0LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXSlcblx0XHRcdHJlc3VsdC5wdXNoKHBhcmVudElkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGFkZEl0ZW1zVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkVG9Db2xsZWN0aW9ucyh0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLCBmYWxzZSk7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXMgPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChwYXJlbnRJZCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS5pdGVtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG5ld0NvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cmllc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcblx0XHRcdFx0XHRjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnkudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hFeHRlbmQgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUlkQXJyYXkgPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxuXHRcdHBhcmVudElkQXJyYXk6IG51bWJlcltdLFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IHRoaXMuZ2V0UmVxdWVzdElkcyhyZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xuXHRcdFx0XHRcdFx0XHRudWxsIDpcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKClbMF0sXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKHJlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2VbRU5UUllfU1RBVFVTLkNBQ0hFRF07XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBjb252ZXJzaW9uTWFwID0ge30pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1zID0gW107XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcblxuXHRcdC8vIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3QgKGRlcGVuZGVuY2llcylcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpXG5cdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbS5pdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuY2xvbmVJdGVtKFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG9wdGlvbnMucGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRjbG9uZWRFbnRyeS5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdFx0Y2xvbmVkSXRlbXMucHVzaChjbG9uZWRFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlKGl0ZW1UeXBlLCBvcHRpb25zLCBjb2xsZWN0aW9uRW50cnkuY29sdW1ucywgY2xvbmVkSXRlbXMpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBjb2x1bW5zLCBpdGVtczogSXRlbUVudHJ5W10pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMuYWRkKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnNcblx0XHRcdClcblx0XHQpLnJlc29sdmUoXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0XHRcdGl0ZW1zOiBpdGVtc1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPIGFkZCB0eXBlXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cGFyZW50SWRBcnJheTogbnVtYmVyW10sXG5cdFx0aXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qgc3RhdHVzSWQgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0cmVzdWx0W0VOVFJZX1NUQVRVU1tzdGF0dXNJZF1dID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gdXNlIHByb2Nlc3NFbnRyeU9wdGlvbnMgdG8gY2xvbmVcblxuXHRcdFx0bGV0IHN0YXR1c1Jlc291cmNlO1xuXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcblxuXHRcdFx0c3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZENvbGxlY3Rpb25NYXAgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGFjY3VtdWxhdG9yLFxuXHRcdGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlID0gdGhpcy5lbnRyaWVzXG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvZG86IHBhcmVudCB0eXBlXG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudC5pdGVtSWQsXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RmllbGRzKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcblxuXHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChzdGF0dXMgPT09ICdmaXR0aW5nJyA/IGl0ZW1FbnRyeSA6IGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcblxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdC8vIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gZW50cnkgaXMgbm90IGZ1bGx5IGxvYWRlZCB5ZXQsIHdlJ2xsIGhhdmUgdG8gcmVseSBvbiB0aGUgb3B0aW9uc1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdGNvbnN0IGVudHJ5Q29sdW1ucyA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0bGV0IGlzQ29sdW1uU3Vic2V0ID0gZmFsc2U7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0ZW50cnlPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoZW50cnlDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NvbHVtbnM6IHRydWUgZm9yIGNvbGxlY3Rpb25zIGlzIGRlcHJlY2F0ZWQhJyk7XG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRydWU7XG5cdFx0fSBlbHNlXG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucywgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRzdGF0dXM6IGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucywgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXROZXdFbnRyeVN0YXR1cyhpdGVtVHlwZSwgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllcyk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhjYWNoZWRFbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGNhY2hlZEVudHJ5LFxuXHRcdFx0c3RhdHVzOiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjYWNoZWRFbnRyeS5jb2x1bW5zLnJlcXVlc3QsIGNhY2hlZEVudHJ5LmNvbHVtbnMudHJ1ZSkgP1xuXHRcdFx0XHRFTlRSWV9TVEFUVVMuQ0FDSEVEIDogRU5UUllfU1RBVFVTLkVYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXROZXdFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblx0XHRsZXQgZGVmZXJyZWRPcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQodGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucykpLFxuXHRcdFx0XHRcdHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkT3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdFx0ZGVmZXJyZWRPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhkZWZlcnJlZE9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5tZXJnZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTsgLy8gd2lsbCBhbHNvIGFkZCB0aGUgZGVmZXJyZWQgZW50cnlcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0c3RhdHVzOiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoc3RhdHVzUmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlKTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5jYWNoZWQpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuY2FjaGVkW3BhcmVudElkXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZSkge1xuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdLnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmV4cGFuZCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5leHBhbmRbcGFyZW50SWRdO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkudXBkYXRlQ29sdW1ucyhpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UubG9jYWxbcGFyZW50SWRdO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KCAvLyBUT0RPOiB1c2UgdGFiIGNhY2hlP1xuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudC5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdHBhcmVudElkLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0cmVtb3ZlSXRlbXNGcm9tQW5kQWRkSXRlbXNUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcyksXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdC8vIFRPRE86IG1heWJlXG5cdHJlbW92ZUl0ZW1zRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cblx0XHRsZXQgY29sdW1uSW5mbztcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cmllcy5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMuYWRkTG9jYWxJdGVtcyA/XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSA6XG5cdFx0XHRcdFx0XHRcdFx0W11cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5JbmZvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxuXHRcdFx0XHRvbkFkZDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZlYXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUNvbGxlY3Rpb246IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XG5cdGNhY2hlID0ge307XG5cdGFsbENvbHVtbnMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk6IHsgbWlzc2luZzogYW55W10gfCB0cnVlLCBjYWNoZWQ6IG9iamVjdCB9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXBvbnNlQWNjdW11bGF0b3IgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXBvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xuXHR9XG5cblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0gY29sdW1ucztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdSZXF1ZXN0ID0ge307XG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKG1pc3NpbmdSZXF1ZXN0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gXCIuL0NvbHVtblV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XG5cdGV4cGFuc2lvbk1hcDogYW55ID0ge307XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zOiBhbnkgfCBib29sZWFuLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IGFueVxuXHQpIHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3Rcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xuXHRcdH0gZWxzZVxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0fVxuXG5cdHJ1biAoY29sdW1uSW5mbzogYW55LCByZXR1cm5FeHBhbnNpb25SZXN1bHQ6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBjb2x1bW5JbmZvSWQgPSBjb2x1bW5JbmZvLmlkO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXS5tZXJnZWQ7XG5cblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRjb2x1bW5JbmZvLnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5JbmZvLnRydWVcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IG51bGwgOiBjb2x1bW5JbmZvO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5JbmZvKTtcblxuXHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0ubWVyZ2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5JbmZvOiBhbnkpIHtcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5JbmZvLnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVzcG9uc2VDb2x1bW5zKGNvbHVtbkluZm8ucmVzcG9uc2UsIHRoaXMucmVzcG9uc2VDb2x1bW5zKVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdGZhbHNlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXG5cdFx0bWVyZ2VkLnRydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCBjb2x1bW5JbmZvLnRydWU7XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sdW1uQ2FjaGUgfSBmcm9tICcuL0NvbHVtbkNhY2hlJztcbmltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXMpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblx0dHJ1ZTogYm9vbGVhbjtcblx0bGluayA9IG51bGw7XG5cdG1haW4gPSBbXTtcblx0ZGVyaXZlZCA9IFtdO1xuXHRyb290ID0gW107XG5cdGxlYWYgPSBbXTtcblx0Zm9ybWF0dGVkID0ge1xuXHRcdG1haW46IFtdLFxuXHRcdGRlcml2ZWQ6IFtdXG5cdH07XG5cdGZpbHRlcmVkID0gW107XG5cdGN1c3RvbSA9IFtdO1xuXHRzZWFyY2hhYmxlID0gW107XG5cdGl0ZW0gPSBbXTtcblx0bm90SXRlbSA9IFtdO1xuXG5cdHJlcXVlc3QgPSBbXTtcblx0cmVzcG9uc2UgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwdWJsaWMgaXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnMsXG5cdFx0cHVibGljIGVuYWJsZUNhY2hpbmcgPSB0cnVlLFxuXHRcdHB1YmxpYyBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlXG5cdCkge1xuXHRcdHRoaXMudHJ1ZSA9IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMoKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKCkge1xuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpIDpcblx0XHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXSkge1xuXHRcdFx0dGhpcy5tYWluLnB1c2goXG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uSW5mbyhcblx0XHRcdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXVtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0bnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvY2Vzc1JlcXVlc3RDb2x1bW5zICgpIHtcblx0XHR0aGlzLnJlcXVlc3QgPSB0aGlzLnJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiB0aGlzLnJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCB0aGlzLml0ZW1UeXBlLCBudWxsKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgdGhpcy5pdGVtVHlwZSwgbnVsbCkpO1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGNvbHVtblR5cGUsIHBhcmVudCkge1xuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XG5cblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAodGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGNvbHVtblR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGNvbHVtblR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2NvbHVtblR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhyZXNwb25zZUNvbHVtbiwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQpO1xuXHR9XG5cblx0Z2V0Q29sdW1uSW5mbyAocmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuLCBwYXJlbnQpIHtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRwYXRoOiBpc0Rlcml2ZWQgP1xuXHRcdFx0XHRwYXJlbnQucGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQsXG5cdFx0XHRhcGlDb2x1bW46IHJlc3BvbnNlQ29sdW1uLFxuXHRcdFx0bGV2ZWw6IGlzRGVyaXZlZCA/IHBhcmVudC5sZXZlbCArIDEgOiAwLFxuXHRcdFx0aXNMZWFmOiBjaGlsZHJlbi5sZW5ndGggPT09IDAsXG5cdFx0XHRpdGVtVHlwZTogJycsXG5cdFx0XHRjaGlsZHJlbjogW10sXG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHR0YWlsUGF0aDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAoaXNEZXJpdmVkKSB7XG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0Y29sdW1uSW5mby5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0XHRjb2x1bW5JbmZvLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID4gMCA/XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQ7XG5cdFx0fSBlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW3RoaXMuY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0dGhpcy5saW5rID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZXNwb25zZUNvbHVtbi5pdGVtVHlwZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRjb25zb2xlLndhcm4oJ2l0ZW1UeXBlIHVuZGVmaW5lZCBpbiBjb2x1bW4nLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlID0gcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGU7XG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xuXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhjaGlsZCwgY29sdW1uSW5mby5pdGVtVHlwZSwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uSW5mbztcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgY29weSwgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBlcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBlcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcblx0fVxuXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XG5cdH1cblxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0XHRyZXR1cm4gMC41O1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiAxLjU7XG5cblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcblx0XHR9XG5cdH1cblxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxuXHRpc0NvbHVtblN1YnNldCAoZmlyc3QsIHNlY29uZCwgc2Vjb25kVHJ1ZSkge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcblxuXHRcdC8vIHdoZW4gc2Vjb25kVHJ1ZSBpcyB0aGUgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBkZXJpdmVkIGNvbHVtbnNcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgc2Vjb25kKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0aGlzLmNvbnRhaW5zQ29sdW1uKFxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1uTWFwKSB7XG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gcGFyc2VkQ29sdW1uLmNoaWxkcmVuO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xuXHQgKi9cblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IGNvcHkoZmlyc3QpO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihjb2x1bW4sIG1lcmdlZCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0ZGlmZmVyZW5jZS5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxuXHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0W2NvbHVtbi5pZF06IGFkZGVkQ29sdW1uc1xuXHRcdH07XG5cdH1cblxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pIHtcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdDtcblx0fVxuXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XG5cblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCBhZGRSZXF1ZXN0Q29sdW1ucykge1xuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zID0gW107XG5cdFx0bGV0IHJlcXVlc3RDb2x1bW5zID0gY29weShhZGRSZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHR0aGlzLnByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMoXG5cdFx0XHRjb25maWdDb2x1bW5zLFxuXHRcdFx0bG9jYWxDb2x1bW5zLFxuXHRcdFx0KGNvbmZpZ0lkLCBjb2x1bW5JZCkgPT4ge1xuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdH0sXG5cdFx0XHQoY29uZmlnSWQsIGxvY2FsQ29sdW1uKSA9PiB7XG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKGlzTGVhZikge1xuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXG5cdFx0XHR9KSAtIDE7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXG5cdFx0KTtcblx0fVxuXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2xsZWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbixcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmIChlbnRyeS5maXR0aW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZW50cnkuY29sbGVjdGlvbi5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXG5cdFx0cmV0dXJuIHJlcXVlc3RSZXNvdXJjZTtcblx0fVxuXG5cdHNldFJlcXVlc3RQYXJlbnQgKHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcblxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IGFueSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdFx0XHRpdGVtczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHt9XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRsZXQgbGlua3M7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHRyZXF1ZXN0LnBhcmVudElkW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCxcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4vSXRlbUNhY2hlJztcbmltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tICcuL0l0ZW1IYW5kbGVyJztcbmltcG9ydCB7IEl0ZW1SZXF1ZXN0U2VydmljZSB9IGZyb20gXCIuL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tIFwiLi9Mb2NhbENhY2hlXCI7XG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tIFwiLi9RdWVyeVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxlckZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdC8vIGlkIGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1EZWZpbml0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IGFueSwgb3B0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXk6IGFueSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KGl0ZW1JZCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgb3B0aW9uczogb3B0aW9ucywgaXRlbUlkOiBpdGVtSWR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5ICE9PSBudWxsKSB7XG5cdFx0XHRzd2l0Y2ggKHN0YXRlS2V5LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbmV3Jzpcblx0XHRcdFx0XHQvLyBpZiAoc3RhdGVLZXkudGVtcGxhdGUubGVuZ3RoID4gMClcblx0XHRcdFx0XHQvLyBcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge3R5cGU6IHN0YXRlS2V5LnRlbXBsYXRlfTtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkdXBsaWNhdGUnOlxuXHRcdFx0XHRcdG9wdGlvbnMuZHVwbGljYXRlID0gc3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpIC8vIHRvZG86IHJlZmFjdG9yIHRoaXNcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IHN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJlc3VsdC5pdGVtSWQgPSBpdGVtSWQ7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIHt9LCBmYWxzZSk7XG5cblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIHJlc3VsdCwgY29sbGVjdGlvbkNhY2hlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaXRlbUlkXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT59XG5cdCAqXG5cdCAqIEkgZXhwZWN0IG5vdCBhIHRlbXBsYXRlIHJlcXVlc3QgZnJvbSBpdGVtaGFuZGxlci5mZXRjaEl0ZW0gYmVjYXVzZSBhZGRTaW5nbGVJdGVtIGRvZXMgbm90IGhhbmRsZSB0aGVcblx0ICogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxuXHQgKi9cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0aWYgKCg8SXRlbUVudHJ5PiBpdGVtRW50cnkpLml0ZW1UeXBlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbSgoPEl0ZW1FbnRyeT4gaXRlbUVudHJ5KSwgb3B0aW9ucywgZmFsc2UpO1xuXG5cdFx0XHRcdC8vIHRvZG86IG1ha2Ugc2F2ZSB3aGVuIGl0ZW0gaXMgbm90IEl0ZW1FbnRyeVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7fTtcblxuXHRcdHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGR1cGxpY2F0ZUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSkge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0SXRlbURlZmluaXRpb24oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXREdXBsaWNhdGVTdGF0ZUtleShkdXBsaWNhdGVJZCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeURlZihkZWZpbml0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJldHVybiB2YWx1ZSBpcyBkZXBlbmRlZCBvbiB0aGUgcmV0dXJuIGxpbmtzIGJvb2xlYW4uIHRydWUgcmV0dXJucyB0aGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcC5cblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSb290XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSwgcmV0dXJuTGlua3M6IGJvb2xlYW4sIGlzUm9vdDogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0aWYgKGlzUm9vdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aXNSb290ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcblxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuTGlua3MgPyB7bWFpbjogbWFpbiwgbGlua2VkOiBsaW5rZWR9IDogbWFpbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGVudHJ5LCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGVudHJ5T3B0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oZW50cnksIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHR0aGlzLmdldExvY2FsQ2FjaGUoKS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHR0aGlzLmdldExvY2FsQ2FjaGUoKS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0Ly8gXHRcdFx0dmFyIHJlcXVlc3RDb2x1bW5zID0ge307XG5cdFx0Ly8gXHRcdFx0cmVxdWVzdENvbHVtbnNbbGlua1R5cGVdID0gWydpZCddO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtQnlEZWYgKGRlZmluaXRpb246IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24uaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKGRlZmluaXRpb24ub3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGxldCBtYWluRW50cnk6IEl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpZiAoKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubGlua2VkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcygoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5saW5rZWQsIGRlZmluaXRpb24ub3B0aW9ucywgZmFsc2UpO1xuXHRcdFx0XHRcdG1haW5FbnRyeSA9ICg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLm1haW47XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdG1haW5FbnRyeSA9IDxJdGVtRW50cnk+IGl0ZW1FbnRyeVJlc291cmNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0obWFpbkVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMsIGlzUm9vdCk7IC8vIGlzUm9vdFxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKG5ld0l0ZW1JZDogbnVtYmVyLCBpdGVtUmVzb3VyY2U6IGFueSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jbG9uZUl0ZW0obmV3SXRlbUlkLCBpdGVtUmVzb3VyY2UuZW50cnkpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogYW55LCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuY2xvbmUoXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeSxcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwXG5cdFx0XHQpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKGNsb3NlVGFiOiBib29sZWFuLCBwYXJhbWV0ZXJzOiBhbnksIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s6IGFueSwga2VlcFRhYkhlYWRpbmcgPSBmYWxzZSkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldEN1cnJlbnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIScpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeS5jb25zdHJ1Y3QobG9jYWxDYWNoZS5yb290SXRlbSwgbG9jYWxDYWNoZS5pdGVtcywgbG9jYWxDYWNoZS5jb2xsZWN0aW9ucykucHJvY2VzcygpO1xuXHR9XG5cblx0Ly8gdXNlZCBpbiB0aW1lUmVnaXN0cmF0aW9uQ29udHJvbGxlclxuXHRhZGRTaW5nbGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogYW55LCBpc1Jvb3Q/OiBib29sZWFuKTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChsb2NhbENhY2hlLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIHVzZWQgaW4gd2FyZWhvdXNlSXRlbUNhY2hlRmFjdG9yeVxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IGFueSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zPzogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRpZiAocHJvY2Vzc09wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHByb2Nlc3NPcHRpb25zID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0cHJvY2Vzc09wdGlvbnMgPyB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMocmVzb3VyY2VPcHRpb25zKSA6IHJlc291cmNlT3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnM6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gbG9jYWxDYWNoZS5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sXG5cdFx0XHRcdHJlc291cmNlT3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChsaW5rZWRFbnRyaWVzOiBhbnlbXSwgb3B0aW9uczogYW55LCBhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuKTogSXRlbVJlc291cmNlSXRlbVR5cGVNYXAge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdLnB1c2gobG9jYWxDYWNoZS5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcblxuXHRcdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBjb2xsZWN0aW9uTWFwLCBjb2xsZWN0aW9uQ2FjaGUpO1xuXG5cdFx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdFx0XHRsb2NhbENhY2hlLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDYWNoZU1hbmFnZXIodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDYWNoZU1hbmFnZXIodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKFxuXHRcdFx0dGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyaWVzLCB0cnVlKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlXG5cdFx0KTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IGFueVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMsIGZhbHNlKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlXG5cdFx0KTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBhbnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucz86IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucywgcHJvY2Vzc09wdGlvbnMpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IGFueSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25CZWZvcmVTYXZlJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlU3VjY2VzcycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlV2l0aG91dENsb3NpbmcgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdGVudHJpZXMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIXRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Z2V0IChpdGVtVHlwZSwgaXRlbUlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlLCBpdGVtSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRwYXJlbnQuaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpXG5cdFx0KTtcblxuXHRcdHJldHVybiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4vQXBpRm9ybWF0dGVyJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuL0tleVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XG5cdEFMTF9QRVJNSVNTSU9OUyA9IDc7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdHJlc2V0RGVyaXZlZCAoaXRlbUVudHJ5LCBjb2x1bW5JZHMpOiB2b2lkIHtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1ucykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcblxuXHRcdFx0XHRkZWxldGUgaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRlZmVyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgZGVmZXJSZXF1ZXN0KTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0aXRlbUVudHJ5LmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0fVxuXG5cdHJlamVjdCAoaXRlbUVudHJ5LCBlcnJvciA9IHRoaXMudW5kZWZpbmVkSXRlbUVycm9yKTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcblxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKGl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdGl0ZW1FbnRyeS5yZXNvdXJjZXMgPSBbXTtcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IGl0ZW1FbnRyeS5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGdldEZpZWxkcyAoaXRlbUVudHJ5KSB7XG5cdFx0aWYgKGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5tb2RpZmllZDtcblxuXHRcdHJldHVybiBpdGVtRW50cnkuaW5pdGlhbDtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGV4cGFuZCAoZW50cnksIG1haW4sIGRlcml2ZWQsIGV4cGFuZFJlc291cmNlKSB7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2U7XG5cdFx0ZW50cnkuY29sdW1ucyA9IGV4cGFuZFJlc291cmNlLm1lcmdlZDtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkuaW5pdGlhbCxcblx0XHRcdG1haW4sXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cblx0XHQpO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXG5cdFx0XHRlbnRyeS5kZXJpdmVkLFxuXHRcdFx0ZGVyaXZlZCxcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxuXHRcdCk7XG5cblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBlbnRyeTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0dGVtcGxhdGVPcHRpb25zOiB7fSxcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdC8vIGtleTogaW5pdGlhbCAvIG1vZGlmaWVkXG5cdC8vIGZpZWxkcyAqaGF2ZW4ndCogYmVlbiBmb3JtYXR0ZWQgeWV0XG5cdHVwZGF0ZUZpZWxkcyAoZW50cnksIHNvdXJjZSwgb3ZlcndyaXRlID0gdHJ1ZSkge1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLmZvcm1hdHRlZC5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UobW9kaWZpZWQsIGZvcm1hdHRlZENvbHVtbnMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0dXBkYXRlSXRlbVZhbHVlIChlbnRyeSwgZmllbGRzLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZHNbY29sdW1uSWRdO1xuXG5cdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdG5ld1ZhbHVlID0gZW50cnkucGFyZW50Lml0ZW1JZDtcblx0XHR9IGVsc2Vcblx0XHRcdG5ld1ZhbHVlID0gdGhpcy5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdH1cblxuXHR1cGRhdGVJdGVtRmllbGRzIChlbnRyeSwgY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gZW50cnkuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIG1vZGlmaWVkLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblx0fVxuXG5cdHByb2Nlc3MgKGVudHJ5KSB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IGVudHJ5LmNvbHVtbnMuZm9ybWF0dGVkO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZW50cnkuaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShlbnRyeS5kZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoZW50cnkpIHtcblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChlbnRyeS5pdGVtSWQpID8ge30gOiBlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0c2V0RGlzcGxheU5hbWUgKGVudHJ5KSB7XG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKGVudHJ5KTtcblxuXHRcdGlmIChyZXN1bHQpXG5cdFx0XHRlbnRyeS5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblx0fVxuXG5cdGdldERpc3BsYXlOYW1lIChlbnRyeSkge1xuXHRcdGNvbnN0IGZpZWxkcyA9IHR5cGVvZiBlbnRyeS5tb2RpZmllZCA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xuXG5cdFx0c3dpdGNoIChlbnRyeS5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXG5cdFx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbdGhpcy5nZXRUaXRsZUZpZWxkKGVudHJ5Lml0ZW1UeXBlKV07XG5cdFx0fVxuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XG5cdFx0cmV0dXJuIGZpcnN0TmFtZS50cmltKClcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XG5cdH1cblxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcblx0XHRcdFx0cmV0dXJuICdmcmllbmRseW5hbWUnO1xuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcblx0XHRcdFx0cmV0dXJuICduYWFtaW50ZXJuJztcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcblx0XHRcdGNhc2UgJ0JhcmNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcblx0XHRcdGNhc2UgJ0JldGFsaW5nc2NvbmRpdGllJzpcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcblx0XHRcdGNhc2UgJ1RheFNjaGVtYSc6XG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XG5cdFx0XHRjYXNlICdGdW5jdGllZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcblx0XHRcdGNhc2UgJ0luaHV1cic6XG5cdFx0XHRjYXNlICdJbmh1dXJncm9lcCc6XG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbENhdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxuXHRcdFx0Y2FzZSAnUGxhbm5pbmdtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnU3VicHJvamVjdCc6XG5cdFx0XHRjYXNlICdUYWFrJzpcblx0XHRcdGNhc2UgJ1RhZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRjYXNlICdUaWpkJzpcblx0XHRcdGNhc2UgJ1RpdGVsJzpcblx0XHRcdGNhc2UgJ1R5cGUnOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xuXHRcdFx0Ly8gY2FzZSAnQ29udGFjdCc6XG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXG5cdFx0XHRcdHJldHVybiAnZGlzcGxheW5hbWUnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50cnlcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAoZW50cnksIHJldHVybkFsbCkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcblx0XHRcdGVudHJ5LmluaXRpYWwsXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0ZW50cnkuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKGVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoZW50cnkuaXRlbUlkKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKGVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuaXNMb2NhbChlbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGVudHJ5Lml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChlbnRyeSkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXG5cdFx0XHRlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0cmVzZXRNb2RpZmllZCAoZW50cnkpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0ZW50cnkuaW5pdGlhbFtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHNldEluaXRpYWwgKGVudHJ5LCB2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcz8pIHtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShlbnRyeSwgdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhlbnRyeS5pbml0aWFsLCB7fSwgZW50cnkuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoZW50cnkubW9kaWZpZWQsIHt9LCBlbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGVudHJ5LCBwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHQvKipcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXG5cdCAqL1xuXHRzZXRNb2RpZmllZCAoZW50cnksIHZhbHVlcz8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW2VudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBlbnRyeS5yZXNvdXJjZXM7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gZW50cnkuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQgPSB7fTtcblxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdC8vIGlmIChERVZfTU9ERSkge1xuXHRcdFx0Ly8gXHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Ly8gXHRcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHQvLyB9XG5cblx0XHRcdGVudHJ5Lm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0c2V0RGVyaXZlZCAoZW50cnksIHZhbHVlcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0cHJvY2Vzc0xvY2FsIChlbnRyeSwgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXApIHtcblx0XHRlbnRyeS5pbml0aWFsID0ge3Blcm1pc3Npb25zOiB0aGlzLkFMTF9QRVJNSVNTSU9OU307XG5cblx0XHR0aGlzLnVwZGF0ZUZpZWxkcyhlbnRyeSwgaW5pdGlhbCk7XG5cdFx0dGhpcy51cGRhdGVJdGVtRmllbGRzKGVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHRoaXMuc2V0TW9kaWZpZWQoZW50cnksIG1vZGlmaWVkKTtcblxuXHRcdGVudHJ5Lm1vZGlmaWVkLmNyZWF0ZWQgPSBtb21lbnQoKTtcblx0XHRlbnRyeS5kZXJpdmVkID0gZGVyaXZlZDtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHNldFBhcmVudCAoZW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0ZW50cnkucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAoZW50cnksIHByZXZpb3VzKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBlbnRyeS5yZXNvdXJjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2UgPSBlbnRyeS5yZXNvdXJjZXNbaV07XG5cblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5XG59IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBBdXRoSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7XG5cdEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAsXG5cdEVudHJ5U3RhdHVzLFxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuL0JhdGNoU3RhdHVzJztcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5pbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tIFwiLi9JdGVtQ2FjaGVcIjtcbmltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldEl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gaXRlbUVudHJ5Lml0ZW1JZDtcblx0fVxuXG5cdGdldFByb21pc2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJ5U3RhdHVzLmVudHJ5O1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5MT0NBTCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxuXHRcdFx0XHQudGhlbihcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnksIGVycm9yKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoaXRlbUVudHJ5LCBzdGF0dXMsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gaXRlbUlkc1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XG5cdCAqXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZSwgaXRlbUlkcywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRJdGVtSWQoaXRlbUVudHJ5KSxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRQcm9taXNlKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcblx0XHRcdGJhdGNoU3RhdHVzLmFkZCh0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpKTtcblxuXHRcdHByb21pc2VzLmVudHJpZXMgPSBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW0oaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5FWFBBTkQpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXG5cdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSwgZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZWplY3QoaXRlbUVudHJ5LCBlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0Ly8gdG9kbyBGaW5kIG91dCB3aGF0IHRoaXMgcmV0dXJuIHR5cGUgaXNcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSk6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHRoaXMuY3JlYXRlQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldFBhcmVudChpdGVtRW50cnksIHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc0xvY2FsKFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0dGVtcGxhdGUuZmllbGRzLFxuXHRcdFx0e30sXG5cdFx0XHR7fSxcblx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHQpO1xuXG5cdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGNvbnZlcnNpb25NYXApXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc29sdmUoaXRlbUVudHJ5KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnkpO1xuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpLFxuXHRcdFx0Y29sdW1uSW5mb1xuXHRcdCk7XG5cdH1cblxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXG5cblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdHt9IDpcblx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdF0pLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2U6IGFueSA9IHJlc29sdmVkWzBdO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcblx0XHRcdFx0XHRyZXNvbHZlZFsxXVxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XG5cdFx0XHRcdFx0ZmllbGRzOiB0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoT2JqZWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSxcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnM6IHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBjYWNoZWRFbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChjYWNoZWRFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCBmYWxzZSksXG5cdFx0XHRcdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSxcblx0XHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7ZW50cnk6IGNhY2hlZEVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY2FjaGVkRW50cnksIG9wdGlvbnMpfTtcblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSB8fFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KG9wdGlvbnMuY29sdW1ucywgY29sdW1ucy5yZXF1ZXN0LCBjb2x1bW5zLnRydWUpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeS5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRjb2x1bW5zLnJlcXVlc3QgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5zLnJlcXVlc3QsIG9wdGlvbnMuY29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGZhbHNlKTtcblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHR9XG5cblx0Y3JlYXRlRGVmZXJyZWRFbnRyeSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIHJlcXVlc3RDb2x1bW5zLCBkZWZlclJlcXVlc3QpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY3JlYXRlRW50cnlTdHViKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucyxcblx0XHRcdHRydWU6IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVmZXIoaXRlbUVudHJ5LCBkZWZlclJlcXVlc3QpO1xuXHR9XG5cblx0Y3JlYXRlRW50cnlTdHViIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlcik6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0aXRlbUlkXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUVudHJ5IChpdGVtSWQ6IG51bWJlciwgaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1uSW5mbyk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzKFxuXHRcdFx0dGhpcy5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdGluaXRpYWwsXG5cdFx0XHRcdFx0ZGVyaXZlZFxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZWZlcnJlZEVudHJ5IChpdGVtRW50cnksIGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiBJdGVtRW50cnkge1xuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gY29sdW1ucztcblx0XHRpdGVtRW50cnkuaW5pdGlhbCA9IGluaXRpYWw7XG5cdFx0aXRlbUVudHJ5LmRlcml2ZWQgPSBkZXJpdmVkO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3MoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcblx0ICogQHBhcmFtIHJlc29sdmVkXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcblx0ICovXG5cdGJhdGNoUmVzb2x2ZSAoaXRlbVR5cGUsIGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1cywgcmVxdWVzdENvbHVtbnMsIHJlc29sdmVkKTogSXRlbUVudHJ5W10gfCBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0dGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBudWxsLCByZXNvbHZlZC50ZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChuZXdJdGVtSWQsIGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcD8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB7XG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGVdOiB7XG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtSWRdOiBuZXdJdGVtSWRcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlRW50cnkoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSwge30sIGNvbHVtbnMubWFpbiksXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUl0ZW1GaWVsZHMocmVzdWx0LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHJlc3VsdC5tb2RpZmllZCA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMocmVzdWx0LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKCFwYXJlbnQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXRQYXJlbnQocmVzdWx0LCBwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0Y3JlYXRlQ29udmVyc2lvbk1hcCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIGV4dGVuZDogYm9vbGVhbiwgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0W2l0ZW1UeXBlXToge1xuXHRcdFx0XHRbYXBpSXRlbUlkXTogaXRlbUlkXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChleHRlbmQpXG5cdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdHJlc3VsdCxcblx0XHRcdFx0cmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdW2FwaUl0ZW1JZF0ubGlua3MsXG5cdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAocGFyZW50VHlwZTogc3RyaW5nLCBsb2NhbFBhcmVudElkOiBudW1iZXIsIHRlbXBsYXRlLCBjb252ZXJzaW9uTWFwKTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09IHBhcmVudFR5cGUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBzZWxmLmNyZWF0ZUVudHJ5U3R1YihpdGVtVHlwZSwgbG9jYWxJdGVtSWQpO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSBjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXTtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NMb2NhbChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cnkgKGl0ZW1JZDogbnVtYmVyLCB0ZW1wbGF0ZSwgbW9kaWZpZWQsIGRlcml2ZWQsIHBhcmVudCA9IG51bGwpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jcmVhdGVFbnRyeVN0dWIoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzTG9jYWwoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHR0ZW1wbGF0ZS5maWVsZHMsXG5cdFx0XHRtb2RpZmllZCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgZmFsc2UsIHRlbXBsYXRlLnJlc3BvbnNlKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENyZWF0b3IoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRleHRlbmRDb252ZXJzaW9uTWFwIChjb252ZXJzaW9uTWFwLCBsaW5rcywgYXBpUmVzcG9uc2UpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdFx0Y29udmVyc2lvbk1hcCxcblx0XHRcdFx0XHRhcGlSZXNwb25zZS5pdGVtc1tpdGVtVHlwZV1bYXBpSXRlbUlkXS5saW5rcyxcblx0XHRcdFx0XHRhcGlSZXNwb25zZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBkZWZlclJlcXVlc3QgPSB0cnVlKSB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtcblx0XHRcdFx0Y29sdW1uczogW3RpdGxlRmllbGRdLFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdFxuXHRcdFx0fSlcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IEl0ZW1FbnRyeSB8IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBmZXRjaEl0ZW0gY2FuIGFsc28gcmV0dXJuIGxpbmtlZCBpdGVtc1xuXHRcdFx0XHRpZiAoZW50cnkubWFpbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmluaXRpYWxbdGl0bGVGaWVsZF07XG5cblx0XHRcdFx0aWYgKGVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1vZGlmaWVkW3RpdGxlRmllbGRdO1xuXG5cdFx0XHRcdHJldHVybiBlbnRyeS5pbml0aWFsW3RpdGxlRmllbGRdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBudW1iZXJbXSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkfSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkIChpdGVtRW50cnksIGl0ZW1JZCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3Qgb2xkSXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRpdGVtRW50cnkuaXRlbUlkID0gaXRlbUlkO1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDcmVhdG9yIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGl0ZW1FbnRyeS5tb2RpZmllZC5jcmVhdG9yID0gdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpO1xuXHRcdGl0ZW1FbnRyeS5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24gfSBmcm9tIFwiLi9Db2x1bW5FeHBhbnNpb25cIjtcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdGNvbHVtbnM6IHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxuXHRcdFx0aXRlbVR5cGU6ICcnLFxuXHRcdFx0YWxsTGlua0lkczogZmFsc2UsXG5cdFx0XHRsaW1pdDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAob3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsKVxuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGVsc2Uge1xuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gb3B0aW9ucy5xdWVyeUl0ZW1UeXBlO1xuXHRcdFx0cGFyYW1zLmFsbExpbmtJZHMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UsIGlkQXJyYXksIHBhcmVudCwgY29sdW1uSW5mbywgY29sdW1uRXhwYW5zaW9uPyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnRydWUgPyB0cnVlIDogY29sdW1uSW5mby5yZXF1ZXN0LFxuXHRcdFx0XHRjb2x1bW5JbmZvLnJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gY29sdW1uSW5mby5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcblx0XHRcdGxldCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5jcmVhdGVFbnRyeShcblx0XHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJyZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChyZXNwb25zZSwgcGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMpIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXQ6IGZhbHNlLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2U6IEVkaXRSZXNvdXJjZSkge1xuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XG5cdE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XG5cdERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XG5cblx0TkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcblx0RFVQTElDQVRFX0tFWVdPUkQ6IHN0cmluZyA9ICdkdXAtJztcblxuXHRzZXBlcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1UeXBlLmNvbmNhdCh0aGlzLnNlcGVyYXRvciwgU3RyaW5nKGl0ZW1JZCkpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkNhY2hlS2V5IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGNoaWxkVHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHBhcmVudFR5cGUuY29uY2F0KHRoaXMuc2VwZXJhdG9yLCBTdHJpbmcocGFyZW50SWQpLCB0aGlzLnNlcGVyYXRvciwgY2hpbGRUeXBlKTtcblx0fVxuXG5cdGdldENzc0tleSAoKSB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnXycpO1xuXHR9XG5cblx0cGFyc2VTdGF0ZUtleSAoc3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKHRoaXMuTkVXX0tFWVdPUkQpID09PSAwKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogJ25ldycsXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcodGhpcy5ORVdfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YodGhpcy5EVVBMSUNBVEVfS0VZV09SRCkgPT09IDApXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnZHVwbGljYXRlJyxcblx0XHRcdFx0aXRlbUlkOiBzdGF0ZUtleS5zdWJzdHJpbmcodGhpcy5EVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5EVVBMSUNBVEVfS0VZV09SRC5jb25jYXQoU3RyaW5nKGl0ZW1JZCkpO1xuXHR9XG5cblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuTkVXX0tFWVdPUkQuY29uY2F0KHRlbXBsYXRlVHlwZSk7XG5cdH1cblxuXHRnZXRMb2NhbElkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLk5FV19QUkVGSVguY29uY2F0KHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpLCAxMCk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLkRVUExJQ0FURV9QUkVGSVguY29uY2F0KHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpLCAxMCk7XG5cdH1cblxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xuXHRcdHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQudG9TdHJpbmcoKS5pbmRleE9mKHRoaXMuTkVXX1BSRUZJWCkgPT09IDAgfHwgaXRlbUlkID09PSB0aGlzLk5FV19LRVlXT1JEO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkLnRvU3RyaW5nKCkuaW5kZXhPZih0aGlzLkRVUExJQ0FURV9QUkVGSVgpID09PSAwIHx8IGl0ZW1JZCA9PT0gdGhpcy5EVVBMSUNBVEVfS0VZV09SRDtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSBcIi4vQ29sbGVjdGlvbkNhY2hlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi9JdGVtQ2FjaGUnO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgeyBJdGVtSGFuZGxlciB9IGZyb20gXCIuL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IExvY2tTZXJ2aWNlIH0gZnJvbSBcIi4vTG9ja1NlcnZpY2VcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRjb2xsZWN0aW9uT3B0aW9ucyA9IHt9O1xuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXHRjYWxsYmFja3MgPSB7b25CZWZvcmVTYXZlOiB7fSwgb25TYXZlU3VjY2Vzczoge30sIG9uU2F2ZVdpdGhvdXRDbG9zaW5nOiB7fX07XG5cblx0Y2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblx0aGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTogSXRlbVJlc291cmNlIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdGlmICghdGhpcy5pdGVtcy5jb250YWlucyhpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpKVxuXHRcdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0aWYgKCF0aGlzLmNvbGxlY3Rpb25zLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5SWRdID0ge1xuXHRcdFx0XHRlZGl0OiByZXNvdXJjZU9wdGlvbnMuZWRpdENvbGxlY3Rpb24sXG5cdFx0XHRcdGVkaXRJdGVtczogcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtc1xuXHRcdFx0fTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25PcHRpb25zRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25PcHRpb25zW2NvbGxlY3Rpb25FbnRyeUlkXTtcblxuXHRcdFx0Y29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0ID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0IHx8IHJlc291cmNlT3B0aW9ucy5lZGl0Q29sbGVjdGlvbjtcblx0XHRcdGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdEl0ZW1zID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0SXRlbXMgfHwgcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtcztcblx0XHR9XG5cblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlSXRlbSA9IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckl0ZW0oaXRlbVJlc291cmNlKTtcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9IChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNsZWFyUmVzb3VyY2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIHRoaXMgY29uZGl0aW9uIG9uY2UgY3JldyBhbmQgdHJhbnNwb3J0IGFyZSBubyBsb25nZXIgbG9hZGVkIGluIHNlcGVyYXRlIGdyaWQgaW5zdGFuY2VzIGluIHRoZSBwcm9qZWN0IHBsYW5uZXIgZ3JpZFxuXHRcdGlmICghaXNTdWJUYWJDaGFuZ2UpXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc2V0TW9kaWZpZWQoaXRlbUVudHJ5KSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KSk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdClcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XG5cblx0XHRpZiAoIW9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gdGhlc2UgYXJlIGVkaXQgcmVzb3VyY2VzIChlZGl0SXRlbXMpXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSXRlbSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzZXRNb2RpZmllZChjb2xsZWN0aW9uSXRlbSk7XG5cdH1cblxuXHRfaGFzQ2hhbmdlcyAoKSB7XG5cdFx0aWYgKCF0aGlzLmhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXM7XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpIHtcblx0XHRpZiAodGhpcy5pdGVtcy5zb21lKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fSk7XG5cdH1cblxuXHRjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0SXRlbXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKSB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NrYWJsZSh0aGlzLnJvb3RJdGVtKTtcblx0fVxuXG5cdHNhdmUgKGNsb3NlVGFiID0gZmFsc2UsIHBhcmFtZXRlcnMsIGJyZWFrVXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHRsb2NrVG9rZW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvbkJlZm9yZVNhdmUnLCBjbG9zZVRhYik7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XG5cblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnMsXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBjb252ZXJzaW9uTWFwLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXhlY3V0ZUNhbGxiYWNrcyAoZXZlbnQsIC4uLmFyZ3MpIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jYWxsYmFja3NbZXZlbnRdKVxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XG5cdH1cblxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0ZW5hYmxlV2F0Y2hlciAoKSB7XG5cdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGRpc2FibGVXYXRjaGVyICgpIHtcblx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XG5cdGxvY2tJdGVtcyA9IHt9O1xuXHRwcm9taXNlcyA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxuXHRcdFx0bWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHZhbHVlXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRMb2NrcyAoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxuXHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gXCIuL1V0aWxcIjtcblxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxlciB7XG5cdHBhcmVudE1hcDogYW55ID0ge307XG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcm9vdEl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpIHtcblx0fVxuXG5cdHByb2Nlc3MgKCkge1xuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRsZXQgbWFwRW50cnkgPSByZXN1bHRbcGFyZW50VHlwZV07XG5cblx0XHRcdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcEVudHJ5W3BhcmVudElkXSA9IHt9O1xuXG5cdFx0XHRcdG1hcEVudHJ5ID0gbWFwRW50cnlbcGFyZW50SWRdO1xuXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcikge1xuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XG5cblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcblxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xuXG5cdFx0aWYgKGhhc1ZhbHVlcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xuXG5cdFx0aWYgKGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xuXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XG5cblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIHBhcmVudElkOiBudW1iZXIsXG5cdFx0cHVibGljIGZpZWxkczogb2JqZWN0LFxuXHRcdHB1YmxpYyBpdGVtVHlwZT86IHN0cmluZ1xuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8IHN0cmluZyB7XG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdGhpcy5wYXJlbnRUeXBlKVxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcblx0XHRlbHNlXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLnBhcmVudElkLCBxdWVyeS5xdWVyeSk7XG5cblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IHRlcm1pbmFsO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSAnQU5EJzpcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdPUic6XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcblxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcblx0XHRcdFx0cmV0dXJuIHRlcm1pbmFsO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZSwgcXVlcnkpIHtcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcblx0XHRcdHJldHVybiBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcblx0XHRcdGNhc2UgJz0nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJyE9Jzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc8PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnSU4nOlxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICdOT1QgSU4nOlxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xuXHRxdWVyeTogYW55O1xuXHRwYXJhbWV0ZXJzOiBhbnk7XG5cblx0Y29uc3RydWN0b3IgKHF1ZXJ5LCBwYXJhbWV0ZXJzPykge1xuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlKSB7XG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcblxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcblx0fVxuXG5cdHBhcnNlIChxdWVyeSA9IHRoaXMucXVlcnkpIHtcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xuXHRcdFx0KTtcblxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcblx0XHRcdFx0cXVlcnkub3BlcmF0b3Jcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5rZXksXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlKSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbSwgcGFyYW1ldGVycykge1xuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7Y3VzdG9tOiBjdXN0b219LFxuXHRcdFx0XHQnWycgKyBjdXN0b20gKyAnXSdcblx0XHRcdF07XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0ge307XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XG5cblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcblxuXHRcdFx0aWYgKGkgPiAwKVxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcblxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleSwgdmFsdWUsIGNvbXBhcmF0b3I/KSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbywgcXVlcnksIHJldmVyc2UsIG5vdCkge1xuXHRcdGlmIChxdWVyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cXVlcnkgPSB7fTtcblxuXHRcdGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XG5cblx0XHRpZiAobm90ID09PSB1bmRlZmluZWQpXG5cdFx0XHRub3QgPSBmYWxzZTtcblxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnMsIG9wZXJhdG9yKSB7XG5cdFx0aWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xuXHRcdGVsc2Vcblx0XHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcblxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xuXHRcdGxldCBwYXJzZWRDb25kaXRpb25zID0gW107XG5cdFx0Y29uc3QgcXVlcnkgPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcblxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcblxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tIFwiLi9Db2x1bW5VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zID0ge307XG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZCAoY29sdW1uSW5mbykge1xuXHRcdGlmICh0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSlcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uSW5mby5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5JbmZvLnJlcXVlc3QpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgeyBJdGVtSGFuZGxlciB9IGZyb20gJy4vSXRlbUhhbmRsZXInO1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xuXHRcdFx0Y2FzZSAndXBkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnbGlua1RvJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0XHRwYXJlbnQuaXRlbUlkLFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cdH1cblxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGZhbHNlKTtcblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5zKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmNyZWF0ZURlZmVycmVkRW50cnkoaXRlbVR5cGUsIHBhcnNlSW50KGl0ZW1JZCwgMTApLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKTtcblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSxcblx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLmZldGNoVmFsdWUoJ0Z1bmN0aWUnLCBpdGVtSWQsICduZXdjaGFuZ2VzJyk7XG5cblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXRJbml0aWFsKGl0ZW1FbnRyeSwge25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKTtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlIChpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xuXG5cdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIucmVzb2x2ZURlZmVycmVkRW50cnkoaXRlbUVudHJ5LCBmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoaXRlbUVudHJ5LCBmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XG5cblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldERlcml2ZWQoaXRlbUVudHJ5LCBkZXJpdmVkKTtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUZpZWxkcyhpdGVtRW50cnksIGZpZWxkcywgZmFsc2UpO1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHR9XG5cblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblxuXHRcdGlmIChib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcblxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShib2R5Lml0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdC8vIFRPRE8hXG5cdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHRcdC8qXHRcdFx0cHJvY2Vzc01lc3NhZ2UoXG5cdFx0IG1lc3NhZ2UsXG5cdFx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xuXHRcdCByZXR1cm47XG5cblx0XHQgLy8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cblx0XHQgY29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xuXHRcdCB9LFxuXHRcdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHQgLy8gbWF5YmUgZml0c1xuXHRcdCByZXR1cm47ICAvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdFx0IGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XG5cdFx0IH0sXG5cdFx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcblx0XHQgLy8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xuXHRcdCBjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XG5cdFx0IH1cblx0XHQgKTtcblx0XHQgKi9cblx0fVxuXG59XG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxlcic7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gbnVtYmVyLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8YW55Pik6IEJhdGNoU3RhdHVzIHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsZXIsIEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sIGNvbGxlY3Rpb25PcHRpb25zKTogQ2hhbmdlc0NvbXBpbGVyIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxlcihcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHNpbmdsZUl0ZW1zLFxuXHRcdFx0Y29sbGVjdGlvbnMsXG5cdFx0XHRjb2xsZWN0aW9uT3B0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc1Byb2Nlc3Nvcixcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbHVtbkhhbmRsZXIsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSB9IGZyb20gJy4vQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEZhY3RvcnkgfSBmcm9tIFwiLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tIFwiLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsZXJGYWN0b3J5OiBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0KTtcblx0fVxuXG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gXCIuL1F1ZXJ5TWF0Y2hlckZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0ZGVyaXZlZDtcblx0Y29sdW1ucztcblx0ZmllbGRzO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcm90ZWN0ZWQgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblx0fVxuXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKHJlc291cmNlLmVudHJ5KSAmJlxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpc0xvY2FsICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwodGhpcy5lbnRyeSk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLCBlbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIoaXRlbUVudHJ5U2VydmljZSwgZW50cnksIG9wdGlvbnMpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgPSB7fTtcblx0Y29sdW1ucztcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3Rvcihcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG9wdGlvbnMub25EZWFjdGl2YXRlSXRlbVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0bGV0IGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlO1xuXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xuXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cblx0ICpcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxuXHQgKi9cblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHR9XG5cblx0Y2FsbE9uUmVtb3ZlIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xuXHR9XG5cblx0Z3JvdXBCeSAoYXJndW1lbnQpIHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXAgKGFyZ3VtZW50KSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zLCBlbmFibGVDYWxsYmFja3MpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBlbmFibGVDYWxsYmFja3MpXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGRlYWN0aXZhdGUgKCk6IHZvaWQge1xuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4vSXRlbUVudHJ5JztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnNcblx0KSB7XG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdHNhdmUgKCkge1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xuXHR9XG5cblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdG1vdmVJdGVtcyAoaWRBcnJheSwgZGVzdGluYXRpb24sIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcblxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcblxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZCwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheSwgZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZSkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5lbnRyeS5pdGVtVHlwZSkudGhlbih0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jcmVhdGVMb2NhbEVudHJ5KFxuXHRcdFx0XHRcdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWUuZmllbGRzLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5kZXJpdmVkXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdGluQXJyYXksXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogYW55O1xuXHRjb2x1bW5zOiBhbnk7XG5cblx0cGFyZW50OiBudWxsIHwgeyBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyB9ID0gbnVsbDtcblxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IGFueTtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxuXHQpIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXHRcdHRoaXMucXVlcnkgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5UmVzb3VyY2UpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pbml0aWFsID0gaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXM7XG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zLnNsaWNlKCk7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGUsIGl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kLml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gbW9kO1xuXHRcdH1cblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yID0gW10pOiBudW1iZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdGFkZEl0ZW1zIChpdGVtRW50cmllcywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwgPSBmYWxzZSwgZW5hYmxlQ2FsbGJhY2sgPSB0cnVlKTogSXRlbVJlc291cmNlW10ge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbCA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFjaylcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9IGVsc2Vcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xuXHRcdFx0fSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGVuYWJsZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChyZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChmaWx0ZXJGdW5jdGlvbiwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRjb25zdCByZW1vdmVkRnJvbUluaXRpYWwgPSB1cGRhdGVJbml0aWFsID8gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pIDogW107XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xuXHRcdH1cblxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRGcm9tTW9kIG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVhY3RpdmF0ZVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kIChuZXdDb2x1bW5zKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKG5ld0NvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZSwgdGhpcy5pdGVtcyk7XG5cblx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMuY2FsbChcblx0XHRcdFx0XHR0aGlzLCBpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcblx0fVxuXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2s/LCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XG5cdFx0XHRcdGZ1bGxRdWVyeVxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjayk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCkge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblx0fVxuXG5cdHVwZGF0ZUNvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucywgZmFsc2UpO1xuXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSBjb2x1bW5JbmZvLnJlcXVlc3Q7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uSW5mbztcblx0fVxuXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSAmJiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKG1vZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSZXNvdXJjZSAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlcyA9IFtdO1xuXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGN1cnJlbnRSZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9uc1tpc1N1YnRhYkNoYW5nZSA/ICdjbGVhck9uU3ViVGFiQ2hhbmdlJyA6ICdjbGVhck9uVGFiQ2hhbmdlJ10pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRuZXdSZXNvdXJjZXMucHVzaChjb2xsZWN0aW9uUmVzb3VyY2UpO1xuXG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5lbnRyeS5yZXNvdXJjZXMucHVzaChpdGVtUmVzb3VyY2UpOyAvLyByZXNvdXJjZXMgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdyA6LSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlc291cmNlcyA9IG5ld1Jlc291cmNlcztcblx0fVxuXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHRyZXZlcnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXModHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhyZW1vdmVkSXRlbXMpO1xuXHRcdFx0cmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhhZGRlZEl0ZW1zKTtcblx0XHR9XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuL0l0ZW1SZXNvdXJjZVwiO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeSB7XG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcblxuXHRtb2RpZmllZDtcblx0cGFyZW50OiBudWxsIHwgeyBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyB9ID0gbnVsbDtcblxuXHRkZWZlclJlcXVlc3QgPSBmYWxzZTtcblx0ZGVmZXJyZWQ7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IG51bWJlcixcblx0XHRwdWJsaWMgY29sdW1ucz8sXG5cdFx0cHVibGljIGluaXRpYWw/LFxuXHRcdHB1YmxpYyBkZXJpdmVkID0ge30sXG5cdFx0cHVibGljIHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXVxuXHQpIHtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Y3JlYXRlUGF0aCxcblx0SXRlbUVudHJ5U2VydmljZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSBcIi4vSXRlbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRsb2NhbENvcGllczogYW55W10gPSBbXTtcblx0dHJhbnNhY3Rpb25zOiBudW1iZXI7XG5cdGhhc0NoYW5nZXM6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHRzdXBlcihpdGVtRW50cnlTZXJ2aWNlLCBlbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRpdGVtRW50cnlTZXJ2aWNlLnNldE1vZGlmaWVkKGVudHJ5KTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XG5cdH1cblxuXHRzdGFydCAoKSB7XG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcblxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XG5cdH1cblxuXHRyb2xsYmFjayAoKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5sb2NhbENvcGllcy5wb3AoKSwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGlmICh0aGlzLmlzTmV3UmVzb3VyY2UodGhpcykgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGNvbW1pdCAoaW5pdGlhbCkge1xuXHRcdGlmICghaW5pdGlhbClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHQvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cdFx0aWYgKHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrO1xuXHR9XG5cblx0Z2V0TG9jYWxDb3B5ICgpIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb24/KSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZGVzdGluYXRpb24gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXHR9XG5cblx0c2V0RmllbGRzICh2YWx1ZXMsIGNhbGxPbkNoYW5nZSkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XG5cdFx0Y29uc3QgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UgPT09IHVuZGVmaW5lZClcblx0XHRcdGNhbGxPbkNoYW5nZSA9IHRydWU7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmNvcHlGaWVsZHMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbklkXTtcblxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2Fybignc2V0RmllbGRzOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cykge1xuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jYWxsT25DaGFuZ2UodGhpcy5lbnRyeSwgcHJldmlvdXMpO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz8pIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9ja2FibGUoaXRlbUVudHJ5KSA/XG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKVxuXHRcdCkudGhlbihcblx0XHRcdGxvY2tUb2tlbiA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgZmFsc2UsIHBhcmFtZXRlck1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUxvY2FsICgpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldERpc3BsYXlOYW1lKGl0ZW1FbnRyeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRJdGVtc1RvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHMvXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gXCIuL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIG5ldyAob3B0aW9ucy5lZGl0Q29sbGVjdGlvbiA/IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlKShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uSGFuZGxlciwgQ29sdW1uVXRpbCB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSBcIi4vQ29sdW1uU2V0RmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0ZW5hYmxlQ2FjaGluZyxcblx0XHRcdGluY2x1ZGVJZENvbHVtblxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVSZXF1ZXN0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3RGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoY29tcGlsYXRpb24sIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlLCBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tIFwiLi9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBjb2x1bW5zPywgaW5pdGlhbD86IG9iamVjdCwgZGVyaXZlZD86IG9iamVjdCwgcmVzb3VyY2VzPzogSXRlbVJlc291cmNlW10pOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHRyZXNvdXJjZXNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQpIHtcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnlcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlRmFjdG9yeSB9IGZyb20gXCIuL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIEl0ZW1FbnRyeVNlcnZpY2UsIE1vZHVsZUNoYW5nZXNDb21waWxlciB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXIoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRyb290SXRlbSxcblx0XHRcdHNpbmdsZUl0ZW1DYWNoZSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBmaWVsZHM6IG9iamVjdCwgaXRlbVR5cGU/OiBzdHJpbmcpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWQsXG5cdFx0XHRmaWVsZHMsXG5cdFx0XHRpdGVtVHlwZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZTtcblxuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblxuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXG5cdC8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjAuMzInO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlID0gbmV3IEl0ZW1SZXNvdXJjZVNlcnZpY2UoKTtcblxuXHRcdHRoaXMubG9ja1NlcnZpY2UgPSBuZXcgTG9ja1NlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSA9IG5ldyBRdWVyeU1hdGNoZXJGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xuXG5cdFx0dGhpcy5jb2x1bW5DYWNoZSA9IG5ldyBDb2x1bW5DYWNoZSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5DYWNoZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeSgpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1FbnRyeUZhY3RvcnksIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5rZXlTZXJ2aWNlLCB0aGlzLnF1ZXJ5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksIHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkodGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5KHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LCB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LCB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmFwaUZvcm1hdHRlciwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkodGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsIHRoaXMuYXBpRm9ybWF0dGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSh0aGlzLml0ZW1FbnRyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBsb2NhbENhY2hlTWFuYWdlciwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LCB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMua2V5U2VydmljZSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5zb2NrZXRNZXNzYWdlSGFuZGxlciA9IG5ldyBTb2NrZXRNZXNzYWdlSGFuZGxlcihwcm9taXNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmFwaUZvcm1hdHRlciwgZXJyb3JIYW5kbGVySW50ZXJmYWNlKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9tYWluJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbiJdLCJzb3VyY2VSb290IjoiIn0=
6833
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU2V0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0VkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21haW4udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENB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QUUsSUFBSSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25TLENBQUM7SUFDRixhQUFDO0FBQUQsQ0FBQzs7QUFFSztBQUNOLENBQUM7QUFFSyxrQkFBb0IsS0FBSztJQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdKc0I7QUFDSztBQUNIO0FBRUM7QUFDRSIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBkZWZhdWx0cztcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlOnRyaXBsZS1lcXVhbHNcblx0XHRpZiAobmVlZGxlID09IGhheSlcblx0XHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXkgKHNvdXJjZSwgY2FsbGJhY2spIHtcblx0Y29uc3QgZmlsdGVyZWQgPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlNcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xuXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XG5cblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcblxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcblx0cmV0dXJuICEhKG5vZGUgJiZcblx0XHQoXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcblx0XHQpXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XG5cdGlmIChvMSA9PT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcblxuXHRsZXQgbGVuZ3RoO1xuXHRsZXQga2V5O1xuXHRsZXQga2V5U2V0O1xuXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcblxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcblxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcblxuXHRpZiAoZGVzdGluYXRpb24pIHtcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcblx0XHR9XG5cblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XG5cdFx0fVxuXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xuXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcblxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XG5cdFx0fVxuXHR9XG5cblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0NoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKHNvdXJjZSwgZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2hhbGxvd0NvcHlGaWVsZHMgKHNoYWxsb3dTb3VyY2UsIGRlZXBTb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW4uaWRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlLCBmaXJzdCwgc2Vjb25kKSB7XG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcblx0fVxuXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XG5cdH1cblxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xuXHR9XG5cblx0Y2xvbmVEYXRlIChkYXRlKSB7XG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcblx0fVxuXG5cdGlkZW50aXR5IChpbnB1dCkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHR0ZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IHN0cmluZywgcGFyZW50SWQ/OiBudW1iZXIpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xuXHR9XG5cblx0ZGVsZXRlIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykpO1xuXHR9XG5cblx0cmVxdWVzdFNrZWxldG9uIChwYXJhbXM6IGFueSwgcmVxdWVzdENhbmNlbGVyPzogUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XG5cdH1cblxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IHN0cmluZywgcGFyZW50SWQ6IG51bWJlciwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbXMpKTtcblx0fVxuXG5cdGNvbHVtbnMgKGl0ZW1UeXBlOiBzdHJpbmcsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IG9iamVjdCwgY29sdW1uczogb2JqZWN0LCBhbGxMaW5rcz86IGJvb2xlYW4sIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBhbGxMaW5rcywgbGltaXQpKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtVHlwZU1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpZEFycmF5Lmxlbmd0aDsgaSsrKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWRBcnJheVtpXSwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Y29uc3Qga2V5cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xuXHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xuXHRcdH1cblxuXHRcdGlmIChyZXR1cm5LZXlzKVxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXS5sZW5ndGg7IGkrKylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdH1cblxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcblx0fVxuXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xuXHRDQUNIRUQgPSAnY2FjaGVkJyxcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdExPQ0FMID0gJ2xvY2FsJ1xufVxuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonOyIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG4vKmV4cG9ydCB0eXBlIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge1xuXHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0/OiBJdGVtRW50cnlbXTtcblx0W0VOVFJZX1NUQVRVUy5FWFBBTkRdPzogSXRlbUVudHJ5W107XG5cdFtFTlRSWV9TVEFUVVMuTE9DQUxdPzogSXRlbUVudHJ5W107XG5cdFtFTlRSWV9TVEFUVVMuUFJPTUlTRURdPzogUHJvbWlzZTxJdGVtRW50cnlbXT47XG5cdFtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXT86IFByb21pc2U8SXRlbUVudHJ5W10+O1xuXHRbRU5UUllfU1RBVFVTLlJFU09MVkVdPzogSXRlbUVudHJ5W107XG59OyovXG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1cyB7XG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBudW1iZXIsXG5cdFx0cHVibGljIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+IC8vIHRvZG86IHByb21pc2UgcmV0dXJuIHR5cGVcblx0KSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0dGhpcy5lbnRyaWVzW0VOVFJZX1NUQVRVU1tzdGF0dXNdXSA9IFtdO1xuXHR9XG5cblx0YWRkIChlbnRyeVN0YXR1czogRW50cnlTdGF0dXM8SXRlbUVudHJ5Pik6IHZvaWQge1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcblxuXHRcdHRoaXMuZW50cmllc1tzdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcblx0fVxuXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCk6IG51bWJlcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEFycmF5ICgpOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRyZXN1bHQucHVzaChzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxlciB7XG5cdGNvbXBpbGF0aW9uID0ge1xuXHRcdGNyZWF0ZToge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0XHR1cGRhdGU6IHt9LFxuXHRcdG1vdmU6IHt9XG5cdH07XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uT3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKCk7XG5cdFx0dGhpcy5wb3N0UHJvY2VzcygpO1xuXHR9XG5cblx0Z2V0UGFyZW50IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID9cblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgOlxuXHRcdFx0e2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnksIHBhcmVudElkLCBwYXJlbnRUeXBlKSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoaXRlbUVudHJ5KTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRwb3N0UHJvY2VzcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUVudHJ5W2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcblx0XHRcdFx0dGhpcy5jb21waWxhdGlvbi5tb3ZlLFxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBbXV1cblx0XHRcdCk7XG5cblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc0VkaXRhYmxlQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbk9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXS5lZGl0O1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNFZGl0YWJsZUl0ZW1zIChjb2xsZWN0aW9uRW50cnkpIHtcblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdLmVkaXRJdGVtcztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmNvbGxlY3Rpb25zKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudCAhPT0gbnVsbCA/IHBhcmVudC5pdGVtSWQgOiAwO1xuXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRhYmxlQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpKSB7XG5cdFx0XHRcdGxldCBhZGRlZEl0ZW1zO1xuXHRcdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGFkZGVkSXRlbSkpXG5cdFx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudElkLCBwYXJlbnQuaXRlbVR5cGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oYXNFZGl0YWJsZUl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBDaGFuZ2VzQ29tcGlsZXIgfSBmcm9tIFwiLi9DaGFuZ2VzQ29tcGlsZXJcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IEl0ZW1IYW5kbGVyIH0gZnJvbSBcIi4vSXRlbUhhbmRsZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB0aGUgZG9jdW1lbnQgY3JlYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxuXHRnZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5IChpdGVtVHlwZSkge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbGJlZHJhZyc6XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsJzpcblx0XHRcdGNhc2UgJ01pbmZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdH1cblx0fVxuXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGV4ZWN1dGUgKHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucywgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UsIHBhcmFtZXRlcnM/LCBjb2xsZWN0aW9uT3B0aW9ucz8sIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz8pIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdHMoXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxlckZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucywgY29sbGVjdGlvbk9wdGlvbnMpLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChjb21waWxhdGlvbiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50KS5ydW4oKTtcblx0XHRjb25zdCByZXNwb25zZXMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cylcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXNwb25zZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xuXHRcdFx0aWYgKGlzRnVuY3Rpb24ob25BZnRlckNyZWF0ZUNhbGxiYWNrKSlcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZSwgY29udmVyc2lvbk1hcCkge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG5ld0l0ZW1JZCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUZpZWxkcyhpdGVtRW50cnksIGZpZWxkcyk7XG5cblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucywgdHJ1ZSk7XG5cblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcmlvcml0aXplVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXMgPSBbW10sIFtdLCBbXV07XG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXG5cdFx0XHRcdHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcblx0fVxuXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3RzID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKSB7XG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgocGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZm9ybWF0UmVxdWVzdChpdGVtRW50cnkpO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGNvbGxlY3Rpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAoZW50cnkuZml0dGluZy5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoZW50cnkuY29sbGVjdGlvbi5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0RGVyaXZlZChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlRmllbGRzKGl0ZW1FbnRyeSwgZmllbGRzKTtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uKSB7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGlkQXJyYXkgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpZEFycmF5XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkQXJyYXkgPSByZXNwb25zZS5pdGVtcztcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxuXHRcdFx0XHRleGVjdXRlTW92ZVJlcXVlc3QocGFyZW50VHlwZSwgcGFyZW50SWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0XHQvLyBvbmx5IHRoZSBwYXJlbnQgaWQgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWRcblx0XHRcdGNvbnN0IGNvbXBpbGF0aW9uRW50cmllcyA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXTtcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdHJlcXVlc3RzLnB1c2goXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0bmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCA/IG5ld1BhcmVudElkIDogcGFyZW50SWQsXG5cdFx0XHRcdFx0dGhpcy5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZShyZXNwb25zZSwgY29tcGlsYXRpb25FbnRyaWVzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAocmVzcG9uc2UsIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlQ29sbGVjdGlvbk1hcCA9IHt9O1xuXHRcdGNvbnN0IGFkZENvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHQpO1xuXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aChcblx0XHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXG5cdFx0XHRbe30sIHt9LCBbXV1cblx0XHQpO1xuXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcCwgbWV0aG9kKSB7XG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSlbbWV0aG9kXShcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczogYW55ID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtQ29sdW1ucyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gdGhlcmUgbWlnaHQgYmUgaXRlbSBjb2x1bW5zIChsaWtlIHN1YnByb2plY3QpIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZm9yRWFjaChcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlSXRlbUZpZWxkcyhpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlSXRlbUZpZWxkcyhpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcblx0cHJpdmF0ZSBleGVjdXRlUmVxdWVzdHMgKGNoYW5nZXM6IENoYW5nZXNDb21waWxlciwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXMuY29tcGlsYXRpb247XG5cdFx0Y29uc3Qgc2luZ2xlSXRlbXMgPSBjaGFuZ2VzLnNpbmdsZUl0ZW1zO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY2hhbmdlcy5jb2xsZWN0aW9ucztcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoY29tcGlsYXRpb24uY3JlYXRlLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVNb3ZlUmVxdWVzdHMoY29tcGlsYXRpb24ubW92ZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LCAvLyBpdGVtIGlkIGNvbnZlcnNpb24gbWFwXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE1BWUJFID0gJ21heWJlJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IGVudHJ5KVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJ5KSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5pbmRleE9mKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRpZiAoaW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zbGljZSgpO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkubWF0Y2hQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm1hdGNoUGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogT25seSByZXNvdXJjZXNcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cblx0ICovXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRUeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRJZFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSwgZmllbGRzKSB7XG5cdFx0Y29uc3QgZml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IG1heWJlUmVzdWx0ID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtmaXR0aW5nOiBmaXR0aW5nUmVzdWx0LCBub3RmaXR0aW5nOiBub3RGaXR0aW5nUmVzdWx0LCBtYXliZTogbWF5YmVSZXN1bHR9O1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QocGFyZW50VHlwZSwgcGFyZW50SWQsIGZpZWxkcywgaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcblxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcblx0XHRcdFx0Zml0dGluZ1Jlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRtYXliZVJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG5vdEZpdHRpbmdSZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZSwgZW50cnlLZXkpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZW50cnkucmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxuXHRcdFx0XHRxdWVyeTogbnVsbCxcblx0XHRcdFx0cXVlcnlJdGVtVHlwZTogbnVsbCxcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2UsXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxuXHRcdFx0XHRlbnRyeUtleTogJycsXG5cdFx0XHRcdGFkZExvY2FsSXRlbXM6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcik6IG51bWJlcltdIHtcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxuXHQgKi9cblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbik6IEl0ZW1FbnRyeVtdIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZW1vdmVkRW50cmllcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtRW50cnkpKVxuXHRcdFx0XHRmaWx0ZXJlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZW1vdmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksIENvbGxlY3Rpb25FbnRyeUZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSBcIi4uL2luZGV4XCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSBcIi4vQ29sdW1uVXRpbFwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbVJlcXVlc3RTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbVJlcXVlc3RTZXJ2aWNlXCI7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZFtwYXJlbnRJZF0pO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkRXhwYW5kW3BhcmVudElkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlJFU09MVkVdKVxuXHRcdFx0cmVzdWx0LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXSlcblx0XHRcdHJlc3VsdC5wdXNoKHBhcmVudElkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGFkZEl0ZW1zVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkVG9Db2xsZWN0aW9ucyh0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLCBmYWxzZSk7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXMgPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChwYXJlbnRJZCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS5pdGVtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG5ld0NvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cmllc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcblx0XHRcdFx0XHRjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnkudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hFeHRlbmQgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUlkQXJyYXkgPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxuXHRcdHBhcmVudElkQXJyYXk6IG51bWJlcltdLFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IHRoaXMuZ2V0UmVxdWVzdElkcyhyZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xuXHRcdFx0XHRcdFx0XHRudWxsIDpcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKClbMF0sXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKHJlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2VbRU5UUllfU1RBVFVTLkNBQ0hFRF07XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBjb252ZXJzaW9uTWFwID0ge30pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1zID0gW107XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcblxuXHRcdC8vIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3QgKGRlcGVuZGVuY2llcylcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpXG5cdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbS5pdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuY2xvbmVJdGVtKFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG9wdGlvbnMucGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRjbG9uZWRFbnRyeS5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdFx0Y2xvbmVkSXRlbXMucHVzaChjbG9uZWRFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlKGl0ZW1UeXBlLCBvcHRpb25zLCBjb2xsZWN0aW9uRW50cnkuY29sdW1ucywgY2xvbmVkSXRlbXMpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBjb2x1bW5zLCBpdGVtczogSXRlbUVudHJ5W10pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMuYWRkKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnNcblx0XHRcdClcblx0XHQpLnJlc29sdmUoXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0XHRcdGl0ZW1zOiBpdGVtc1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPIGFkZCB0eXBlXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cGFyZW50SWRBcnJheTogbnVtYmVyW10sXG5cdFx0aXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qgc3RhdHVzSWQgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0cmVzdWx0W0VOVFJZX1NUQVRVU1tzdGF0dXNJZF1dID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gdXNlIHByb2Nlc3NFbnRyeU9wdGlvbnMgdG8gY2xvbmVcblxuXHRcdFx0bGV0IHN0YXR1c1Jlc291cmNlO1xuXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcblxuXHRcdFx0c3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZENvbGxlY3Rpb25NYXAgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGFjY3VtdWxhdG9yLFxuXHRcdGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlID0gdGhpcy5lbnRyaWVzXG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvZG86IHBhcmVudCB0eXBlXG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudC5pdGVtSWQsXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RmllbGRzKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcblxuXHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChzdGF0dXMgPT09ICdmaXR0aW5nJyA/IGl0ZW1FbnRyeSA6IGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcblxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdC8vIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gZW50cnkgaXMgbm90IGZ1bGx5IGxvYWRlZCB5ZXQsIHdlJ2xsIGhhdmUgdG8gcmVseSBvbiB0aGUgb3B0aW9uc1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdGNvbnN0IGVudHJ5Q29sdW1ucyA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0bGV0IGlzQ29sdW1uU3Vic2V0ID0gZmFsc2U7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0ZW50cnlPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoZW50cnlDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NvbHVtbnM6IHRydWUgZm9yIGNvbGxlY3Rpb25zIGlzIGRlcHJlY2F0ZWQhJyk7XG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRydWU7XG5cdFx0fSBlbHNlXG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucywgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRzdGF0dXM6IGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucywgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXROZXdFbnRyeVN0YXR1cyhpdGVtVHlwZSwgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllcyk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhjYWNoZWRFbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGNhY2hlZEVudHJ5LFxuXHRcdFx0c3RhdHVzOiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjYWNoZWRFbnRyeS5jb2x1bW5zLnJlcXVlc3QsIGNhY2hlZEVudHJ5LmNvbHVtbnMudHJ1ZSkgP1xuXHRcdFx0XHRFTlRSWV9TVEFUVVMuQ0FDSEVEIDogRU5UUllfU1RBVFVTLkVYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXROZXdFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblx0XHRsZXQgZGVmZXJyZWRPcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQodGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucykpLFxuXHRcdFx0XHRcdHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkT3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdFx0ZGVmZXJyZWRPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhkZWZlcnJlZE9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5tZXJnZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTsgLy8gd2lsbCBhbHNvIGFkZCB0aGUgZGVmZXJyZWQgZW50cnlcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0c3RhdHVzOiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoc3RhdHVzUmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlKTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5jYWNoZWQpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuY2FjaGVkW3BhcmVudElkXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZSkge1xuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdLnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmV4cGFuZCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5leHBhbmRbcGFyZW50SWRdO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkudXBkYXRlQ29sdW1ucyhpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UubG9jYWxbcGFyZW50SWRdO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KCAvLyBUT0RPOiB1c2UgdGFiIGNhY2hlP1xuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudC5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdHBhcmVudElkLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0cmVtb3ZlSXRlbXNGcm9tQW5kQWRkSXRlbXNUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcyksXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdC8vIFRPRE86IG1heWJlXG5cdHJlbW92ZUl0ZW1zRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cblx0XHRsZXQgY29sdW1uSW5mbztcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cmllcy5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMuYWRkTG9jYWxJdGVtcyA/XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSA6XG5cdFx0XHRcdFx0XHRcdFx0W11cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5JbmZvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxuXHRcdFx0XHRvbkFkZDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZlYXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUNvbGxlY3Rpb246IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XG5cdGNhY2hlID0ge307XG5cdGFsbENvbHVtbnMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk6IHsgbWlzc2luZzogYW55W10gfCB0cnVlLCBjYWNoZWQ6IG9iamVjdCB9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXBvbnNlQWNjdW11bGF0b3IgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXBvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xuXHR9XG5cblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0gY29sdW1ucztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdSZXF1ZXN0ID0ge307XG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKG1pc3NpbmdSZXF1ZXN0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gXCIuL0NvbHVtblV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XG5cdGV4cGFuc2lvbk1hcDogYW55ID0ge307XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zOiBhbnkgfCBib29sZWFuLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IGFueVxuXHQpIHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3Rcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xuXHRcdH0gZWxzZVxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0fVxuXG5cdHJ1biAoY29sdW1uSW5mbzogYW55LCByZXR1cm5FeHBhbnNpb25SZXN1bHQ6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBjb2x1bW5JbmZvSWQgPSBjb2x1bW5JbmZvLmlkO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXS5tZXJnZWQ7XG5cblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRjb2x1bW5JbmZvLnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5JbmZvLnRydWVcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IG51bGwgOiBjb2x1bW5JbmZvO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5JbmZvKTtcblxuXHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0ubWVyZ2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5JbmZvOiBhbnkpIHtcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5JbmZvLnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVzcG9uc2VDb2x1bW5zKGNvbHVtbkluZm8ucmVzcG9uc2UsIHRoaXMucmVzcG9uc2VDb2x1bW5zKVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdGZhbHNlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXG5cdFx0bWVyZ2VkLnRydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCBjb2x1bW5JbmZvLnRydWU7XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sdW1uQ2FjaGUgfSBmcm9tICcuL0NvbHVtbkNhY2hlJztcbmltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXMpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblx0dHJ1ZTogYm9vbGVhbjtcblx0bGluayA9IG51bGw7XG5cdG1haW4gPSBbXTtcblx0ZGVyaXZlZCA9IFtdO1xuXHRyb290ID0gW107XG5cdGxlYWYgPSBbXTtcblx0Zm9ybWF0dGVkID0ge1xuXHRcdG1haW46IFtdLFxuXHRcdGRlcml2ZWQ6IFtdXG5cdH07XG5cdGZpbHRlcmVkID0gW107XG5cdGN1c3RvbSA9IFtdO1xuXHRzZWFyY2hhYmxlID0gW107XG5cdGl0ZW0gPSBbXTtcblx0bm90SXRlbSA9IFtdO1xuXG5cdHJlcXVlc3QgPSBbXTtcblx0cmVzcG9uc2UgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwdWJsaWMgaXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnMsXG5cdFx0cHVibGljIGVuYWJsZUNhY2hpbmcgPSB0cnVlLFxuXHRcdHB1YmxpYyBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlXG5cdCkge1xuXHRcdHRoaXMudHJ1ZSA9IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMoKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKCkge1xuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpIDpcblx0XHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXSkge1xuXHRcdFx0dGhpcy5tYWluLnB1c2goXG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uSW5mbyhcblx0XHRcdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXVtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0bnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvY2Vzc1JlcXVlc3RDb2x1bW5zICgpIHtcblx0XHR0aGlzLnJlcXVlc3QgPSB0aGlzLnJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiB0aGlzLnJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCB0aGlzLml0ZW1UeXBlLCBudWxsKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgdGhpcy5pdGVtVHlwZSwgbnVsbCkpO1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGNvbHVtblR5cGUsIHBhcmVudCkge1xuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XG5cblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAodGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGNvbHVtblR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGNvbHVtblR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2NvbHVtblR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhyZXNwb25zZUNvbHVtbiwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQpO1xuXHR9XG5cblx0Z2V0Q29sdW1uSW5mbyAocmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuLCBwYXJlbnQpIHtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRwYXRoOiBpc0Rlcml2ZWQgP1xuXHRcdFx0XHRwYXJlbnQucGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQsXG5cdFx0XHRhcGlDb2x1bW46IHJlc3BvbnNlQ29sdW1uLFxuXHRcdFx0bGV2ZWw6IGlzRGVyaXZlZCA/IHBhcmVudC5sZXZlbCArIDEgOiAwLFxuXHRcdFx0aXNMZWFmOiBjaGlsZHJlbi5sZW5ndGggPT09IDAsXG5cdFx0XHRpdGVtVHlwZTogJycsXG5cdFx0XHRjaGlsZHJlbjogW10sXG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHR0YWlsUGF0aDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAoaXNEZXJpdmVkKSB7XG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0Y29sdW1uSW5mby5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0XHRjb2x1bW5JbmZvLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID4gMCA/XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQ7XG5cdFx0fSBlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW3RoaXMuY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0dGhpcy5saW5rID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZXNwb25zZUNvbHVtbi5pdGVtVHlwZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRjb25zb2xlLndhcm4oJ2l0ZW1UeXBlIHVuZGVmaW5lZCBpbiBjb2x1bW4nLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlID0gcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGU7XG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xuXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhjaGlsZCwgY29sdW1uSW5mby5pdGVtVHlwZSwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uSW5mbztcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgY29weSwgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBlcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBlcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcblx0fVxuXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XG5cdH1cblxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0XHRyZXR1cm4gMC41O1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiAxLjU7XG5cblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcblx0XHR9XG5cdH1cblxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxuXHRpc0NvbHVtblN1YnNldCAoZmlyc3QsIHNlY29uZCwgc2Vjb25kVHJ1ZSkge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcblxuXHRcdC8vIHdoZW4gc2Vjb25kVHJ1ZSBpcyB0aGUgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBkZXJpdmVkIGNvbHVtbnNcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgc2Vjb25kKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0aGlzLmNvbnRhaW5zQ29sdW1uKFxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1uTWFwKSB7XG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gcGFyc2VkQ29sdW1uLmNoaWxkcmVuO1xuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHtBcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xuXHQgKi9cblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IGNvcHkoZmlyc3QpO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihjb2x1bW4sIG1lcmdlZCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0ZGlmZmVyZW5jZS5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxuXHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0W2NvbHVtbi5pZF06IGFkZGVkQ29sdW1uc1xuXHRcdH07XG5cdH1cblxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pIHtcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdDtcblx0fVxuXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XG5cblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCBhZGRSZXF1ZXN0Q29sdW1ucykge1xuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zID0gW107XG5cdFx0bGV0IHJlcXVlc3RDb2x1bW5zID0gY29weShhZGRSZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHR0aGlzLnByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMoXG5cdFx0XHRjb25maWdDb2x1bW5zLFxuXHRcdFx0bG9jYWxDb2x1bW5zLFxuXHRcdFx0KGNvbmZpZ0lkLCBjb2x1bW5JZCkgPT4ge1xuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdH0sXG5cdFx0XHQoY29uZmlnSWQsIGxvY2FsQ29sdW1uKSA9PiB7XG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKGlzTGVhZikge1xuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXG5cdFx0XHR9KSAtIDE7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXG5cdFx0KTtcblx0fVxuXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2xsZWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbixcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmIChlbnRyeS5maXR0aW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZW50cnkuY29sbGVjdGlvbi5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXG5cdFx0cmV0dXJuIHJlcXVlc3RSZXNvdXJjZTtcblx0fVxuXG5cdHNldFJlcXVlc3RQYXJlbnQgKHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcblxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IGFueSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdFx0XHRpdGVtczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHt9XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRsZXQgbGlua3M7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHRyZXF1ZXN0LnBhcmVudElkW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCxcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4vSXRlbUNhY2hlJztcbmltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tICcuL0l0ZW1IYW5kbGVyJztcbmltcG9ydCB7IEl0ZW1SZXF1ZXN0U2VydmljZSB9IGZyb20gXCIuL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tIFwiLi9Mb2NhbENhY2hlXCI7XG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tIFwiLi9RdWVyeVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxlckZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdC8vIGlkIGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1EZWZpbml0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IGFueSwgb3B0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXk6IGFueSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KGl0ZW1JZCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgb3B0aW9uczogb3B0aW9ucywgaXRlbUlkOiBpdGVtSWR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5ICE9PSBudWxsKSB7XG5cdFx0XHRzd2l0Y2ggKHN0YXRlS2V5LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbmV3Jzpcblx0XHRcdFx0XHQvLyBpZiAoc3RhdGVLZXkudGVtcGxhdGUubGVuZ3RoID4gMClcblx0XHRcdFx0XHQvLyBcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge3R5cGU6IHN0YXRlS2V5LnRlbXBsYXRlfTtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkdXBsaWNhdGUnOlxuXHRcdFx0XHRcdG9wdGlvbnMuZHVwbGljYXRlID0gc3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpIC8vIHRvZG86IHJlZmFjdG9yIHRoaXNcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IHN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJlc3VsdC5pdGVtSWQgPSBpdGVtSWQ7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIHt9LCBmYWxzZSk7XG5cblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIHJlc3VsdCwgY29sbGVjdGlvbkNhY2hlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaXRlbUlkXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT59XG5cdCAqXG5cdCAqIEkgZXhwZWN0IG5vdCBhIHRlbXBsYXRlIHJlcXVlc3QgZnJvbSBpdGVtaGFuZGxlci5mZXRjaEl0ZW0gYmVjYXVzZSBhZGRTaW5nbGVJdGVtIGRvZXMgbm90IGhhbmRsZSB0aGVcblx0ICogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxuXHQgKi9cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0aWYgKCg8SXRlbUVudHJ5PiBpdGVtRW50cnkpLml0ZW1UeXBlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbSgoPEl0ZW1FbnRyeT4gaXRlbUVudHJ5KSwgb3B0aW9ucywgZmFsc2UpO1xuXG5cdFx0XHRcdC8vIHRvZG86IG1ha2Ugc2F2ZSB3aGVuIGl0ZW0gaXMgbm90IEl0ZW1FbnRyeVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7fTtcblxuXHRcdHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGR1cGxpY2F0ZUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSkge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0SXRlbURlZmluaXRpb24oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXREdXBsaWNhdGVTdGF0ZUtleShkdXBsaWNhdGVJZCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeURlZihkZWZpbml0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJldHVybiB2YWx1ZSBpcyBkZXBlbmRlZCBvbiB0aGUgcmV0dXJuIGxpbmtzIGJvb2xlYW4uIHRydWUgcmV0dXJucyB0aGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcC5cblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSb290XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSwgcmV0dXJuTGlua3M6IGJvb2xlYW4sIGlzUm9vdDogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0aWYgKGlzUm9vdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aXNSb290ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcblxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuTGlua3MgPyB7bWFpbjogbWFpbiwgbGlua2VkOiBsaW5rZWR9IDogbWFpbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGVudHJ5LCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGVudHJ5T3B0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oZW50cnksIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHR0aGlzLmdldExvY2FsQ2FjaGUoKS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHR0aGlzLmdldExvY2FsQ2FjaGUoKS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0Ly8gXHRcdFx0dmFyIHJlcXVlc3RDb2x1bW5zID0ge307XG5cdFx0Ly8gXHRcdFx0cmVxdWVzdENvbHVtbnNbbGlua1R5cGVdID0gWydpZCddO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtQnlEZWYgKGRlZmluaXRpb246IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24uaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKGRlZmluaXRpb24ub3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGxldCBtYWluRW50cnk6IEl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpZiAoKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubGlua2VkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcygoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5saW5rZWQsIGRlZmluaXRpb24ub3B0aW9ucywgZmFsc2UpO1xuXHRcdFx0XHRcdG1haW5FbnRyeSA9ICg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLm1haW47XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdG1haW5FbnRyeSA9IDxJdGVtRW50cnk+IGl0ZW1FbnRyeVJlc291cmNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0obWFpbkVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMsIGlzUm9vdCk7IC8vIGlzUm9vdFxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKG5ld0l0ZW1JZDogbnVtYmVyLCBpdGVtUmVzb3VyY2U6IGFueSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jbG9uZUl0ZW0obmV3SXRlbUlkLCBpdGVtUmVzb3VyY2UuZW50cnkpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogYW55LCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuY2xvbmUoXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeSxcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwXG5cdFx0XHQpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKGNsb3NlVGFiOiBib29sZWFuLCBwYXJhbWV0ZXJzOiBhbnksIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s6IGFueSwga2VlcFRhYkhlYWRpbmcgPSBmYWxzZSkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldEN1cnJlbnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIScpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeS5jb25zdHJ1Y3QobG9jYWxDYWNoZS5yb290SXRlbSwgbG9jYWxDYWNoZS5pdGVtcywgbG9jYWxDYWNoZS5jb2xsZWN0aW9ucykucHJvY2VzcygpO1xuXHR9XG5cblx0Ly8gdXNlZCBpbiB0aW1lUmVnaXN0cmF0aW9uQ29udHJvbGxlclxuXHRhZGRTaW5nbGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogYW55LCBpc1Jvb3Q/OiBib29sZWFuKTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChsb2NhbENhY2hlLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIHVzZWQgaW4gd2FyZWhvdXNlSXRlbUNhY2hlRmFjdG9yeVxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IGFueSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zPzogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRpZiAocHJvY2Vzc09wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHByb2Nlc3NPcHRpb25zID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0cHJvY2Vzc09wdGlvbnMgPyB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMocmVzb3VyY2VPcHRpb25zKSA6IHJlc291cmNlT3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnM6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gbG9jYWxDYWNoZS5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sXG5cdFx0XHRcdHJlc291cmNlT3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChsaW5rZWRFbnRyaWVzOiBhbnlbXSwgb3B0aW9uczogYW55LCBhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuKTogSXRlbVJlc291cmNlSXRlbVR5cGVNYXAge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdLnB1c2gobG9jYWxDYWNoZS5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcblxuXHRcdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBjb2xsZWN0aW9uTWFwLCBjb2xsZWN0aW9uQ2FjaGUpO1xuXG5cdFx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdFx0XHRsb2NhbENhY2hlLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDYWNoZU1hbmFnZXIodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDYWNoZU1hbmFnZXIodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKFxuXHRcdFx0dGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyaWVzLCB0cnVlKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlXG5cdFx0KTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IGFueVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMsIGZhbHNlKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlXG5cdFx0KTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBhbnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucz86IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucywgcHJvY2Vzc09wdGlvbnMpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IGFueSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25CZWZvcmVTYXZlJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlU3VjY2VzcycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlV2l0aG91dENsb3NpbmcgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdGVudHJpZXMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIXRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Z2V0IChpdGVtVHlwZSwgaXRlbUlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlLCBpdGVtSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRwYXJlbnQuaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpXG5cdFx0KTtcblxuXHRcdHJldHVybiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4vQXBpRm9ybWF0dGVyJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuL0tleVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XG5cdEFMTF9QRVJNSVNTSU9OUyA9IDc7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdHJlc2V0RGVyaXZlZCAoaXRlbUVudHJ5LCBjb2x1bW5JZHMpOiB2b2lkIHtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1ucykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcblxuXHRcdFx0XHRkZWxldGUgaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRlZmVyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgZGVmZXJSZXF1ZXN0KTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0aXRlbUVudHJ5LmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0fVxuXG5cdHJlamVjdCAoaXRlbUVudHJ5LCBlcnJvciA9IHRoaXMudW5kZWZpbmVkSXRlbUVycm9yKTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcblxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKGl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdGl0ZW1FbnRyeS5yZXNvdXJjZXMgPSBbXTtcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IGl0ZW1FbnRyeS5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGdldEZpZWxkcyAoaXRlbUVudHJ5KSB7XG5cdFx0aWYgKGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5tb2RpZmllZDtcblxuXHRcdHJldHVybiBpdGVtRW50cnkuaW5pdGlhbDtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGV4cGFuZCAoZW50cnksIG1haW4sIGRlcml2ZWQsIGV4cGFuZFJlc291cmNlKSB7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2U7XG5cdFx0ZW50cnkuY29sdW1ucyA9IGV4cGFuZFJlc291cmNlLm1lcmdlZDtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkuaW5pdGlhbCxcblx0XHRcdG1haW4sXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cblx0XHQpO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXG5cdFx0XHRlbnRyeS5kZXJpdmVkLFxuXHRcdFx0ZGVyaXZlZCxcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxuXHRcdCk7XG5cblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBlbnRyeTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0dGVtcGxhdGVPcHRpb25zOiB7fSxcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdC8vIGtleTogaW5pdGlhbCAvIG1vZGlmaWVkXG5cdC8vIGZpZWxkcyAqaGF2ZW4ndCogYmVlbiBmb3JtYXR0ZWQgeWV0XG5cdHVwZGF0ZUZpZWxkcyAoZW50cnksIHNvdXJjZSwgb3ZlcndyaXRlID0gdHJ1ZSkge1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLmZvcm1hdHRlZC5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UobW9kaWZpZWQsIGZvcm1hdHRlZENvbHVtbnMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0dXBkYXRlSXRlbVZhbHVlIChlbnRyeSwgZmllbGRzLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZHNbY29sdW1uSWRdO1xuXG5cdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdG5ld1ZhbHVlID0gZW50cnkucGFyZW50Lml0ZW1JZDtcblx0XHR9IGVsc2Vcblx0XHRcdG5ld1ZhbHVlID0gdGhpcy5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdH1cblxuXHR1cGRhdGVJdGVtRmllbGRzIChlbnRyeSwgY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gZW50cnkuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIG1vZGlmaWVkLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblx0fVxuXG5cdHByb2Nlc3MgKGVudHJ5KSB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IGVudHJ5LmNvbHVtbnMuZm9ybWF0dGVkO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZW50cnkuaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShlbnRyeS5kZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoZW50cnkpIHtcblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChlbnRyeS5pdGVtSWQpID8ge30gOiBlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0c2V0RGlzcGxheU5hbWUgKGVudHJ5KSB7XG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKGVudHJ5KTtcblxuXHRcdGlmIChyZXN1bHQpXG5cdFx0XHRlbnRyeS5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblx0fVxuXG5cdGdldERpc3BsYXlOYW1lIChlbnRyeSkge1xuXHRcdGNvbnN0IGZpZWxkcyA9IHR5cGVvZiBlbnRyeS5tb2RpZmllZCA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xuXG5cdFx0c3dpdGNoIChlbnRyeS5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXG5cdFx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbdGhpcy5nZXRUaXRsZUZpZWxkKGVudHJ5Lml0ZW1UeXBlKV07XG5cdFx0fVxuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XG5cdFx0cmV0dXJuIGZpcnN0TmFtZS50cmltKClcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XG5cdH1cblxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcblx0XHRcdFx0cmV0dXJuICdmcmllbmRseW5hbWUnO1xuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcblx0XHRcdFx0cmV0dXJuICduYWFtaW50ZXJuJztcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcblx0XHRcdGNhc2UgJ0JhcmNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcblx0XHRcdGNhc2UgJ0JldGFsaW5nc2NvbmRpdGllJzpcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcblx0XHRcdGNhc2UgJ1RheFNjaGVtYSc6XG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XG5cdFx0XHRjYXNlICdGdW5jdGllZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcblx0XHRcdGNhc2UgJ0luaHV1cic6XG5cdFx0XHRjYXNlICdJbmh1dXJncm9lcCc6XG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbENhdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxuXHRcdFx0Y2FzZSAnUGxhbm5pbmdtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnU3VicHJvamVjdCc6XG5cdFx0XHRjYXNlICdUYWFrJzpcblx0XHRcdGNhc2UgJ1RhZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRjYXNlICdUaWpkJzpcblx0XHRcdGNhc2UgJ1RpdGVsJzpcblx0XHRcdGNhc2UgJ1R5cGUnOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xuXHRcdFx0Ly8gY2FzZSAnQ29udGFjdCc6XG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXG5cdFx0XHRcdHJldHVybiAnZGlzcGxheW5hbWUnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50cnlcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAoZW50cnksIHJldHVybkFsbCkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcblx0XHRcdGVudHJ5LmluaXRpYWwsXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0ZW50cnkuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKGVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoZW50cnkuaXRlbUlkKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKGVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuaXNMb2NhbChlbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGVudHJ5Lml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChlbnRyeSkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXG5cdFx0XHRlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0cmVzZXRNb2RpZmllZCAoZW50cnkpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0ZW50cnkuaW5pdGlhbFtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHNldEluaXRpYWwgKGVudHJ5LCB2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcz8pIHtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShlbnRyeSwgdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhlbnRyeS5pbml0aWFsLCB7fSwgZW50cnkuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoZW50cnkubW9kaWZpZWQsIHt9LCBlbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGVudHJ5LCBwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHQvKipcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXG5cdCAqL1xuXHRzZXRNb2RpZmllZCAoZW50cnksIHZhbHVlcz8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW2VudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBlbnRyeS5yZXNvdXJjZXM7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gZW50cnkuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQgPSB7fTtcblxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdC8vIGlmIChERVZfTU9ERSkge1xuXHRcdFx0Ly8gXHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Ly8gXHRcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHQvLyB9XG5cblx0XHRcdGVudHJ5Lm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0c2V0RGVyaXZlZCAoZW50cnksIHZhbHVlcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0cHJvY2Vzc0xvY2FsIChlbnRyeSwgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXApIHtcblx0XHRlbnRyeS5pbml0aWFsID0ge3Blcm1pc3Npb25zOiB0aGlzLkFMTF9QRVJNSVNTSU9OU307XG5cblx0XHR0aGlzLnVwZGF0ZUZpZWxkcyhlbnRyeSwgaW5pdGlhbCk7XG5cdFx0dGhpcy51cGRhdGVJdGVtRmllbGRzKGVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHRoaXMuc2V0TW9kaWZpZWQoZW50cnksIG1vZGlmaWVkKTtcblxuXHRcdGVudHJ5Lm1vZGlmaWVkLmNyZWF0ZWQgPSBtb21lbnQoKTtcblx0XHRlbnRyeS5kZXJpdmVkID0gZGVyaXZlZDtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHNldFBhcmVudCAoZW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0ZW50cnkucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAoZW50cnksIHByZXZpb3VzKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBlbnRyeS5yZXNvdXJjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2UgPSBlbnRyeS5yZXNvdXJjZXNbaV07XG5cblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5XG59IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBBdXRoSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7XG5cdEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAsXG5cdEVudHJ5U3RhdHVzLFxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuL0JhdGNoU3RhdHVzJztcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XG5pbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tIFwiLi9JdGVtQ2FjaGVcIjtcbmltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldEl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gaXRlbUVudHJ5Lml0ZW1JZDtcblx0fVxuXG5cdGdldFByb21pc2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJ5U3RhdHVzLmVudHJ5O1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5MT0NBTCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxuXHRcdFx0XHQudGhlbihcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnksIGVycm9yKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoaXRlbUVudHJ5LCBzdGF0dXMsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gaXRlbUlkc1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XG5cdCAqXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZSwgaXRlbUlkcywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRJdGVtSWQoaXRlbUVudHJ5KSxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRQcm9taXNlKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcblx0XHRcdGJhdGNoU3RhdHVzLmFkZCh0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpKTtcblxuXHRcdHByb21pc2VzLmVudHJpZXMgPSBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW0oaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5FWFBBTkQpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXG5cdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSwgZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZWplY3QoaXRlbUVudHJ5LCBlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0Ly8gdG9kbyBGaW5kIG91dCB3aGF0IHRoaXMgcmV0dXJuIHR5cGUgaXNcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSk6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHRoaXMuY3JlYXRlQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldFBhcmVudChpdGVtRW50cnksIHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc0xvY2FsKFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0dGVtcGxhdGUuZmllbGRzLFxuXHRcdFx0e30sXG5cdFx0XHR7fSxcblx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHQpO1xuXG5cdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGNvbnZlcnNpb25NYXApXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc29sdmUoaXRlbUVudHJ5KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnkpO1xuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpLFxuXHRcdFx0Y29sdW1uSW5mb1xuXHRcdCk7XG5cdH1cblxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXG5cblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdHt9IDpcblx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdF0pLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2U6IGFueSA9IHJlc29sdmVkWzBdO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcblx0XHRcdFx0XHRyZXNvbHZlZFsxXVxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XG5cdFx0XHRcdFx0ZmllbGRzOiB0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoT2JqZWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSxcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnM6IHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBjYWNoZWRFbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChjYWNoZWRFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCBmYWxzZSksXG5cdFx0XHRcdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSxcblx0XHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7ZW50cnk6IGNhY2hlZEVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY2FjaGVkRW50cnksIG9wdGlvbnMpfTtcblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSB8fFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KG9wdGlvbnMuY29sdW1ucywgY29sdW1ucy5yZXF1ZXN0LCBjb2x1bW5zLnRydWUpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeS5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRjb2x1bW5zLnJlcXVlc3QgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5zLnJlcXVlc3QsIG9wdGlvbnMuY29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGZhbHNlKTtcblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHR9XG5cblx0Y3JlYXRlRGVmZXJyZWRFbnRyeSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIHJlcXVlc3RDb2x1bW5zLCBkZWZlclJlcXVlc3QpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY3JlYXRlRW50cnlTdHViKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucyxcblx0XHRcdHRydWU6IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVmZXIoaXRlbUVudHJ5LCBkZWZlclJlcXVlc3QpO1xuXHR9XG5cblx0Y3JlYXRlRW50cnlTdHViIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlcik6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0aXRlbUlkXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUVudHJ5IChpdGVtSWQ6IG51bWJlciwgaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1uSW5mbyk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzKFxuXHRcdFx0dGhpcy5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdGluaXRpYWwsXG5cdFx0XHRcdFx0ZGVyaXZlZFxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZWZlcnJlZEVudHJ5IChpdGVtRW50cnksIGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiBJdGVtRW50cnkge1xuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gY29sdW1ucztcblx0XHRpdGVtRW50cnkuaW5pdGlhbCA9IGluaXRpYWw7XG5cdFx0aXRlbUVudHJ5LmRlcml2ZWQgPSBkZXJpdmVkO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3MoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcblx0ICogQHBhcmFtIHJlc29sdmVkXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcblx0ICovXG5cdGJhdGNoUmVzb2x2ZSAoaXRlbVR5cGUsIGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1cywgcmVxdWVzdENvbHVtbnMsIHJlc29sdmVkKTogSXRlbUVudHJ5W10gfCBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0dGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBudWxsLCByZXNvbHZlZC50ZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChuZXdJdGVtSWQsIGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcD8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB7XG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGVdOiB7XG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtSWRdOiBuZXdJdGVtSWRcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlRW50cnkoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSwge30sIGNvbHVtbnMubWFpbiksXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUl0ZW1GaWVsZHMocmVzdWx0LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHJlc3VsdC5tb2RpZmllZCA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMocmVzdWx0LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKCFwYXJlbnQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXRQYXJlbnQocmVzdWx0LCBwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0Y3JlYXRlQ29udmVyc2lvbk1hcCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIGV4dGVuZDogYm9vbGVhbiwgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0W2l0ZW1UeXBlXToge1xuXHRcdFx0XHRbYXBpSXRlbUlkXTogaXRlbUlkXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChleHRlbmQpXG5cdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdHJlc3VsdCxcblx0XHRcdFx0cmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdW2FwaUl0ZW1JZF0ubGlua3MsXG5cdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAocGFyZW50VHlwZTogc3RyaW5nLCBsb2NhbFBhcmVudElkOiBudW1iZXIsIHRlbXBsYXRlLCBjb252ZXJzaW9uTWFwKTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09IHBhcmVudFR5cGUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBzZWxmLmNyZWF0ZUVudHJ5U3R1YihpdGVtVHlwZSwgbG9jYWxJdGVtSWQpO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSBjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXTtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NMb2NhbChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cnkgKGl0ZW1JZDogbnVtYmVyLCB0ZW1wbGF0ZSwgbW9kaWZpZWQsIGRlcml2ZWQsIHBhcmVudCA9IG51bGwpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jcmVhdGVFbnRyeVN0dWIoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzTG9jYWwoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHR0ZW1wbGF0ZS5maWVsZHMsXG5cdFx0XHRtb2RpZmllZCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgZmFsc2UsIHRlbXBsYXRlLnJlc3BvbnNlKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENyZWF0b3IoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRleHRlbmRDb252ZXJzaW9uTWFwIChjb252ZXJzaW9uTWFwLCBsaW5rcywgYXBpUmVzcG9uc2UpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdFx0Y29udmVyc2lvbk1hcCxcblx0XHRcdFx0XHRhcGlSZXNwb25zZS5pdGVtc1tpdGVtVHlwZV1bYXBpSXRlbUlkXS5saW5rcyxcblx0XHRcdFx0XHRhcGlSZXNwb25zZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBkZWZlclJlcXVlc3QgPSB0cnVlKSB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtcblx0XHRcdFx0Y29sdW1uczogW3RpdGxlRmllbGRdLFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdFxuXHRcdFx0fSlcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IEl0ZW1FbnRyeSB8IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBmZXRjaEl0ZW0gY2FuIGFsc28gcmV0dXJuIGxpbmtlZCBpdGVtc1xuXHRcdFx0XHRpZiAoZW50cnkubWFpbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmluaXRpYWxbdGl0bGVGaWVsZF07XG5cblx0XHRcdFx0aWYgKGVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1vZGlmaWVkW3RpdGxlRmllbGRdO1xuXG5cdFx0XHRcdHJldHVybiBlbnRyeS5pbml0aWFsW3RpdGxlRmllbGRdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBudW1iZXJbXSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkfSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkIChpdGVtRW50cnksIGl0ZW1JZCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3Qgb2xkSXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRpdGVtRW50cnkuaXRlbUlkID0gaXRlbUlkO1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDcmVhdG9yIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGl0ZW1FbnRyeS5tb2RpZmllZC5jcmVhdG9yID0gdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpO1xuXHRcdGl0ZW1FbnRyeS5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tIFwiLi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24gfSBmcm9tIFwiLi9Db2x1bW5FeHBhbnNpb25cIjtcbmltcG9ydCB7IENvbHVtbkhhbmRsZXIgfSBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgSXRlbUhhbmRsZXIgfSBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdGNvbHVtbnM6IHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxuXHRcdFx0aXRlbVR5cGU6ICcnLFxuXHRcdFx0YWxsTGlua0lkczogZmFsc2UsXG5cdFx0XHRsaW1pdDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAob3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsKVxuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGVsc2Uge1xuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gb3B0aW9ucy5xdWVyeUl0ZW1UeXBlO1xuXHRcdFx0cGFyYW1zLmFsbExpbmtJZHMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UsIGlkQXJyYXksIHBhcmVudCwgY29sdW1uSW5mbywgY29sdW1uRXhwYW5zaW9uPyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnRydWUgPyB0cnVlIDogY29sdW1uSW5mby5yZXF1ZXN0LFxuXHRcdFx0XHRjb2x1bW5JbmZvLnJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gY29sdW1uSW5mby5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcblx0XHRcdGxldCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5jcmVhdGVFbnRyeShcblx0XHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJyZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChyZXNwb25zZSwgcGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMpIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXQ6IGZhbHNlLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2U6IEVkaXRSZXNvdXJjZSkge1xuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XG5cdE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XG5cdERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XG5cblx0TkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcblx0RFVQTElDQVRFX0tFWVdPUkQ6IHN0cmluZyA9ICdkdXAtJztcblxuXHRzZXBlcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1UeXBlLmNvbmNhdCh0aGlzLnNlcGVyYXRvciwgU3RyaW5nKGl0ZW1JZCkpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkNhY2hlS2V5IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGNoaWxkVHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHBhcmVudFR5cGUuY29uY2F0KHRoaXMuc2VwZXJhdG9yLCBTdHJpbmcocGFyZW50SWQpLCB0aGlzLnNlcGVyYXRvciwgY2hpbGRUeXBlKTtcblx0fVxuXG5cdGdldENzc0tleSAoKSB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnXycpO1xuXHR9XG5cblx0cGFyc2VTdGF0ZUtleSAoc3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKHRoaXMuTkVXX0tFWVdPUkQpID09PSAwKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogJ25ldycsXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcodGhpcy5ORVdfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YodGhpcy5EVVBMSUNBVEVfS0VZV09SRCkgPT09IDApXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnZHVwbGljYXRlJyxcblx0XHRcdFx0aXRlbUlkOiBzdGF0ZUtleS5zdWJzdHJpbmcodGhpcy5EVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5EVVBMSUNBVEVfS0VZV09SRC5jb25jYXQoU3RyaW5nKGl0ZW1JZCkpO1xuXHR9XG5cblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuTkVXX0tFWVdPUkQuY29uY2F0KHRlbXBsYXRlVHlwZSk7XG5cdH1cblxuXHRnZXRMb2NhbElkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLk5FV19QUkVGSVguY29uY2F0KHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpLCAxMCk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludCh0aGlzLkRVUExJQ0FURV9QUkVGSVguY29uY2F0KHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpLCAxMCk7XG5cdH1cblxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xuXHRcdHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQudG9TdHJpbmcoKS5pbmRleE9mKHRoaXMuTkVXX1BSRUZJWCkgPT09IDAgfHwgaXRlbUlkID09PSB0aGlzLk5FV19LRVlXT1JEO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkLnRvU3RyaW5nKCkuaW5kZXhPZih0aGlzLkRVUExJQ0FURV9QUkVGSVgpID09PSAwIHx8IGl0ZW1JZCA9PT0gdGhpcy5EVVBMSUNBVEVfS0VZV09SRDtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSBcIi4uL2ZhY3Rvcmllc1wiO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSBcIi4vQ29sbGVjdGlvbkNhY2hlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5IYW5kbGVyIH0gZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi9JdGVtQ2FjaGUnO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgeyBJdGVtSGFuZGxlciB9IGZyb20gXCIuL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IExvY2tTZXJ2aWNlIH0gZnJvbSBcIi4vTG9ja1NlcnZpY2VcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRjb2xsZWN0aW9uT3B0aW9ucyA9IHt9O1xuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXHRjYWxsYmFja3MgPSB7b25CZWZvcmVTYXZlOiB7fSwgb25TYXZlU3VjY2Vzczoge30sIG9uU2F2ZVdpdGhvdXRDbG9zaW5nOiB7fX07XG5cblx0Y2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblx0aGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTogSXRlbVJlc291cmNlIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdGlmICghdGhpcy5pdGVtcy5jb250YWlucyhpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpKVxuXHRcdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0aWYgKCF0aGlzLmNvbGxlY3Rpb25zLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5SWRdID0ge1xuXHRcdFx0XHRlZGl0OiByZXNvdXJjZU9wdGlvbnMuZWRpdENvbGxlY3Rpb24sXG5cdFx0XHRcdGVkaXRJdGVtczogcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtc1xuXHRcdFx0fTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25PcHRpb25zRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25PcHRpb25zW2NvbGxlY3Rpb25FbnRyeUlkXTtcblxuXHRcdFx0Y29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0ID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0IHx8IHJlc291cmNlT3B0aW9ucy5lZGl0Q29sbGVjdGlvbjtcblx0XHRcdGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdEl0ZW1zID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0SXRlbXMgfHwgcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtcztcblx0XHR9XG5cblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlSXRlbSA9IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckl0ZW0oaXRlbVJlc291cmNlKTtcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9IChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNsZWFyUmVzb3VyY2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIHRoaXMgY29uZGl0aW9uIG9uY2UgY3JldyBhbmQgdHJhbnNwb3J0IGFyZSBubyBsb25nZXIgbG9hZGVkIGluIHNlcGVyYXRlIGdyaWQgaW5zdGFuY2VzIGluIHRoZSBwcm9qZWN0IHBsYW5uZXIgZ3JpZFxuXHRcdGlmICghaXNTdWJUYWJDaGFuZ2UpXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc2V0TW9kaWZpZWQoaXRlbUVudHJ5KSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KSk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdClcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XG5cblx0XHRpZiAoIW9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gdGhlc2UgYXJlIGVkaXQgcmVzb3VyY2VzIChlZGl0SXRlbXMpXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSXRlbSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzZXRNb2RpZmllZChjb2xsZWN0aW9uSXRlbSk7XG5cdH1cblxuXHRfaGFzQ2hhbmdlcyAoKSB7XG5cdFx0aWYgKCF0aGlzLmhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXM7XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpIHtcblx0XHRpZiAodGhpcy5pdGVtcy5zb21lKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fSk7XG5cdH1cblxuXHRjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0SXRlbXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKSB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NrYWJsZSh0aGlzLnJvb3RJdGVtKTtcblx0fVxuXG5cdHNhdmUgKGNsb3NlVGFiID0gZmFsc2UsIHBhcmFtZXRlcnMsIGJyZWFrVXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHRsb2NrVG9rZW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvbkJlZm9yZVNhdmUnLCBjbG9zZVRhYik7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XG5cblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnMsXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBjb252ZXJzaW9uTWFwLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXhlY3V0ZUNhbGxiYWNrcyAoZXZlbnQsIC4uLmFyZ3MpIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jYWxsYmFja3NbZXZlbnRdKVxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XG5cdH1cblxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0ZW5hYmxlV2F0Y2hlciAoKSB7XG5cdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGRpc2FibGVXYXRjaGVyICgpIHtcblx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XG5cdGxvY2tJdGVtcyA9IHt9O1xuXHRwcm9taXNlcyA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxuXHRcdFx0bWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHZhbHVlXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRMb2NrcyAoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxuXHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgeyBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gXCIuL1V0aWxcIjtcblxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxlciB7XG5cdHBhcmVudE1hcDogYW55ID0ge307XG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcm9vdEl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpIHtcblx0fVxuXG5cdHByb2Nlc3MgKCkge1xuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRsZXQgbWFwRW50cnkgPSByZXN1bHRbcGFyZW50VHlwZV07XG5cblx0XHRcdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcEVudHJ5W3BhcmVudElkXSA9IHt9O1xuXG5cdFx0XHRcdG1hcEVudHJ5ID0gbWFwRW50cnlbcGFyZW50SWRdO1xuXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcikge1xuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XG5cblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcblxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xuXG5cdFx0aWYgKGhhc1ZhbHVlcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xuXG5cdFx0aWYgKGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xuXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XG5cblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIHBhcmVudElkOiBudW1iZXIsXG5cdFx0cHVibGljIGZpZWxkczogb2JqZWN0LFxuXHRcdHB1YmxpYyBpdGVtVHlwZT86IHN0cmluZ1xuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8IHN0cmluZyB7XG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdGhpcy5wYXJlbnRUeXBlKVxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcblx0XHRlbHNlXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLnBhcmVudElkLCBxdWVyeS5xdWVyeSk7XG5cblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IHRlcm1pbmFsO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSAnQU5EJzpcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdPUic6XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcblxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcblx0XHRcdFx0cmV0dXJuIHRlcm1pbmFsO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZSwgcXVlcnkpIHtcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcblx0XHRcdHJldHVybiBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcblx0XHRcdGNhc2UgJz0nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJyE9Jzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc8PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnSU4nOlxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICdOT1QgSU4nOlxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xuXHRxdWVyeTogYW55O1xuXHRwYXJhbWV0ZXJzOiBhbnk7XG5cblx0Y29uc3RydWN0b3IgKHF1ZXJ5LCBwYXJhbWV0ZXJzPykge1xuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlKSB7XG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcblxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcblx0fVxuXG5cdHBhcnNlIChxdWVyeSA9IHRoaXMucXVlcnkpIHtcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xuXHRcdFx0KTtcblxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcblx0XHRcdFx0cXVlcnkub3BlcmF0b3Jcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5rZXksXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlKSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbSwgcGFyYW1ldGVycykge1xuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7Y3VzdG9tOiBjdXN0b219LFxuXHRcdFx0XHQnWycgKyBjdXN0b20gKyAnXSdcblx0XHRcdF07XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0ge307XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XG5cblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcblxuXHRcdFx0aWYgKGkgPiAwKVxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcblxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleSwgdmFsdWUsIGNvbXBhcmF0b3I/KSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbywgcXVlcnksIHJldmVyc2UsIG5vdCkge1xuXHRcdGlmIChxdWVyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cXVlcnkgPSB7fTtcblxuXHRcdGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XG5cblx0XHRpZiAobm90ID09PSB1bmRlZmluZWQpXG5cdFx0XHRub3QgPSBmYWxzZTtcblxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnMsIG9wZXJhdG9yKSB7XG5cdFx0aWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xuXHRcdGVsc2Vcblx0XHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcblxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xuXHRcdGxldCBwYXJzZWRDb25kaXRpb25zID0gW107XG5cdFx0Y29uc3QgcXVlcnkgPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcblxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcblxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tIFwiLi9Db2x1bW5VdGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zID0ge307XG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZCAoY29sdW1uSW5mbykge1xuXHRcdGlmICh0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSlcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uSW5mby5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5JbmZvLnJlcXVlc3QpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgeyBJdGVtSGFuZGxlciB9IGZyb20gJy4vSXRlbUhhbmRsZXInO1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xuXHRcdFx0Y2FzZSAndXBkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnbGlua1RvJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0XHRwYXJlbnQuaXRlbUlkLFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cdH1cblxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGZhbHNlKTtcblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5zKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmNyZWF0ZURlZmVycmVkRW50cnkoaXRlbVR5cGUsIHBhcnNlSW50KGl0ZW1JZCwgMTApLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKTtcblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSxcblx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLmZldGNoVmFsdWUoJ0Z1bmN0aWUnLCBpdGVtSWQsICduZXdjaGFuZ2VzJyk7XG5cblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXRJbml0aWFsKGl0ZW1FbnRyeSwge25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKTtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlIChpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xuXG5cdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIucmVzb2x2ZURlZmVycmVkRW50cnkoaXRlbUVudHJ5LCBmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoaXRlbUVudHJ5LCBmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XG5cblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldERlcml2ZWQoaXRlbUVudHJ5LCBkZXJpdmVkKTtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUZpZWxkcyhpdGVtRW50cnksIGZpZWxkcywgZmFsc2UpO1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKGl0ZW1FbnRyeSwgcHJldmlvdXMpO1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHR9XG5cblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblxuXHRcdGlmIChib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcblxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShib2R5Lml0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdC8vIFRPRE8hXG5cdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHRcdC8qXHRcdFx0cHJvY2Vzc01lc3NhZ2UoXG5cdFx0IG1lc3NhZ2UsXG5cdFx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xuXHRcdCByZXR1cm47XG5cblx0XHQgLy8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cblx0XHQgY29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xuXHRcdCB9LFxuXHRcdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHQgLy8gbWF5YmUgZml0c1xuXHRcdCByZXR1cm47ICAvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdFx0IGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XG5cdFx0IH0sXG5cdFx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcblx0XHQgLy8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xuXHRcdCBjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XG5cdFx0IH1cblx0XHQgKTtcblx0XHQgKi9cblx0fVxuXG59XG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxlcic7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gbnVtYmVyLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8YW55Pik6IEJhdGNoU3RhdHVzIHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsZXIsIEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sIGNvbGxlY3Rpb25PcHRpb25zKTogQ2hhbmdlc0NvbXBpbGVyIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxlcihcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHNpbmdsZUl0ZW1zLFxuXHRcdFx0Y29sbGVjdGlvbnMsXG5cdFx0XHRjb2xsZWN0aW9uT3B0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc1Byb2Nlc3Nvcixcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbHVtbkhhbmRsZXIsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSB9IGZyb20gJy4vQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEZhY3RvcnkgfSBmcm9tIFwiLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tIFwiLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsZXJGYWN0b3J5OiBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0KTtcblx0fVxuXG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gXCIuL1F1ZXJ5TWF0Y2hlckZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1FbnRyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0ZGVyaXZlZDtcblx0Y29sdW1ucztcblx0ZmllbGRzO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcm90ZWN0ZWQgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblx0fVxuXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKHJlc291cmNlLmVudHJ5KSAmJlxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpc0xvY2FsICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwodGhpcy5lbnRyeSk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLCBlbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIoaXRlbUVudHJ5U2VydmljZSwgZW50cnksIG9wdGlvbnMpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gXCIuLi9mYWN0b3JpZXNcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgPSB7fTtcblx0Y29sdW1ucztcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3Rvcihcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG9wdGlvbnMub25EZWFjdGl2YXRlSXRlbVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0bGV0IGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlO1xuXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xuXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cblx0ICpcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxuXHQgKi9cblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHR9XG5cblx0Y2FsbE9uUmVtb3ZlIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xuXHR9XG5cblx0Z3JvdXBCeSAoYXJndW1lbnQpIHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXAgKGFyZ3VtZW50KSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zLCBlbmFibGVDYWxsYmFja3MpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBlbmFibGVDYWxsYmFja3MpXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGRlYWN0aXZhdGUgKCk6IHZvaWQge1xuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4vSXRlbUVudHJ5JztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnNcblx0KSB7XG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdHNhdmUgKCkge1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xuXHR9XG5cblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdG1vdmVJdGVtcyAoaWRBcnJheSwgZGVzdGluYXRpb24sIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcblxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcblxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZCwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheSwgZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZSkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5lbnRyeS5pdGVtVHlwZSkudGhlbih0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jcmVhdGVMb2NhbEVudHJ5KFxuXHRcdFx0XHRcdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWUuZmllbGRzLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5kZXJpdmVkXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdGluQXJyYXksXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogYW55O1xuXHRjb2x1bW5zOiBhbnk7XG5cblx0cGFyZW50OiBudWxsIHwgeyBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyB9ID0gbnVsbDtcblxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IGFueTtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxuXHQpIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXHRcdHRoaXMucXVlcnkgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5UmVzb3VyY2UpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pbml0aWFsID0gaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXM7XG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zLnNsaWNlKCk7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGUsIGl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kLml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gbW9kO1xuXHRcdH1cblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yID0gW10pOiBudW1iZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdGFkZEl0ZW1zIChpdGVtRW50cmllcywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwgPSBmYWxzZSwgZW5hYmxlQ2FsbGJhY2sgPSB0cnVlKTogSXRlbVJlc291cmNlW10ge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbCA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFjaylcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9IGVsc2Vcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xuXHRcdFx0fSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGVuYWJsZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChyZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChmaWx0ZXJGdW5jdGlvbiwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRjb25zdCByZW1vdmVkRnJvbUluaXRpYWwgPSB1cGRhdGVJbml0aWFsID8gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pIDogW107XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xuXHRcdH1cblxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRGcm9tTW9kIG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVhY3RpdmF0ZVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kIChuZXdDb2x1bW5zKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKG5ld0NvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZSwgdGhpcy5pdGVtcyk7XG5cblx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMuY2FsbChcblx0XHRcdFx0XHR0aGlzLCBpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcblx0fVxuXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2s/LCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XG5cdFx0XHRcdGZ1bGxRdWVyeVxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjayk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCkge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblx0fVxuXG5cdHVwZGF0ZUNvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucywgZmFsc2UpO1xuXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSBjb2x1bW5JbmZvLnJlcXVlc3Q7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uSW5mbztcblx0fVxuXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSAmJiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKG1vZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSZXNvdXJjZSAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlcyA9IFtdO1xuXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGN1cnJlbnRSZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9uc1tpc1N1YnRhYkNoYW5nZSA/ICdjbGVhck9uU3ViVGFiQ2hhbmdlJyA6ICdjbGVhck9uVGFiQ2hhbmdlJ10pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRuZXdSZXNvdXJjZXMucHVzaChjb2xsZWN0aW9uUmVzb3VyY2UpO1xuXG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5lbnRyeS5yZXNvdXJjZXMucHVzaChpdGVtUmVzb3VyY2UpOyAvLyByZXNvdXJjZXMgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdyA6LSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlc291cmNlcyA9IG5ld1Jlc291cmNlcztcblx0fVxuXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHRyZXZlcnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXModHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhyZW1vdmVkSXRlbXMpO1xuXHRcdFx0cmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhhZGRlZEl0ZW1zKTtcblx0XHR9XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuL0l0ZW1SZXNvdXJjZVwiO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeSB7XG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcblxuXHRtb2RpZmllZDtcblx0cGFyZW50OiBudWxsIHwgeyBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyB9ID0gbnVsbDtcblxuXHRkZWZlclJlcXVlc3QgPSBmYWxzZTtcblx0ZGVmZXJyZWQ7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IG51bWJlcixcblx0XHRwdWJsaWMgY29sdW1ucz8sXG5cdFx0cHVibGljIGluaXRpYWw/LFxuXHRcdHB1YmxpYyBkZXJpdmVkID0ge30sXG5cdFx0cHVibGljIHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXVxuXHQpIHtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Y3JlYXRlUGF0aCxcblx0SXRlbUVudHJ5U2VydmljZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSBcIi4vSXRlbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRsb2NhbENvcGllczogYW55W10gPSBbXTtcblx0dHJhbnNhY3Rpb25zOiBudW1iZXI7XG5cdGhhc0NoYW5nZXM6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHRzdXBlcihpdGVtRW50cnlTZXJ2aWNlLCBlbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRpdGVtRW50cnlTZXJ2aWNlLnNldE1vZGlmaWVkKGVudHJ5KTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XG5cdH1cblxuXHRzdGFydCAoKSB7XG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcblxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XG5cdH1cblxuXHRyb2xsYmFjayAoKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5sb2NhbENvcGllcy5wb3AoKSwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGlmICh0aGlzLmlzTmV3UmVzb3VyY2UodGhpcykgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGNvbW1pdCAoaW5pdGlhbCkge1xuXHRcdGlmICghaW5pdGlhbClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHQvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cdFx0aWYgKHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrO1xuXHR9XG5cblx0Z2V0TG9jYWxDb3B5ICgpIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb24/KSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZGVzdGluYXRpb24gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXHR9XG5cblx0c2V0RmllbGRzICh2YWx1ZXMsIGNhbGxPbkNoYW5nZSkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XG5cdFx0Y29uc3QgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UgPT09IHVuZGVmaW5lZClcblx0XHRcdGNhbGxPbkNoYW5nZSA9IHRydWU7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmNvcHlGaWVsZHMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbklkXTtcblxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnNvbGUud2Fybignc2V0RmllbGRzOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cykge1xuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jYWxsT25DaGFuZ2UodGhpcy5lbnRyeSwgcHJldmlvdXMpO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz8pIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9ja2FibGUoaXRlbUVudHJ5KSA/XG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKVxuXHRcdCkudGhlbihcblx0XHRcdGxvY2tUb2tlbiA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgZmFsc2UsIHBhcmFtZXRlck1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUxvY2FsICgpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldERpc3BsYXlOYW1lKGl0ZW1FbnRyeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRJdGVtc1RvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZSB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gXCIuLi9tb2RlbHMvXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gXCIuL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIG5ldyAob3B0aW9ucy5lZGl0Q29sbGVjdGlvbiA/IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlKShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uSGFuZGxlciwgQ29sdW1uVXRpbCB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSBcIi4vQ29sdW1uU2V0RmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0ZW5hYmxlQ2FjaGluZyxcblx0XHRcdGluY2x1ZGVJZENvbHVtblxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVSZXF1ZXN0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSBcIi4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3RGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoY29tcGlsYXRpb24sIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlLCBJdGVtRW50cnlTZXJ2aWNlIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tIFwiLi9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBjb2x1bW5zPywgaW5pdGlhbD86IG9iamVjdCwgZGVyaXZlZD86IG9iamVjdCwgcmVzb3VyY2VzPzogSXRlbVJlc291cmNlW10pOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHRyZXNvdXJjZXNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQpIHtcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnlcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgSXRlbUNhY2hlRmFjdG9yeSB9IGZyb20gXCIuL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIEl0ZW1FbnRyeVNlcnZpY2UsIE1vZHVsZUNoYW5nZXNDb21waWxlciB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXIoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRyb290SXRlbSxcblx0XHRcdHNpbmdsZUl0ZW1DYWNoZSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBmaWVsZHM6IG9iamVjdCwgaXRlbVR5cGU/OiBzdHJpbmcpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWQsXG5cdFx0XHRmaWVsZHMsXG5cdFx0XHRpdGVtVHlwZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZTtcblxuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblxuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXG5cdC8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjAuMzQnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlID0gbmV3IEl0ZW1SZXNvdXJjZVNlcnZpY2UoKTtcblxuXHRcdHRoaXMubG9ja1NlcnZpY2UgPSBuZXcgTG9ja1NlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSA9IG5ldyBRdWVyeU1hdGNoZXJGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xuXG5cdFx0dGhpcy5jb2x1bW5DYWNoZSA9IG5ldyBDb2x1bW5DYWNoZSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5DYWNoZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeSgpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1FbnRyeUZhY3RvcnksIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5rZXlTZXJ2aWNlLCB0aGlzLnF1ZXJ5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksIHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkodGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5KHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LCB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LCB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmFwaUZvcm1hdHRlciwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkodGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsIHRoaXMuYXBpRm9ybWF0dGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSh0aGlzLml0ZW1FbnRyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBsb2NhbENhY2hlTWFuYWdlciwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LCB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMua2V5U2VydmljZSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5zb2NrZXRNZXNzYWdlSGFuZGxlciA9IG5ldyBTb2NrZXRNZXNzYWdlSGFuZGxlcihwcm9taXNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmFwaUZvcm1hdHRlciwgZXJyb3JIYW5kbGVySW50ZXJmYWNlKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9tYWluJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbiJdLCJzb3VyY2VSb290IjoiIn0=