bearychat-rtm-client
Advanced tools
Comparing version
{ | ||
"name": "bearychat-rtm-client", | ||
"version": "0.8.0", | ||
"version": "0.9.0", | ||
"description": "RTM client for BearyChat", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -236,5 +236,5 @@ 'use strict'; | ||
_this4._pingTimeout = options.pingTimeout || 3000; | ||
_this4._pingTimeout = options.pingTimeout || 15 * 1000; | ||
// following options are internal to speed up testing. | ||
_this4._pingInterval = options.pingInterval || 5000; | ||
_this4._pingInterval = options.pingInterval || 15 * 1000; | ||
_this4._backoffMultiplier = options.backoffMultiplier || 1000; | ||
@@ -270,11 +270,29 @@ | ||
case 0: | ||
if (this._shouldDoReconnect()) { | ||
_context2.next = 2; | ||
break; | ||
} | ||
return _context2.abrupt('return'); | ||
case 2: | ||
this._state = _RTMClientState2.default.RECONNECT; | ||
_context2.next = 3; | ||
_context2.next = 5; | ||
return (0, _delay2.default)(generateInterval(this._reconnectAttempts, this._backoffMultiplier)); | ||
case 3: | ||
case 5: | ||
if (this._shouldDoReconnect()) { | ||
_context2.next = 7; | ||
break; | ||
} | ||
return _context2.abrupt('return'); | ||
case 7: | ||
this._reconnectAttempts++; | ||
this.connect(); | ||
case 5: | ||
case 9: | ||
case 'end': | ||
@@ -335,6 +353,8 @@ return _context2.stop(); | ||
value: function close() { | ||
var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown reason'; | ||
if (this._connection && this._state !== _RTMClientState2.default.CLOSING) { | ||
this._state = _RTMClientState2.default.CLOSING; | ||
this._forceClose = true; | ||
this._connection.close(); | ||
this._connection.close(reason); | ||
} else if (this._state !== _RTMClientState2.default.CLOSED) { | ||
@@ -375,3 +395,3 @@ this._state = _RTMClientState2.default.CLOSED; | ||
function _send(_x) { | ||
function _send(_x2) { | ||
return _ref4.apply(this, arguments); | ||
@@ -419,3 +439,3 @@ } | ||
function send(_x2, _x3) { | ||
function send(_x3, _x4) { | ||
return _ref5.apply(this, arguments); | ||
@@ -467,2 +487,7 @@ } | ||
} | ||
}, { | ||
key: '_shouldDoReconnect', | ||
value: function _shouldDoReconnect() { | ||
return this._state !== _RTMClientState2.default.CLOSING && this._state !== _RTMClientState2.default.CLOSED; | ||
} | ||
}]); | ||
@@ -489,2 +514,2 @@ | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1DbGllbnQuanMiXSwibmFtZXMiOlsiT05FX01JTlVURSIsIlJUTVNlbmRUaW1lb3V0RXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJydG1NZXNzYWdlIiwiRXJyb3IiLCJSVE1Ob3RDb25uZWN0ZWRFcnJvciIsIlJUTVJlY29ubmVjdFRpbWVvdXRFcnJvciIsImNvbnN0cnVjdG9yIiwiX19wcm90b19fIiwicHJvdG90eXBlIiwiUlRNQ2xpZW50Iiwib3B0aW9ucyIsIl9kb0Nvbm5lY3QiLCJfc3RhdGUiLCJDT05ORUNUSU5HIiwid3NVcmwiLCJ0aW1lb3V0TWVzc2FnZSIsIl9yZWNvbm5lY3RUaW1lb3V0IiwiX2dldFVybCIsIl9yZWNvbm5lY3QiLCJlbWl0IiwiRVJST1IiLCJfcmVjb25uZWN0QXR0ZW1wdHMiLCJfc2V0Q29ubmVjdGlvbiIsInVybCIsIldlYlNvY2tldCIsInBpbmdJbnRlcnZhbCIsIl9waW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsIl9waW5nVGltZW91dCIsIl9oYW5kbGVDb25uZWN0aW9uT3BlbiIsIkNPTk5FQ1RFRCIsIk9OTElORSIsIl9oYW5kbGVDb25uZWN0aW9uQ2xvc2UiLCJfcmVtb3ZlQ29ubmVjdGlvbiIsIl9mb3JjZUNsb3NlIiwiQ0xPU0VEIiwiT0ZGTElORSIsIkNMT1NFIiwiX2hhbmRsZUNvbm5lY3Rpb25FcnJvciIsImVycm9yIiwiX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlIiwibWVzc2FnZSIsIkVWRU5UIiwid2luZG93IiwiX3VybCIsIl9iYWNrb2ZmTXVsdGlwbGllciIsImJhY2tvZmZNdWx0aXBsaWVyIiwicmVjb25uZWN0VGltZW91dCIsIl9jb25uZWN0aW9uRXZlbnRzIiwiT1BFTiIsIk1FU1NBR0UiLCJJTklUSUFMIiwiX2Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiUkVDT05ORUNUIiwiZ2VuZXJhdGVJbnRlcnZhbCIsIkNMT1NJTkciLCJjbG9zZSIsInNlbmQiLCJnZXRTdGF0ZSIsInRpbWVvdXQiLCJJbmZpbml0eSIsIk51bWJlciIsImlzRmluaXRlIiwiX3NlbmQiLCJzZW5kUHJvbWlzZSIsImNvbm5lY3Rpb24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJmb3JFYWNoIiwibmFtZSIsImhhbmRsZXIiLCJvbiIsInJlbW92ZUxpc3RlbmVyIiwiUlRNQ2xpZW50RXZlbnRzIiwiUlRNQ2xpZW50U3RhdGUiLCJSVE1NZXNzYWdlVHlwZXMiLCJSVE1QaW5nVGltZW91dEVycm9yIiwiYXR0ZW1wdHMiLCJtdWx0aXBsaWVyIiwibWF4SW50ZXJ2YWwiLCJNYXRoIiwibWluIiwicG93IiwicmFuZG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBYSxLQUFLLElBQXhCOztJQUVNQyxtQjs7O0FBQ0osK0JBQVlDLFlBQVosRUFBMEJDLFVBQTFCLEVBQXNDO0FBQUE7O0FBQUEsMElBQzlCRCxZQUQ4Qjs7QUFFcEMsVUFBS0MsVUFBTCxHQUFrQkEsVUFBbEI7QUFGb0M7QUFHckM7OztFQUorQkMsSzs7SUFPNUJDLG9COzs7QUFDSixnQ0FBWUgsWUFBWixFQUEwQkMsVUFBMUIsRUFBc0M7QUFBQTs7QUFBQSw2SUFDOUJELFlBRDhCOztBQUVwQyxXQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUZvQztBQUdyQzs7O0VBSmdDQyxLOztJQU83QkUsd0I7OztBQUNKLG9DQUFZSixZQUFaLEVBQTBCO0FBQUE7O0FBQUEscUpBQ2xCQSxZQURrQjs7QUFFeEIsV0FBS0ssV0FBTCxHQUFtQkQsd0JBQW5CO0FBQ0EsV0FBS0UsU0FBTCxHQUFpQkYseUJBQXlCRyxTQUExQztBQUh3QjtBQUl6Qjs7O0VBTG9DTCxLOztBQU10Qzs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXdCcUJNLFM7OztBQVluQixxQkFBWUMsT0FBWixFQUFxQjtB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IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBkZWxheSBmcm9tICcuL2RlbGF5JztcbmltcG9ydCB3aXRoVGltZW91dCBmcm9tICcuL3dpdGhUaW1lb3V0JztcbmltcG9ydCBSVE1DbGllbnRFdmVudHMgZnJvbSAnLi9SVE1DbGllbnRFdmVudHMnO1xuaW1wb3J0IFJUTUNsaWVudFN0YXRlIGZyb20gJy4vUlRNQ2xpZW50U3RhdGUnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25FdmVudHMgZnJvbSAnLi9SVE1Db25uZWN0aW9uRXZlbnRzJztcbmltcG9ydCBSVE1Db25uZWN0aW9uLCB7IFJUTVBpbmdUaW1lb3V0RXJyb3IgfSBmcm9tICcuL1JUTUNvbm5lY3Rpb24nO1xuaW1wb3J0IFJUTU1lc3NhZ2VUeXBlcyBmcm9tICcuL1JUTU1lc3NhZ2VUeXBlcyc7XG5cbmNvbnN0IE9ORV9NSU5VVEUgPSA2MCAqIDEwMDA7XG5cbmNsYXNzIFJUTVNlbmRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9yTWVzc2FnZSwgcnRtTWVzc2FnZSkge1xuICAgIHN1cGVyKGVycm9yTWVzc2FnZSk7XG4gICAgdGhpcy5ydG1NZXNzYWdlID0gcnRtTWVzc2FnZTtcbiAgfVxufVxuXG5jbGFzcyBSVE1Ob3RDb25uZWN0ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JNZXNzYWdlLCBydG1NZXNzYWdlKSB7XG4gICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB0aGlzLnJ0bU1lc3NhZ2UgPSBydG1NZXNzYWdlO1xuICB9XG59XG5cbmNsYXNzIFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JNZXNzYWdlKSB7XG4gICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gUlRNUmVjb25uZWN0VGltZW91dEVycm9yO1xuICAgIHRoaXMuX19wcm90b19fID0gUlRNUmVjb25uZWN0VGltZW91dEVycm9yLnByb3RvdHlwZTtcbiAgfVxufTtcblxuLyoqXG4gKiBLZWVwIGFuIFJUTSBjbGllbnQgcnVubmluZyB3aXRoIG11bHRpcGxlLlxuICpcbiAqIFN0YXRlIGRpYWdyYW06XG4gKlxuICogICAgICAgICAgICAgICAgICAgIElOSVRJQUxcbiAqICAgICAgICAgICAgICAgICAgICAgICArXG4gKiAgICAgICAgICBlcnJvciAgICAgICAgfFxuICogICAgICArLS0tLS0tLS0tLS0tLSsgIHxcbiAqICAgICAgdiAgICAgICAgICAgICArICB2ICAgICAgICBjb25uZWN0XG4gKiAgUkVDT05ORUNUKy0tLS0tLS0+Q09OTkVDVElORzwtLS0tLS0tLS0rQ0xPU0VEXG4gKiAgICAgIF4gICAgICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgXlxuICogICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICBzZXJ2ZXIgICAgICB8ICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgY2xvc2UvICAgICAgdiAgICAgICAgY2xvc2UgICAgICAgK1xuICogICAgICArLS0tLS0tLS0tLS0tK0NPTk5FQ1RFRCstLS0tLS0tLS0tPkNMT1NJTkdcbiAqICAgICAgICAgICBlcnJvclxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBvcHRpb25zLnVybCAtIEEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0cmluZyBvciBhIFByb21pc2UgcmVzb2x2ZXMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RyaW5nLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVE1DbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gIHN0YXRpYyBSVE1DbGllbnRFdmVudHMgPSBSVE1DbGllbnRFdmVudHM7XG5cbiAgc3RhdGljIFJUTUNsaWVudFN0YXRlID0gUlRNQ2xpZW50U3RhdGU7XG5cbiAgc3RhdGljIFJUTU1lc3NhZ2VUeXBlcyA9IFJUTU1lc3NhZ2VUeXBlcztcblxuICBzdGF0aWMgUlRNUmVjb25uZWN0VGltZW91dEVycm9yID0gUlRNUmVjb25uZWN0VGltZW91dEVycm9yO1xuXG4gIHN0YXRpYyBSVE1QaW5nVGltZW91dEVycm9yID0gUlRNUGluZ1RpbWVvdXRFcnJvcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHsgdXJsIH0gPSBvcHRpb25zO1xuXG4gICAgaW52YXJpYW50KFxuICAgICAgdXJsLFxuICAgICAgJ1widXJsXCIgaXMgcmVxdWlyZWQuJ1xuICAgICk7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ1widXJsXCIgbXVzdCBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZy4nXG4gICAgKTtcblxuICAgIGxldCBXZWJTb2NrZXQgPSBvcHRpb25zLldlYlNvY2tldDtcbiAgICBpZiAoIVdlYlNvY2tldCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgV2ViU29ja2V0ID0gd2luZG93LldlYlNvY2tldDtcbiAgICB9XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICBXZWJTb2NrZXQsXG4gICAgICAnQSBXZWJzb2NrZXQgY2xpZW50IGlzIHJlcXVpcmVkLidcbiAgICApO1xuXG4gICAgdGhpcy5fdXJsID0gdXJsO1xuICAgIHRoaXMuV2ViU29ja2V0ID0gV2ViU29ja2V0O1xuXG4gICAgdGhpcy5fcGluZ1RpbWVvdXQgPSBvcHRpb25zLnBpbmdUaW1lb3V0IHx8IDMwMDA7XG4gICAgLy8gZm9sbG93aW5nIG9wdGlvbnMgYXJlIGludGVybmFsIHRvIHNwZWVkIHVwIHRlc3RpbmcuXG4gICAgdGhpcy5fcGluZ0ludGVydmFsID0gb3B0aW9ucy5waW5nSW50ZXJ2YWwgfHwgNTAwMDtcbiAgICB0aGlzLl9iYWNrb2ZmTXVsdGlwbGllciA9IG9wdGlvbnMuYmFja29mZk11bHRpcGxpZXIgfHwgMTAwMDtcblxuICAgIHRoaXMuX3JlY29ubmVjdFRpbWVvdXQgPSBvcHRpb25zLnJlY29ubmVjdFRpbWVvdXQgfHwgT05FX01JTlVURTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMgPSBbXG4gICAgICBbUlRNQ29ubmVjdGlvbkV2ZW50cy5PUEVOLCB0aGlzLl9oYW5kbGVDb25uZWN0aW9uT3Blbl0sXG4gICAgICBbUlRNQ29ubmVjdGlvbkV2ZW50cy5DTE9TRSwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkNsb3NlXSxcbiAgICAgIFtSVE1Db25uZWN0aW9uRXZlbnRzLkVSUk9SLCB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3JdLFxuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuTUVTU0FHRSwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbk1lc3NhZ2VdLFxuICAgIF07XG5cbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLklOSVRJQUw7XG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fZm9yY2VDbG9zZSA9IGZhbHNlO1xuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzID0gMTtcblxuICAgIHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgY29ubmVjdCgpIHtcbiAgICBpbnZhcmlhbnQoXG4gICAgICB0aGlzLl9zdGF0ZSA9PT0gUlRNQ2xpZW50U3RhdGUuSU5JVElBTCB8fFxuICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLkNMT1NFRCB8fFxuICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLlJFQ09OTkVDVCxcbiAgICAgICdJbnZhbGlkIHN0YXRlOiBjb25uZWN0KCkgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2hlbiBjdXJyZW50IHN0YXRlICcgK1xuICAgICAgJ2lzIFwiJXNcIiwgXCIlc1wiIG9yIFwiJXNcIiBidXQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgXCIlc1wiLicsXG4gICAgICBSVE1DbGllbnRTdGF0ZS5JTklUSUFMLFxuICAgICAgUlRNQ2xpZW50U3RhdGUuQ0xPU0VELFxuICAgICAgUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgdGhpcy5fc3RhdGVcbiAgICApO1xuXG4gICAgdGhpcy5fZG9Db25uZWN0KCk7XG4gIH1cblxuICBfZG9Db25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuQ09OTkVDVElORztcblxuICAgIGxldCB3c1VybDtcbiAgICBjb25zdCB0aW1lb3V0TWVzc2FnZSA9IG5ldyBSVE1SZWNvbm5lY3RUaW1lb3V0RXJyb3IoJ1JlZ2V0IHdlYnNvY2tldCB1cmwgZXJyb3InKTtcbiAgICB0cnkge1xuICAgICAgd3NVcmwgPSBhd2FpdCB3aXRoVGltZW91dCh0aGlzLl9yZWNvbm5lY3RUaW1lb3V0LCB0aW1lb3V0TWVzc2FnZSwgdGhpcy5fZ2V0VXJsKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3JlY29ubmVjdCgpOyAvLyBpbnRlbnRpb25hbGx5IGlnbm9yZSBcImF3YWl0XCJcbiAgICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVJST1IsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzID0gMTtcbiAgICB0aGlzLl9zZXRDb25uZWN0aW9uKG5ldyBSVE1Db25uZWN0aW9uKHtcbiAgICAgIHVybDogd3NVcmwsXG4gICAgICBXZWJTb2NrZXQ6IHRoaXMuV2ViU29ja2V0LFxuICAgICAgcGluZ0ludGVydmFsOiB0aGlzLl9waW5nSW50ZXJ2YWwsXG4gICAgICBwaW5nVGltZW91dDogdGhpcy5fcGluZ1RpbWVvdXRcbiAgICB9KSk7XG4gIH07XG5cbiAgYXN5bmMgX3JlY29ubmVjdCgpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLlJFQ09OTkVDVDtcbiAgICBhd2FpdCBkZWxheShnZW5lcmF0ZUludGVydmFsKHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzLCB0aGlzLl9iYWNrb2ZmTXVsdGlwbGllcikpO1xuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzKys7XG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBhc3luYyBfZ2V0VXJsKCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBhc3N1bWUgdXJsIGlzIGEgZnVuY3Rpb25cbiAgICByZXR1cm4gYXdhaXQgdXJsKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGlvbiAmJiB0aGlzLl9zdGF0ZSAhPT0gUlRNQ2xpZW50U3RhdGUuQ0xPU0lORykge1xuICAgICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DTE9TSU5HO1xuICAgICAgdGhpcy5fZm9yY2VDbG9zZSA9IHRydWU7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSAhPT0gUlRNQ2xpZW50U3RhdGUuQ0xPU0VEKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLkNMT1NFRDtcbiAgICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuQ0xPU0UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9zZW5kKG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rpb24uc2VuZChtZXNzYWdlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJUTU5vdENvbm5lY3RlZEVycm9yKFxuICAgICAgJ0NsaWVudCBjdXJyZW50bHkgbm90IGNvbm5lY3RlZCwgdGhlIGN1cnJlbnQgc3RhdGUgaXM6ICcgKyB0aGlzLmdldFN0YXRlKClcbiAgICApO1xuICB9XG5cblxuICBhc3luYyBzZW5kKG1lc3NhZ2UsIHRpbWVvdXQpIHtcbiAgICBpZiAoIXRpbWVvdXQgfHwgdGltZW91dCA8IDApIHtcbiAgICAgIHRpbWVvdXQgPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lb3V0KSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3NlbmQobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VuZFByb21pc2UgPSB0aGlzLl9zZW5kKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHRpbWVvdXRNZXNzYWdlID0gbmV3IFJUTVNlbmRUaW1lb3V0RXJyb3IoJ1JUTSBtZXNzYWdlIHNlbmQgdGltZW91dC4nLCBtZXNzYWdlKTtcbiAgICByZXR1cm4gd2l0aFRpbWVvdXQodGltZW91dCwgdGltZW91dE1lc3NhZ2UsIHNlbmRQcm9taXNlKTtcbiAgfVxuXG4gIF9oYW5kbGVDb25uZWN0aW9uT3BlbiA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLkNPTk5FQ1RFRDtcbiAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLk9OTElORSk7XG4gIH07XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25DbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9yZW1vdmVDb25uZWN0aW9uKCk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlQ2xvc2UpIHtcbiAgICAgIC8vIGNsaWVudCBjbG9zZSwgY2xvc2Ugbm9ybWFsbHlcbiAgICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuQ0xPU0VEO1xuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5PRkZMSU5FKTtcbiAgICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuQ0xPU0UpO1xuICAgICAgdGhpcy5fZm9yY2VDbG9zZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXJ2ZXIgY2xvc2Ugb3IgZXJyb3IsIHJlLWNvbm5lY3RcbiAgICAgIHRoaXMuX3JlY29ubmVjdCgpO1xuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5PRkZMSU5FKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25FcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVJST1IsIGVycm9yKTtcbiAgfTtcblxuICBfaGFuZGxlQ29ubmVjdGlvbk1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVZFTlQsIG1lc3NhZ2UpO1xuICB9O1xuXG4gIGdldFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgfVxuXG4gIF9zZXRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICAhdGhpcy5fY29ubmVjdGlvbixcbiAgICAgICAgJ1Nob3VsZCBub3Qgc2V0IGNvbm5lY3Rpb24gd2hlbiBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RzLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGlvbkV2ZW50cy5mb3JFYWNoKChbbmFtZSwgaGFuZGxlcl0pID0+IHtcbiAgICAgIGNvbm5lY3Rpb24ub24obmFtZSwgaGFuZGxlcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIF9yZW1vdmVDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgJ0Nvbm5lY3Rpb24gbm90IHNldCBvciBhbHJlYWR5IHJlbW92ZWQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmZvckVhY2goKFtuYW1lLCBoYW5kbGVyXSkgPT4ge1xuICAgICAgY29ubmVjdGlvbi5yZW1vdmVMaXN0ZW5lcihuYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbi8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIDMwIHNlY29uZHMgbWF4XG5mdW5jdGlvbiBnZW5lcmF0ZUludGVydmFsKGF0dGVtcHRzLCBtdWx0aXBsaWVyID0gMTAwMCkge1xuICBjb25zdCBtYXhJbnRlcnZhbCA9IE1hdGgubWluKDMwLCAoTWF0aC5wb3coMiwgYXR0ZW1wdHMpIC0gMSkpICogbXVsdGlwbGllcjtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiBtYXhJbnRlcnZhbDtcbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1DbGllbnQuanMiXSwibmFtZXMiOlsiT05FX01JTlVURSIsIlJUTVNlbmRUaW1lb3V0RXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJydG1NZXNzYWdlIiwiRXJyb3IiLCJSVE1Ob3RDb25uZWN0ZWRFcnJvciIsIlJUTVJlY29ubmVjdFRpbWVvdXRFcnJvciIsImNvbnN0cnVjdG9yIiwiX19wcm90b19fIiwicHJvdG90eXBlIiwiUlRNQ2xpZW50Iiwib3B0aW9ucyIsIl9kb0Nvbm5lY3QiLCJfc3RhdGUiLCJDT05ORUNUSU5HIiwid3NVcmwiLCJ0aW1lb3V0TWVzc2FnZSIsIl9yZWNvbm5lY3RUaW1lb3V0IiwiX2dldFVybCIsIl9yZWNvbm5lY3QiLCJlbWl0IiwiRVJST1IiLCJfcmVjb25uZWN0QXR0ZW1wdHMiLCJfc2V0Q29ubmVjdGlvbiIsInVybCIsIldlYlNvY2tldCIsInBpbmdJbnRlcnZhbCIsIl9waW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsIl9waW5nVGltZW91dCIsIl9oYW5kbGVDb25uZWN0aW9uT3BlbiIsIkNPTk5FQ1RFRCIsIk9OTElORSIsIl9oYW5kbGVDb25uZWN0aW9uQ2xvc2UiLCJfcmVtb3ZlQ29ubmVjdGlvbiIsIl9mb3JjZUNsb3NlIiwiQ0xPU0VEIiwiT0ZGTElORSIsIkNMT1NFIiwiX2hhbmRsZUNvbm5lY3Rpb25FcnJvciIsImVycm9yIiwiX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlIiwibWVzc2FnZSIsIkVWRU5UIiwid2luZG93IiwiX3VybCIsIl9iYWNrb2ZmTXVsdGlwbGllciIsImJhY2tvZmZNdWx0aXBsaWVyIiwicmVjb25uZWN0VGltZW91dCIsIl9jb25uZWN0aW9uRXZlbnRzIiwiT1BFTiIsIk1FU1NBR0UiLCJJTklUSUFMIiwiX2Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiUkVDT05ORUNUIiwiX3Nob3VsZERvUmVjb25uZWN0IiwiZ2VuZXJhdGVJbnRlcnZhbCIsInJlYXNvbiIsIkNMT1NJTkciLCJjbG9zZSIsInNlbmQiLCJnZXRTdGF0ZSIsInRpbWVvdXQiLCJJbmZpbml0eSIsIk51bWJlciIsImlzRmluaXRlIiwiX3NlbmQiLCJzZW5kUHJvbWlzZSIsImNvbm5lY3Rpb24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJmb3JFYWNoIiwibmFtZSIsImhhbmRsZXIiLCJvbiIsInJlbW92ZUxpc3RlbmVyIiwiUlRNQ2xpZW50RXZlbnRzIiwiUlRNQ2xpZW50U3RhdGUiLCJSVE1NZXNzYWdlVHlwZXMiLCJSVE1QaW5nVGltZW91dEVycm9yIiwiYXR0ZW1wdHMiLCJtdWx0aXBsaWVyIiwibWF4SW50ZXJ2YWwiLCJNYXRoIiwibWluIiwicG93IiwicmFuZG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBYSxLQUFLLElBQXhCOztJQUVNQyxtQjs7O0FBQ0osK0JBQVlDLFlBQVosRUFBMEJDLFVBQTFCLEVBQXNDO0FBQUE7O0FBQUEsMElBQzlCRCxZQUQ4Qjs7QUFFcEMsVUFBS0MsVUFBTCxHQUFrQkEsVUFBbEI7QUFGb0M7QUFHckM7OztFQUorQkMsSzs7SUFPNUJDLG9COzs7QUFDSixnQ0FBWUgsWUFBWixFQUEwQkMsVUFBMUIsRUFBc0M7QUFBQTs7QUFBQSw2SUFDOUJELFlBRDhCOztBQUVwQyxXQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUZvQztBQUdyQzs7O0VBSmdDQyxLOztJQU83QkUsd0I7OztBQUNKLG9DQUFZSixZQUFaLEVBQTBCO0FBQUE7O0FBQUEscUpBQ2xCQSxZQURrQjs7QUFFeEIsV0FBS0ssV0FBTCxHQUFtQkQsd0JBQW5CO0FBQ0EsV0FBS0UsU0FBTCxHQUFpQkYseUJBQXlCRyxTQUExQztBQUh3QjtBQUl6Qjs7O0VBTG9DTCxLOztBQU10Qzs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXdCcUJN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QUFULENBQTBCeUIsUUFBMUIsRUFBdUQ7QUFBQSxNQUFuQkMsVUFBbUIsdUVBQU4sSUFBTTs7QUFDckQsTUFBTUMsY0FBY0MsS0FBS0MsR0FBTCxDQUFTLEVBQVQsRUFBY0QsS0FBS0UsR0FBTCxDQUFTLENBQVQsRUFBWUwsUUFBWixJQUF3QixDQUF0QyxJQUE0Q0MsVUFBaEU7QUFDQSxTQUFPRSxLQUFLRyxNQUFMLEtBQWdCSixXQUF2QjtBQUNEIiwiZmlsZSI6IlJUTUNsaWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi9kZWxheSc7XG5pbXBvcnQgd2l0aFRpbWVvdXQgZnJvbSAnLi93aXRoVGltZW91dCc7XG5pbXBvcnQgUlRNQ2xpZW50RXZlbnRzIGZyb20gJy4vUlRNQ2xpZW50RXZlbnRzJztcbmltcG9ydCBSVE1DbGllbnRTdGF0ZSBmcm9tICcuL1JUTUNsaWVudFN0YXRlJztcbmltcG9ydCBSVE1Db25uZWN0aW9uRXZlbnRzIGZyb20gJy4vUlRNQ29ubmVjdGlvbkV2ZW50cyc7XG5pbXBvcnQgUlRNQ29ubmVjdGlvbiwgeyBSVE1QaW5nVGltZW91dEVycm9yIH0gZnJvbSAnLi9SVE1Db25uZWN0aW9uJztcbmltcG9ydCBSVE1NZXNzYWdlVHlwZXMgZnJvbSAnLi9SVE1NZXNzYWdlVHlwZXMnO1xuXG5jb25zdCBPTkVfTUlOVVRFID0gNjAgKiAxMDAwO1xuXG5jbGFzcyBSVE1TZW5kVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnJvck1lc3NhZ2UsIHJ0bU1lc3NhZ2UpIHtcbiAgICBzdXBlcihlcnJvck1lc3NhZ2UpO1xuICAgIHRoaXMucnRtTWVzc2FnZSA9IHJ0bU1lc3NhZ2U7XG4gIH1cbn1cblxuY2xhc3MgUlRNTm90Q29ubmVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9yTWVzc2FnZSwgcnRtTWVzc2FnZSkge1xuICAgIHN1cGVyKGVycm9yTWVzc2FnZSk7XG4gICAgdGhpcy5ydG1NZXNzYWdlID0gcnRtTWVzc2FnZTtcbiAgfVxufVxuXG5jbGFzcyBSVE1SZWNvbm5lY3RUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9yTWVzc2FnZSkge1xuICAgIHN1cGVyKGVycm9yTWVzc2FnZSk7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvcjtcbiAgICB0aGlzLl9fcHJvdG9fXyA9IFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvci5wcm90b3R5cGU7XG4gIH1cbn07XG5cbi8qKlxuICogS2VlcCBhbiBSVE0gY2xpZW50IHJ1bm5pbmcgd2l0aCBtdWx0aXBsZS5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICBJTklUSUFMXG4gKiAgICAgICAgICAgICAgICAgICAgICAgK1xuICogICAgICAgICAgZXJyb3IgICAgICAgIHxcbiAqICAgICAgKy0tLS0tLS0tLS0tLS0rICB8XG4gKiAgICAgIHYgICAgICAgICAgICAgKyAgdiAgICAgICAgY29ubmVjdFxuICogIFJFQ09OTkVDVCstLS0tLS0tPkNPTk5FQ1RJTkc8LS0tLS0tLS0tK0NMT1NFRFxuICogICAgICBeICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAgICAgIF5cbiAqICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgc2VydmVyICAgICAgfCAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgIGNsb3NlLyAgICAgIHYgICAgICAgIGNsb3NlICAgICAgICtcbiAqICAgICAgKy0tLS0tLS0tLS0tLStDT05ORUNURUQrLS0tLS0tLS0tLT5DTE9TSU5HXG4gKiAgICAgICAgICAgZXJyb3JcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gb3B0aW9ucy51cmwgLSBBIHN0cmluZyBvciBhIGZ1bmN0aW9uIHJldHVybmluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcgb3IgYSBQcm9taXNlIHJlc29sdmVzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0cmluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ2xpZW50IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICBzdGF0aWMgUlRNQ2xpZW50RXZlbnRzID0gUlRNQ2xpZW50RXZlbnRzO1xuXG4gIHN0YXRpYyBSVE1DbGllbnRTdGF0ZSA9IFJUTUNsaWVudFN0YXRlO1xuXG4gIHN0YXRpYyBSVE1NZXNzYWdlVHlwZXMgPSBSVE1NZXNzYWdlVHlwZXM7XG5cbiAgc3RhdGljIFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvciA9IFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvcjtcblxuICBzdGF0aWMgUlRNUGluZ1RpbWVvdXRFcnJvciA9IFJUTVBpbmdUaW1lb3V0RXJyb3I7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCB7IHVybCB9ID0gb3B0aW9ucztcblxuICAgIGludmFyaWFudChcbiAgICAgIHVybCxcbiAgICAgICdcInVybFwiIGlzIHJlcXVpcmVkLidcbiAgICApO1xuXG4gICAgaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdcInVybFwiIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmcuJ1xuICAgICk7XG5cbiAgICBsZXQgV2ViU29ja2V0ID0gb3B0aW9ucy5XZWJTb2NrZXQ7XG4gICAgaWYgKCFXZWJTb2NrZXQgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIFdlYlNvY2tldCA9IHdpbmRvdy5XZWJTb2NrZXQ7XG4gICAgfVxuXG4gICAgaW52YXJpYW50KFxuICAgICAgV2ViU29ja2V0LFxuICAgICAgJ0EgV2Vic29ja2V0IGNsaWVudCBpcyByZXF1aXJlZC4nXG4gICAgKTtcblxuICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICB0aGlzLldlYlNvY2tldCA9IFdlYlNvY2tldDtcblxuICAgIHRoaXMuX3BpbmdUaW1lb3V0ID0gb3B0aW9ucy5waW5nVGltZW91dCB8fCAxNSAqIDEwMDA7XG4gICAgLy8gZm9sbG93aW5nIG9wdGlvbnMgYXJlIGludGVybmFsIHRvIHNwZWVkIHVwIHRlc3RpbmcuXG4gICAgdGhpcy5fcGluZ0ludGVydmFsID0gb3B0aW9ucy5waW5nSW50ZXJ2YWwgfHwgMTUgKiAxMDAwO1xuICAgIHRoaXMuX2JhY2tvZmZNdWx0aXBsaWVyID0gb3B0aW9ucy5iYWNrb2ZmTXVsdGlwbGllciB8fCAxMDAwO1xuXG4gICAgdGhpcy5fcmVjb25uZWN0VGltZW91dCA9IG9wdGlvbnMucmVjb25uZWN0VGltZW91dCB8fCBPTkVfTUlOVVRFO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbkV2ZW50cyA9IFtcbiAgICAgIFtSVE1Db25uZWN0aW9uRXZlbnRzLk9QRU4sIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25PcGVuXSxcbiAgICAgIFtSVE1Db25uZWN0aW9uRXZlbnRzLkNMT1NFLCB0aGlzLl9oYW5kbGVDb25uZWN0aW9uQ2xvc2VdLFxuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuRVJST1IsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvcl0sXG4gICAgICBbUlRNQ29ubmVjdGlvbkV2ZW50cy5NRVNTQUdFLCB0aGlzLl9oYW5kbGVDb25uZWN0aW9uTWVzc2FnZV0sXG4gICAgXTtcblxuICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuSU5JVElBTDtcbiAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9mb3JjZUNsb3NlID0gZmFsc2U7XG4gICAgdGhpcy5fcmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBjb25uZWN0KCkge1xuICAgIGludmFyaWFudChcbiAgICAgIHRoaXMuX3N0YXRlID09PSBSVE1DbGllbnRTdGF0ZS5JTklUSUFMIHx8XG4gICAgICB0aGlzLl9zdGF0ZSA9PT0gUlRNQ2xpZW50U3RhdGUuQ0xPU0VEIHx8XG4gICAgICB0aGlzLl9zdGF0ZSA9PT0gUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgJ0ludmFsaWQgc3RhdGU6IGNvbm5lY3QoKSBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB3aGVuIGN1cnJlbnQgc3RhdGUgJyArXG4gICAgICAnaXMgXCIlc1wiLCBcIiVzXCIgb3IgXCIlc1wiIGJ1dCB0aGUgY3VycmVudCBzdGF0ZSBpcyBcIiVzXCIuJyxcbiAgICAgIFJUTUNsaWVudFN0YXRlLklOSVRJQUwsXG4gICAgICBSVE1DbGllbnRTdGF0ZS5DTE9TRUQsXG4gICAgICBSVE1DbGllbnRTdGF0ZS5SRUNPTk5FQ1QsXG4gICAgICB0aGlzLl9zdGF0ZVxuICAgICk7XG5cbiAgICB0aGlzLl9kb0Nvbm5lY3QoKTtcbiAgfVxuXG4gIF9kb0Nvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DT05ORUNUSU5HO1xuXG4gICAgbGV0IHdzVXJsO1xuICAgIGNvbnN0IHRpbWVvdXRNZXNzYWdlID0gbmV3IFJUTVJlY29ubmVjdFRpbWVvdXRFcnJvcignUmVnZXQgd2Vic29ja2V0IHVybCBlcnJvcicpO1xuICAgIHRyeSB7XG4gICAgICB3c1VybCA9IGF3YWl0IHdpdGhUaW1lb3V0KHRoaXMuX3JlY29ubmVjdFRpbWVvdXQsIHRpbWVvdXRNZXNzYWdlLCB0aGlzLl9nZXRVcmwoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fcmVjb25uZWN0KCk7IC8vIGludGVudGlvbmFsbHkgaWdub3JlIFwiYXdhaXRcIlxuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5FUlJPUiwgZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuICAgIHRoaXMuX3NldENvbm5lY3Rpb24obmV3IFJUTUNvbm5lY3Rpb24oe1xuICAgICAgdXJsOiB3c1VybCxcbiAgICAgIFdlYlNvY2tldDogdGhpcy5XZWJTb2NrZXQsXG4gICAgICBwaW5nSW50ZXJ2YWw6IHRoaXMuX3BpbmdJbnRlcnZhbCxcbiAgICAgIHBpbmdUaW1lb3V0OiB0aGlzLl9waW5nVGltZW91dFxuICAgIH0pKTtcbiAgfTtcblxuICBhc3luYyBfcmVjb25uZWN0KCkge1xuICAgIC8vIFRoZXJlIGlzIHBvc3NpYmlsdHkgdGhhdCBhIHNpbmdsZSBjYWxsIG9mIF9yZWNvbm5lY3QoKSBpcyBmb2xsb3dkIGFmdGVyIGFuIGFzeW5jaHJvbm91cyB0YXNrLFxuICAgIC8vIHdlIHNob3VsZCBjaGVjayB0aGUgY2xvc2luZy9jbG9zZSBzdGF0ZSBiZWZvcmUgcmVhbGx5IGRvIHRoZSByZWNvbm5lY3QuXG4gICAgaWYgKCF0aGlzLl9zaG91bGREb1JlY29ubmVjdCgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLlJFQ09OTkVDVDtcbiAgICBhd2FpdCBkZWxheShnZW5lcmF0ZUludGVydmFsKHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzLCB0aGlzLl9iYWNrb2ZmTXVsdGlwbGllcikpO1xuXG4gICAgLy8gRHVyaW5nIHRoZSB0aW1lIG9mIHRoZSBkZWxheSwgYHRoaXMuY2xvc2UoKWAgbWF5IGJlIGNhbGxlZCwgc28gd2Ugc2hvdWxkXG4gICAgLy8gcmVjaGVjayB0aGUgc3RhdGUgYmVmb3JlIGNvbm5lY3Rpb24uXG4gICAgaWYgKCF0aGlzLl9zaG91bGREb1JlY29ubmVjdCgpKSByZXR1cm47XG5cbiAgICB0aGlzLl9yZWNvbm5lY3RBdHRlbXB0cysrO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgYXN5bmMgX2dldFVybCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgLy8gYXNzdW1lIHVybCBpcyBhIGZ1bmN0aW9uXG4gICAgcmV0dXJuIGF3YWl0IHVybCgpO1xuICB9XG5cbiAgY2xvc2UocmVhc29uID0gJ3Vua25vd24gcmVhc29uJykge1xuICAgIGlmICh0aGlzLl9jb25uZWN0aW9uICYmIHRoaXMuX3N0YXRlICE9PSBSVE1DbGllbnRTdGF0ZS5DTE9TSU5HKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLkNMT1NJTkc7XG4gICAgICB0aGlzLl9mb3JjZUNsb3NlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb24uY2xvc2UocmVhc29uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlICE9PSBSVE1DbGllbnRTdGF0ZS5DTE9TRUQpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuQ0xPU0VEO1xuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5DTE9TRSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3NlbmQobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9jb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdGlvbi5zZW5kKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUlRNTm90Q29ubmVjdGVkRXJyb3IoXG4gICAgICAnQ2xpZW50IGN1cnJlbnRseSBub3QgY29ubmVjdGVkLCB0aGUgY3VycmVudCBzdGF0ZSBpczogJyArIHRoaXMuZ2V0U3RhdGUoKVxuICAgICk7XG4gIH1cblxuXG4gIGFzeW5jIHNlbmQobWVzc2FnZSwgdGltZW91dCkge1xuICAgIGlmICghdGltZW91dCB8fCB0aW1lb3V0IDwgMCkge1xuICAgICAgdGltZW91dCA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXQpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fc2VuZChtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZW5kUHJvbWlzZSA9IHRoaXMuX3NlbmQobWVzc2FnZSk7XG4gICAgY29uc3QgdGltZW91dE1lc3NhZ2UgPSBuZXcgUlRNU2VuZFRpbWVvdXRFcnJvcignUlRNIG1lc3NhZ2Ugc2VuZCB0aW1lb3V0LicsIG1lc3NhZ2UpO1xuICAgIHJldHVybiB3aXRoVGltZW91dCh0aW1lb3V0LCB0aW1lb3V0TWVzc2FnZSwgc2VuZFByb21pc2UpO1xuICB9XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25PcGVuID0gKCkgPT4ge1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuQ09OTkVDVEVEO1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuT05MSU5FKTtcbiAgfTtcblxuICBfaGFuZGxlQ29ubmVjdGlvbkNsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMuX3JlbW92ZUNvbm5lY3Rpb24oKTtcbiAgICBpZiAodGhpcy5fZm9yY2VDbG9zZSkge1xuICAgICAgLy8gY2xpZW50IGNsb3NlLCBjbG9zZSBub3JtYWxseVxuICAgICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DTE9TRUQ7XG4gICAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLk9GRkxJTkUpO1xuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5DTE9TRSk7XG4gICAgICB0aGlzLl9mb3JjZUNsb3NlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlcnZlciBjbG9zZSBvciBlcnJvciwgcmUtY29ubmVjdFxuICAgICAgdGhpcy5fcmVjb25uZWN0KCk7XG4gICAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLk9GRkxJTkUpO1xuICAgIH1cbiAgfTtcblxuICBfaGFuZGxlQ29ubmVjdGlvbkVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5FUlJPUiwgZXJyb3IpO1xuICB9O1xuXG4gIF9oYW5kbGVDb25uZWN0aW9uTWVzc2FnZSA9IChtZXNzYWdlKSA9PiB7XG4gICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5FVkVOVCwgbWVzc2FnZSk7XG4gIH07XG5cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICB9XG5cbiAgX3NldENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgICF0aGlzLl9jb25uZWN0aW9uLFxuICAgICAgICAnU2hvdWxkIG5vdCBzZXQgY29ubmVjdGlvbiB3aGVuIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmZvckVhY2goKFtuYW1lLCBoYW5kbGVyXSkgPT4ge1xuICAgICAgY29ubmVjdGlvbi5vbihuYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICB9XG5cbiAgX3JlbW92ZUNvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAnQ29ubmVjdGlvbiBub3Qgc2V0IG9yIGFscmVhZHkgcmVtb3ZlZC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMuZm9yRWFjaCgoW25hbWUsIGhhbmRsZXJdKSA9PiB7XG4gICAgICBjb25uZWN0aW9uLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gIH1cblxuICBfc2hvdWxkRG9SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlICE9PSBSVE1DbGllbnRTdGF0ZS5DTE9TSU5HICYmIHRoaXMuX3N0YXRlICE9PSBSVE1DbGllbnRTdGF0ZS5DTE9TRUQ7XG4gIH1cbn1cblxuLy8gZXhwb25lbnRpYWwgYmFja29mZiwgMzAgc2Vjb25kcyBtYXhcbmZ1bmN0aW9uIGdlbmVyYXRlSW50ZXJ2YWwoYXR0ZW1wdHMsIG11bHRpcGxpZXIgPSAxMDAwKSB7XG4gIGNvbnN0IG1heEludGVydmFsID0gTWF0aC5taW4oMzAsIChNYXRoLnBvdygyLCBhdHRlbXB0cykgLSAxKSkgKiBtdWx0aXBsaWVyO1xuICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIG1heEludGVydmFsO1xufVxuIl19 |
@@ -38,6 +38,2 @@ 'use strict'; | ||
var _withTimeout = require('./withTimeout'); | ||
var _withTimeout2 = _interopRequireDefault(_withTimeout); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -69,4 +65,2 @@ | ||
var pingTimeoutError = new RTMPingTimeoutError('Ping timeouted.'); | ||
/** | ||
@@ -96,2 +90,3 @@ * Keep a WebSocket connection with server, handling heartbeat events, | ||
var RTMConnection = function (_EventEmitter) { | ||
@@ -145,2 +140,3 @@ _inherits(RTMConnection, _EventEmitter); | ||
_this2._startLoop = _asyncToGenerator(_regenerator2.default.mark(function _callee() { | ||
var elapsed; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
@@ -151,2 +147,9 @@ while (1) { | ||
if (!(_this2._state === _RTMConnectionState2.default.CONNECTED)) { | ||
_context.next = 11; | ||
break; | ||
} | ||
elapsed = Date.now() - _this2._lastSentTs; | ||
if (!(elapsed < _this2._pingInterval)) { | ||
_context.next = 6; | ||
@@ -156,11 +159,19 @@ break; | ||
_context.next = 5; | ||
return (0, _delay2.default)(_this2._pingInterval - elapsed); | ||
case 5: | ||
return _context.abrupt('continue', 0); | ||
case 6: | ||
_this2._ping(); | ||
_context.next = 4; | ||
_context.next = 9; | ||
return (0, _delay2.default)(_this2._pingInterval); | ||
case 4: | ||
case 9: | ||
_context.next = 0; | ||
break; | ||
case 6: | ||
case 11: | ||
case 'end': | ||
@@ -179,2 +190,3 @@ return _context.stop(); | ||
_this2._callbackMap = new Map(); | ||
_this2._lastSentTs = 0; | ||
@@ -209,3 +221,44 @@ _this2._ws.addEventListener('open', _this2._handleOpen); | ||
key: 'send', | ||
value: function send(message) { | ||
value: function () { | ||
var _ref3 = _asyncToGenerator(_regenerator2.default.mark(function _callee2(message) { | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.prev = 0; | ||
_context2.next = 3; | ||
return this._send(message); | ||
case 3: | ||
return _context2.abrupt('return', _context2.sent); | ||
case 6: | ||
_context2.prev = 6; | ||
_context2.t0 = _context2['catch'](0); | ||
if (_context2.t0 instanceof RTMPingTimeoutError) { | ||
if (this._state !== _RTMConnectionState2.default.CLOSED) { | ||
this.emit(_RTMConnectionEvents2.default.ERROR, _context2.t0); | ||
this._terminate('Reply timeouted.'); | ||
} | ||
} | ||
throw _context2.t0; | ||
case 10: | ||
case 'end': | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this, [[0, 6]]); | ||
})); | ||
function send(_x) { | ||
return _ref3.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
key: '_send', | ||
value: function _send(message) { | ||
var _this4 = this; | ||
@@ -219,9 +272,18 @@ | ||
var callIdMap = this._callbackMap; | ||
var callbackMap = this._callbackMap; | ||
var callId = message.call_id; | ||
(0, _invariant2.default)(!callIdMap.has(callId), 'Duplicate call id %s', callId); | ||
(0, _invariant2.default)(!callbackMap.has(callId), 'Duplicate call id %s', callId); | ||
return new Promise(function (resolve) { | ||
callIdMap.set(callId, resolve); | ||
return new Promise(function (resolve, reject) { | ||
var timer = setTimeout(function () { | ||
reject(new RTMPingTimeoutError()); | ||
}, _this4._pingTimeout); | ||
callbackMap.set(callId, function () { | ||
clearTimeout(timer); | ||
resolve.apply(undefined, arguments); | ||
}); | ||
_this4._lastSentTs = Date.now(); | ||
_this4._ws.send(JSON.stringify(message)); | ||
@@ -233,11 +295,4 @@ }); | ||
value: function _ping() { | ||
var _this5 = this; | ||
(0, _withTimeout2.default)(this._pingTimeout, pingTimeoutError, this.send({ | ||
this.send({ | ||
type: _RTMMessageTypes2.default.PING | ||
})).catch(function (error) { | ||
if (error instanceof RTMPingTimeoutError && _this5._state !== _RTMConnectionState2.default.CLOSED) { | ||
_this5.emit(_RTMConnectionEvents2.default.ERROR, error); | ||
_this5._terminate(); | ||
} | ||
}); | ||
@@ -247,9 +302,9 @@ } | ||
key: 'close', | ||
value: function close() { | ||
value: function close(reason) { | ||
this._state = _RTMConnectionState2.default.CLOSING; | ||
this._ws.close(); | ||
this._ws.close(1000, reason); | ||
} | ||
}, { | ||
key: '_terminate', | ||
value: function _terminate() { | ||
value: function _terminate(reason) { | ||
this._ws.removeEventListener('open', this._handleOpen); | ||
@@ -262,3 +317,3 @@ this._ws.removeEventListener('close', this._handleClose); | ||
this._ws.close(); | ||
this._ws.close(1000, reason); | ||
} | ||
@@ -271,2 +326,2 @@ }]); | ||
exports.default = RTMConnection; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1Db25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbIlJUTVBpbmdUaW1lb3V0RXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25zdHJ1Y3RvciIsIl9fcHJvdG9fXyIsInByb3RvdHlwZSIsIkVycm9yIiwicGluZ1RpbWVvdXRFcnJvciIsIlJUTUNvbm5lY3Rpb24iLCJ1cmwiLCJXZWJTb2NrZXQiLCJwaW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsInN0YXRlIiwiX2hhbmRsZU9wZW4iLCJfc3RhdGUiLCJDT05ORUNURUQiLCJlbWl0IiwiT1BFTiIsIl9zdGFydExvb3AiLCJfaGFuZGxlQ2xvc2UiLCJDTE9TRUQiLCJDTE9TRSIsIl9oYW5kbGVNZXNzYWdlIiwiZXZlbnQiLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwiZGF0YSIsInR5cGUiLCJQT05HIiwiT0siLCJSRVBMWSIsIl9oYW5kbGVSZXBseU1lc3NhZ2UiLCJNRVNTQUdFIiwiX2hhbmRsZUVycm9yIiwiZXJyb3IiLCJFUlJPUiIsIl9waW5nIiwiX3BpbmdJbnRlcnZhbCIsIl9waW5nVGltZW91dCIsIl9jdXJyZW50Q2FsbElkIiwiSU5JVElBTCIsIl93cyIsIl9jYWxsYmFja01hcCIsIk1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja01hcCIsImNhbGxJZCIsImNhbGxfaWQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJoYXMiLCJjYWxsYmFjayIsImdldCIsImRlbGV0ZSIsIl9nZXROZXh0Q2FsbElkIiwiY2FsbElkTWFwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXQiLCJzZW5kIiwic3RyaW5naWZ5IiwiUElORyIsImNhdGNoIiwiX3Rlcm1pbmF0ZSIsIkNMT1NJTkciLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7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Q2pCLFlBQUk3QixpQkFBaUJuQyxtQkFBakIsSUFBd0MsT0FBS2MsTUFBTCxLQUFnQiw2QkFBbUJNLE1BQS9FLEVBQXVGO0FBQ3JGLGlCQUFLSixJQUFMLENBQVUsOEJBQW9Cb0IsS0FBOUIsRUFBcUNELEtBQXJDO0FBQ0EsaUJBQUs4QixVQUFMO0FBQ0Q7QUFDRixPQVBEO0FBUUQ7Ozs0QkFTTztBQUNOLFdBQUtuRCxNQUFMLEdBQWMsNkJBQW1Cb0QsT0FBakM7QUFDQSxXQUFLeEIsR0FBTCxDQUFTeUIsS0FBVDtBQUNEOzs7aUNBRVk7QUFDWCxXQUFLekIsR0FBTCxDQUFTMEIsbUJBQVQsQ0FBNkIsTUFBN0IsRUFBcUMsS0FBS3ZELFdBQTFDO0FBQ0EsV0FBSzZCLEdBQUwsQ0FBUzBCLG1CQUFULENBQTZCLE9BQTdCLEVBQXNDLEtBQUtqRCxZQUEzQztBQUNBLFdBQUt1QixHQUFMLENBQVMwQixtQkFBVCxDQUE2QixTQUE3QixFQUF3QyxLQUFLOUMsY0FBN0M7QUFDQSxXQUFLb0IsR0FBTCxDQUFTMEIsbUJBQVQsQ0FBNkIsT0FBN0IsRUFBc0MsS0FBS2xDLFlBQTNDO0FBQ0EsV0FBS3BCLE1BQUwsR0FBYyw2QkFBbUJNLE1BQWpDO0FBQ0EsV0FBS0osSUFBTCxDQUFVLDhCQUFvQkssS0FBOUI7O0FBRUEsV0FBS3FCLEdBQUwsQ0FBU3lCLEtBQVQ7QUFDRDs7Ozs7O2tCQTdIa0I1RCxhIiwiZmlsZSI6IlJUTUNvbm5lY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSAgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBSVE1Db25uZWN0aW9uU3RhdGUgZnJvbSAnLi9SVE1Db25uZWN0aW9uU3RhdGUnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25FdmVudHMgZnJvbSAnLi9SVE1Db25uZWN0aW9uRXZlbnRzJztcbmltcG9ydCBSVE1NZXNzYWdlVHlwZXMgZnJvbSAnLi9SVE1NZXNzYWdlVHlwZXMnO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4vZGVsYXknO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0IHdpdGhUaW1lb3V0IGZyb20gJy4vd2l0aFRpbWVvdXQnO1xuXG5leHBvcnQgY2xhc3MgUlRNUGluZ1RpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JNZXNzYWdlKSB7XG4gICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gUlRNUGluZ1RpbWVvdXRFcnJvcjtcbiAgICB0aGlzLl9fcHJvdG9fXyA9IFJUTVBpbmdUaW1lb3V0RXJyb3IucHJvdG90eXBlO1xuICB9XG59XG5cbmNvbnN0IHBpbmdUaW1lb3V0RXJyb3IgPSBuZXcgUlRNUGluZ1RpbWVvdXRFcnJvcignUGluZyB0aW1lb3V0ZWQuJyk7XG5cbi8qKlxuICogS2VlcCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIHdpdGggc2VydmVyLCBoYW5kbGluZyBoZWFydGJlYXQgZXZlbnRzLFxuICogb21pdHRpbmcgb2Jzb2xldGUgbWVzc2FnZSB0eXBlcy5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgIElOSVRJQUxcbiAqICAgICAgICtcbiAqICAgICAgIHxcbiAqICAgICAgIHxcbiAqICAgICAgIHZcbiAqICAgQ09OTkVDVEVEICstK1xuICogICAgICAgKyAgICAgICB8XG4gKiBjbGllbnR8ICAgICAgIHxcbiAqIGNsb3NlIHwgICAgICAgfCBzZXJ2ZXJcbiAqICAgICAgIHYgICAgICAgfCBjbG9zZS9cbiAqICAgIENMT1NJTkcgICAgfCBlcnJvclxuICogICAgICAgKyAgICAgICB8XG4gKiAgICAgICB8ICAgICAgIHxcbiAqICAgICAgIHwgICAgICAgfFxuICogICAgICAgdiAgICAgICB8XG4gKiAgICBDTE9TRUQgPC0tLStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgc3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih7IHVybCwgV2ViU29ja2V0LCBwaW5nSW50ZXJ2YWwsIHBpbmdUaW1lb3V0IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3BpbmdUaW1lb3V0ID0gcGluZ1RpbWVvdXQ7XG4gICAgdGhpcy5fcGluZ0ludGVydmFsID0gcGluZ0ludGVydmFsO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxsSWQgPSAwO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLklOSVRJQUw7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5fY2FsbGJhY2tNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICB0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICB9XG5cbiAgX2hhbmRsZU9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEO1xuICAgIHRoaXMuZW1pdChSVE1Db25uZWN0aW9uRXZlbnRzLk9QRU4pO1xuICAgIHRoaXMuX3N0YXJ0TG9vcCgpO1xuICB9O1xuXG4gIF9oYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7XG4gICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UpO1xuICB9O1xuXG4gIF9oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgUlRNTWVzc2FnZVR5cGVzLlBPTkc6XG4gICAgICBjYXNlIFJUTU1lc3NhZ2VUeXBlcy5PSzpcbiAgICAgICAgLy8gaWdub3JlIGRlcHJlY2F0ZWQgZXZlbnRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSVE1NZXNzYWdlVHlwZXMuUkVQTFk6XG4gICAgICAgIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5NRVNTQUdFLCBtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLl9jYWxsYmFja01hcDtcbiAgICBjb25zdCBjYWxsSWQgPSBtZXNzYWdlLmNhbGxfaWQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBjYWxsYmFja01hcC5oYXMoY2FsbElkKSxcbiAgICAgICAgJ0NhbGwgaWQgcmVwbGllZCB3aXRob3V0IHNlbmRpbmc6ICVzJyxcbiAgICAgICAgY2FsbElkXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tNYXAuZ2V0KGNhbGxJZCk7XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGNhbGxJZCk7XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sobWVzc2FnZSk7XG4gIH1cblxuICBfaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgZXJyb3IpO1xuICB9O1xuXG4gIF9nZXROZXh0Q2FsbElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsbElkKys7XG4gIH1cblxuICBzZW5kKG1lc3NhZ2UpIHtcbiAgICBpZiAoIW1lc3NhZ2UuY2FsbF9pZCkge1xuICAgICAgbWVzc2FnZSA9IHtcbiAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgY2FsbF9pZDogdGhpcy5fZ2V0TmV4dENhbGxJZCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxJZE1hcCA9IHRoaXMuX2NhbGxiYWNrTWFwO1xuICAgIGNvbnN0IGNhbGxJZCA9IG1lc3NhZ2UuY2FsbF9pZDtcblxuICAgIGludmFyaWFudChcbiAgICAgICFjYWxsSWRNYXAuaGFzKGNhbGxJZCksXG4gICAgICAnRHVwbGljYXRlIGNhbGwgaWQgJXMnLFxuICAgICAgY2FsbElkXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2FsbElkTWFwLnNldChjYWxsSWQsIHJlc29sdmUpO1xuICAgICAgdGhpcy5fd3Muc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG4gICAgfSk7XG4gIH1cblxuICBfcGluZygpIHtcbiAgICB3aXRoVGltZW91dCh0aGlzLl9waW5nVGltZW91dCwgcGluZ1RpbWVvdXRFcnJvciwgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFJUTU1lc3NhZ2VUeXBlcy5QSU5HXG4gICAgfSkpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJUTVBpbmdUaW1lb3V0RXJyb3IgJiYgdGhpcy5fc3RhdGUgIT09IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQpIHtcbiAgICAgICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuRVJST1IsIGVycm9yKTtcbiAgICAgICAgdGhpcy5fdGVybWluYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfc3RhcnRMb29wID0gYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICh0aGlzLl9zdGF0ZSA9PT0gUlRNQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkge1xuICAgICAgdGhpcy5fcGluZygpO1xuICAgICAgYXdhaXQgZGVsYXkodGhpcy5fcGluZ0ludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ0xPU0lORztcbiAgICB0aGlzLl93cy5jbG9zZSgpO1xuICB9XG5cbiAgX3Rlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLl93cy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLkNMT1NFRDtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5DTE9TRSk7XG5cbiAgICB0aGlzLl93cy5jbG9zZSgpO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1Db25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbIlJUTVBpbmdUaW1lb3V0RXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25zdHJ1Y3RvciIsIl9fcHJvdG9fXyIsInByb3RvdHlwZSIsIkVycm9yIiwiUlRNQ29ubmVjdGlvbiIsInVybCIsIldlYlNvY2tldCIsInBpbmdJbnRlcnZhbCIsInBpbmdUaW1lb3V0Iiwic3RhdGUiLCJfaGFuZGxlT3BlbiIsIl9zdGF0ZSIsIkNPTk5FQ1RFRCIsImVtaXQiLCJPUEVOIiwiX3N0YXJ0TG9vcCIsIl9oYW5kbGVDbG9zZSIsIkNMT1NFRCIsIkNMT1NFIiwiX2hhbmRsZU1lc3NhZ2UiLCJldmVudCIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJkYXRhIiwidHlwZSIsIlBPTkciLCJPSyIsIlJFUExZIiwiX2hhbmRsZVJlcGx5TWVzc2FnZSIsIk1FU1NBR0UiLCJfaGFuZGxlRXJyb3IiLCJlcnJvciIsIkVSUk9SIiwiZWxhcHNlZCIsIkRhdGUiLCJub3ciLCJfbGFzdFNlbnRUcyIsIl9waW5nSW50ZXJ2YWwiLCJfcGluZyIsIl9waW5nVGltZW91dCIsIl9jdXJyZW50Q2FsbElkIiwiSU5JVElBTCIsIl93cyIsIl9jYWxsYmFja01hcCIsIk1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja01hcCIsImNhbGxJZCIsImNhbGxfaWQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJoYXMiLCJjYWxsYmFjayIsImdldCIsImRlbGV0ZSIsIl9zZW5kIiwiX3Rlcm1pbmF0ZSIsIl9nZXROZXh0Q2FsbElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJzZXQiLCJjbGVhclRpbWVvdXQiLCJzZW5kIiwic3RyaW5naWZ5IiwiUElORyIsInJlYXNvbiIsIkNMT1NJTkciLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7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QUFzQyxLQUFLMUMsWUFBM0M7QUFDQSxXQUFLcEIsTUFBTCxHQUFjLDZCQUFtQk0sTUFBakM7QUFDQSxXQUFLSixJQUFMLENBQVUsOEJBQW9CSyxLQUE5Qjs7QUFFQSxXQUFLeUIsR0FBTCxDQUFTNkIsS0FBVCxDQUFlLElBQWYsRUFBcUJGLE1BQXJCO0FBQ0Q7Ozs7OztrQkF0SmtCbEUsYSIsImZpbGUiOiJSVE1Db25uZWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBSVE1Db25uZWN0aW9uU3RhdGUgZnJvbSAnLi9SVE1Db25uZWN0aW9uU3RhdGUnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25FdmVudHMgZnJvbSAnLi9SVE1Db25uZWN0aW9uRXZlbnRzJztcbmltcG9ydCBSVE1NZXNzYWdlVHlwZXMgZnJvbSAnLi9SVE1NZXNzYWdlVHlwZXMnO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4vZGVsYXknO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuXG5leHBvcnQgY2xhc3MgUlRNUGluZ1RpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JNZXNzYWdlKSB7XG4gICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gUlRNUGluZ1RpbWVvdXRFcnJvcjtcbiAgICB0aGlzLl9fcHJvdG9fXyA9IFJUTVBpbmdUaW1lb3V0RXJyb3IucHJvdG90eXBlO1xuICB9XG59XG5cbi8qKlxuICogS2VlcCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIHdpdGggc2VydmVyLCBoYW5kbGluZyBoZWFydGJlYXQgZXZlbnRzLFxuICogb21pdHRpbmcgb2Jzb2xldGUgbWVzc2FnZSB0eXBlcy5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgIElOSVRJQUxcbiAqICAgICAgICtcbiAqICAgICAgIHxcbiAqICAgICAgIHxcbiAqICAgICAgIHZcbiAqICAgQ09OTkVDVEVEICstK1xuICogICAgICAgKyAgICAgICB8XG4gKiBjbGllbnR8ICAgICAgIHxcbiAqIGNsb3NlIHwgICAgICAgfCBzZXJ2ZXJcbiAqICAgICAgIHYgICAgICAgfCBjbG9zZS9cbiAqICAgIENMT1NJTkcgICAgfCBlcnJvclxuICogICAgICAgKyAgICAgICB8XG4gKiAgICAgICB8ICAgICAgIHxcbiAqICAgICAgIHwgICAgICAgfFxuICogICAgICAgdiAgICAgICB8XG4gKiAgICBDTE9TRUQgPC0tLStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgc3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih7IHVybCwgV2ViU29ja2V0LCBwaW5nSW50ZXJ2YWwsIHBpbmdUaW1lb3V0IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3BpbmdUaW1lb3V0ID0gcGluZ1RpbWVvdXQ7XG4gICAgdGhpcy5fcGluZ0ludGVydmFsID0gcGluZ0ludGVydmFsO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxsSWQgPSAwO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLklOSVRJQUw7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5fY2FsbGJhY2tNYXAgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fbGFzdFNlbnRUcyA9IDA7XG5cbiAgICB0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICB9XG5cbiAgX2hhbmRsZU9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEO1xuICAgIHRoaXMuZW1pdChSVE1Db25uZWN0aW9uRXZlbnRzLk9QRU4pO1xuICAgIHRoaXMuX3N0YXJ0TG9vcCgpO1xuICB9O1xuXG4gIF9oYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7XG4gICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UpO1xuICB9O1xuXG4gIF9oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgUlRNTWVzc2FnZVR5cGVzLlBPTkc6XG4gICAgICBjYXNlIFJUTU1lc3NhZ2VUeXBlcy5PSzpcbiAgICAgICAgLy8gaWdub3JlIGRlcHJlY2F0ZWQgZXZlbnRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSVE1NZXNzYWdlVHlwZXMuUkVQTFk6XG4gICAgICAgIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5NRVNTQUdFLCBtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLl9jYWxsYmFja01hcDtcbiAgICBjb25zdCBjYWxsSWQgPSBtZXNzYWdlLmNhbGxfaWQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBjYWxsYmFja01hcC5oYXMoY2FsbElkKSxcbiAgICAgICAgJ0NhbGwgaWQgcmVwbGllZCB3aXRob3V0IHNlbmRpbmc6ICVzJyxcbiAgICAgICAgY2FsbElkXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tNYXAuZ2V0KGNhbGxJZCk7XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGNhbGxJZCk7XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sobWVzc2FnZSk7XG4gIH1cblxuICBfaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgZXJyb3IpO1xuICB9O1xuXG4gIF9nZXROZXh0Q2FsbElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsbElkKys7XG4gIH1cblxuICBhc3luYyBzZW5kKG1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3NlbmQobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJUTVBpbmdUaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlICE9PSBSVE1Db25uZWN0aW9uU3RhdGUuQ0xPU0VEKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuRVJST1IsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLl90ZXJtaW5hdGUoJ1JlcGx5IHRpbWVvdXRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgX3NlbmQobWVzc2FnZSkge1xuICAgIGlmICghbWVzc2FnZS5jYWxsX2lkKSB7XG4gICAgICBtZXNzYWdlID0ge1xuICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICBjYWxsX2lkOiB0aGlzLl9nZXROZXh0Q2FsbElkKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLl9jYWxsYmFja01hcDtcbiAgICBjb25zdCBjYWxsSWQgPSBtZXNzYWdlLmNhbGxfaWQ7XG5cbiAgICBpbnZhcmlhbnQoXG4gICAgICAhY2FsbGJhY2tNYXAuaGFzKGNhbGxJZCksXG4gICAgICAnRHVwbGljYXRlIGNhbGwgaWQgJXMnLFxuICAgICAgY2FsbElkXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IFJUTVBpbmdUaW1lb3V0RXJyb3IoKSk7XG4gICAgICB9LCB0aGlzLl9waW5nVGltZW91dCk7XG5cbiAgICAgIGNhbGxiYWNrTWFwLnNldChjYWxsSWQsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHJlc29sdmUoLi4uYXJncyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fbGFzdFNlbnRUcyA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLl93cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9waW5nKCkge1xuICAgIHRoaXMuc2VuZCh7XG4gICAgICB0eXBlOiBSVE1NZXNzYWdlVHlwZXMuUElOR1xuICAgIH0pO1xuICB9XG5cbiAgX3N0YXJ0TG9vcCA9IGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAodGhpcy5fc3RhdGUgPT09IFJUTUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFNlbnRUcztcbiAgICAgIGlmIChlbGFwc2VkIDwgdGhpcy5fcGluZ0ludGVydmFsKSB7XG4gICAgICAgIGF3YWl0IGRlbGF5KHRoaXMuX3BpbmdJbnRlcnZhbCAtIGVsYXBzZWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGluZygpO1xuICAgICAgYXdhaXQgZGVsYXkodGhpcy5fcGluZ0ludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY2xvc2UocmVhc29uKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ0xPU0lORztcbiAgICB0aGlzLl93cy5jbG9zZSgxMDAwLCByZWFzb24pO1xuICB9XG5cbiAgX3Rlcm1pbmF0ZShyZWFzb24pIHtcbiAgICB0aGlzLl93cy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLkNMT1NFRDtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5DTE9TRSk7XG5cbiAgICB0aGlzLl93cy5jbG9zZSgxMDAwLCByZWFzb24pO1xuICB9XG59XG4iXX0= |
Sorry, the diff of this file is not supported yet
84790
5.17%820
8.32%15
-6.25%