New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ws-messaging

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ws-messaging - npm Package Compare versions

Comparing version 0.7.2 to 0.8.0

66

lib/Client.js
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

@@ -331,11 +329,9 @@

if (needsAck) {
(function () {
var id = _this6.counter++;
var ack = new Ack(id, ackTimeout, function () {
return delete _this6.pendingAcks[id];
});
_this6.pendingAcks[id] = ack;
promise = ack.promise;
message.id = id;
})();
var id = this.counter++;
var ack = new Ack(id, ackTimeout, function () {
return delete _this6.pendingAcks[id];
});
this.pendingAcks[id] = ack;
promise = ack.promise;
message.id = id;
}

@@ -357,19 +353,17 @@ return { message: message, promise: promise };

if (message.id) {
(function () {
var id = message.id;
var fn = getOwnProp(_this7.handlers, message.name);
if (fn) {
attempt(function () {
return fn.apply(null, message.args);
}).then(function () {
var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return _this7._send({ id: id, result: result });
}).catch(function (error) {
return _this7._send({ id: id, error: _this7.errorFormatter(error) });
});
} else {
var error = _this7.errorFormatter(new NoProcedureError(message.name));
_this7._send({ id: id, error: error });
}
})();
var id = message.id;
var fn = getOwnProp(this.handlers, message.name);
if (fn) {
attempt(function () {
return fn.apply(null, message.args);
}).then(function () {
var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return _this7._send({ id: id, result: result });
}).catch(function (error) {
return _this7._send({ id: id, error: _this7.errorFormatter(error) });
});
} else {
var error = this.errorFormatter(new NoProcedureError(message.name));
this._send({ id: id, error: error });
}
} else {

@@ -408,12 +402,6 @@ emit.apply(this, concat(message.name, message.args));

} else {
var _ret3 = function () {
var binary = typeof data !== 'string';
return {
v: fromCallback(function (cb) {
return _this8.socket.send(data, { binary: binary }, cb);
})
};
}();
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
var binary = typeof data !== 'string';
return fromCallback(function (cb) {
return _this8.socket.send(data, { binary: binary }, cb);
});
}

@@ -518,2 +506,2 @@ });

module.exports = Client;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DbGllbnQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJQcm9taXNlIiwiYmxhY2tsaXN0IiwiY29uY2F0IiwiYmluZCIsImVtaXQiLCJwcm90b3R5cGUiLCJpc0JsYWNrbGlzdGVkRXZlbnQiLCJuYW1lIiwiaW5kZXhPZiIsImdldE93blByb3AiLCJvYmoiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsIkNvbm5lY3Rpb25FcnJvciIsImlkIiwiT2JqZWN0IiwiY3JlYXRlIiwiRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJOb1Byb2NlZHVyZUVycm9yIiwicHJvY2VkdXJlIiwidmFsaWRhdGVJZCIsInZhbGlkYXRlIiwibWVzc2FnZSIsInBhc3NlZCIsImFyZ3MiLCJBcnJheSIsIm5wcm9wcyIsImtleXMiLCJsZW5ndGgiLCJBY2siLCJ0aW1lb3V0IiwiY2IiLCJwcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJmb3JjZU5hY2siLCJlcnJvciIsImNsZWFyVGltZW91dCIsInJlc3VsdCIsInJldHJ5Q29uZmlnIiwiZmFjdG9yIiwibWF4VGltZW91dCIsIkluZmluaXR5IiwibWluVGltZW91dCIsInJhbmRvbWl6ZSIsInJldHJpZXMiLCJkZWZhdWx0cyIsImFja1RpbWVvdXQiLCJhdXRoIiwiYXV0b1JlY29ubmVjdCIsImF1dG9SZWNvbm5lY3RPcHRpb25zIiwiYmluYXJ5VHlwZSIsImRlY29kZXIiLCJKU09OIiwicGFyc2UiLCJlbmNvZGVyIiwic3RyaW5naWZ5IiwiZXJyb3JGb3JtYXR0ZXIiLCJTdHJpbmciLCJwaW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsInByb3RvY29scyIsInJlY2VpdmVIb29rIiwic2VuZEhvb2siLCJza2lwVmFsaWRhdGlvbiIsIldlYlNvY2tldCIsInczYyIsIndzT3B0aW9ucyIsIkNsaWVudCIsInVybCIsIm9wdGlvbnMiLCJjb25uZWN0ZWQiLCJjb3VudGVyIiwiZGF0YSIsImhhbmRsZXJzIiwicGVuZGluZ0Fja3MiLCJ0ZXJtaW5hdGVkIiwicmVnaXN0ZXIiLCJyZWNvbm5lY3QiLCJ0aGVuIiwibXNnIiwiX2Rpc3BhdGNoIiwiY2F0Y2giLCJzZW5kIiwic29ja2V0Iiwib25vcGVuIiwib25lcnJvciIsIm9uY2xvc2UiLCJfb25DbG9zZSIsIm9ubWVzc2FnZSIsIl9vbk1lc3NhZ2UiLCJwaW5nVGltZW91dElkIiwiY2FsbCIsIl9tYWtlTWVzc2FnZSIsIl9zZW5kIiwiX3BpbmciLCJjbG9zZSIsInJlYWR5U3RhdGUiLCJyYW5kIiwiTWF0aCIsInJhbmRvbSIsIm1pbiIsInBvdyIsInJlY29ubmVjdFRpbWVvdXRJZCIsImNvbm5lY3RIYW5kbGVyIiwiYXV0aFRpbWVvdXRJZCIsIm9wZW5IYW5kbGVyIiwiaXNBdXRoIiwib25jZSIsIl9zZXRFdmVudHMiLCJldiIsIm9mZiIsImNvZGUiLCJhY2siLCJfcmVjb25uZWN0IiwibmVlZHNBY2siLCJmbiIsImFwcGx5Iiwic2V0dGxlIiwic2tpcEVuY29kZXIiLCJiaW5hcnkiLCJldmVudCIsImhhbmRsZXIiLCJfaXNPcGVuIiwiX29wZW4iLCJzdHIiLCJ0ZXJtaW5hdGUiLCJlbWl0RW5jb2RlZCIsInNlbmRFbmNvZGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztBQUtBLElBQU1BLGVBQWVDLFFBQVEsZUFBUixDQUFyQjs7ZUFDbURBLFFBQVEsU0FBUixDO0lBQTNDQyxNLFlBQUFBLE07SUFBUUMsTyxZQUFBQSxPO0lBQVNDLFksWUFBQUEsWTtJQUFjQyxPLFlBQUFBLE87O0FBRXZDLElBQU1DLFlBQVksQ0FBRSxPQUFGLEVBQVcsTUFBWCxFQUFtQixPQUFuQixFQUE0QixNQUE1QixFQUFvQyxPQUFwQyxDQUFsQjs7QUFJQSxJQUFNQyxTQUFTLEdBQUdBLE1BQUgsQ0FBVUMsSUFBVixDQUFlLEVBQWYsQ0FBZjs7QUFFQSxJQUFNQyxPQUFPVCxhQUFhVSxTQUFiLENBQXVCRCxJQUFwQzs7QUFFQSxTQUFTRSxrQkFBVCxDQUE2QkMsSUFBN0IsRUFBbUM7QUFDakMsU0FBT04sVUFBVU8sT0FBVixDQUFrQkQsSUFBbEIsS0FBMkIsQ0FBbEM7QUFDRDs7QUFFRCxTQUFTRSxVQUFULENBQXFCQyxHQUFyQixFQUEwQkgsSUFBMUIsRUFBZ0M7QUFDOUIsU0FBT0csSUFBSUMsY0FBSixDQUFtQkosSUFBbkIsSUFBMkJHLElBQUlILElBQUosQ0FBM0IsR0FBdUNLLFNBQTlDO0FBQ0Q7O0FBY0QsU0FBU0MsZUFBVCxDQUEwQkMsRUFBMUIsRUFBOEI7QUFDNUIsT0FBS1AsSUFBTCxHQUFZLGlCQUFaO0FBQ0EsT0FBS08sRUFBTCxHQUFVQSxFQUFWO0FBQ0Q7O0FBRURELGdCQUFnQlIsU0FBaEIsR0FBNEJVLE9BQU9DLE1BQVAsQ0FBY0MsTUFBTVosU0FBcEIsQ0FBNUI7O0FBV0EsU0FBU2EsWUFBVCxDQUF1QkosRUFBdkIsRUFBMkI7QUFDekIsT0FBS1AsSUFBTCxHQUFZLGNBQVo7QUFDQSxPQUFLTyxFQUFMLEdBQVVBLEVBQVY7QUFDRDs7QUFFREksYUFBYWIsU0FBYixHQUF5QlUsT0FBT0MsTUFBUCxDQUFjQyxNQUFNWixTQUFwQixDQUF6Qjs7QUFXQSxTQUFTYyxnQkFBVCxDQUEyQkMsU0FBM0IsRUFBc0M7QUFDcEMsT0FBS2IsSUFBTCxHQUFZLGtCQUFaO0FBQ0EsT0FBS2EsU0FBTCxHQUFpQkEsU0FBakI7QUFDRDs7QUFFREQsaUJBQWlCZCxTQUFqQixHQUE2QlUsT0FBT0MsTUFBUCxDQUFjQyxNQUFNWixTQUFwQixDQUE3Qjs7QUFJQSxTQUFTZ0IsVUFBVCxDQUFxQlAsRUFBckIsRUFBeUI7QUFDdkIsU0FBTyxPQUFPQSxFQUFQLEtBQWMsUUFBZCxJQUEyQkEsS0FBSyxDQUFOLEtBQWEsQ0FBdkMsSUFBNENBLEtBQUssQ0FBeEQ7QUFDRDs7QUFFRCxTQUFTUSxRQUFULENBQW1CQyxPQUFuQixFQUE0QjtBQUMxQixNQUFJQyxTQUFTLEtBQWI7QUFDQSxNQUFJRCxtQkFBbUJSLE1BQXZCLEVBQStCO0FBQzdCLFFBQUlRLFFBQVFoQixJQUFaLEVBQWtCO0FBQ2hCLFVBQUksT0FBT2dCLFFBQVFoQixJQUFmLEtBQXdCLFFBQXhCLElBQW9DZ0IsUUFBUUUsSUFBUixZQUF3QkMsS0FBaEUsRUFBdUU7QUFDckUsWUFBSUMsU0FBU1osT0FBT2EsSUFBUCxDQUFZTCxPQUFaLEVBQXFCTSxNQUFsQztBQUNBLFlBQUlGLFdBQVcsQ0FBWCxJQUFpQkEsV0FBVyxDQUFYLElBQWdCTixXQUFXRSxRQUFRVCxFQUFuQixDQUFyQyxFQUE4RDtBQUM1RFUsbUJBQVMsSUFBVDtBQUNEO0FBQ0Y7QUFDRixLQVBELE1BT087QUFDTCxVQUFJRyxVQUFTWixPQUFPYSxJQUFQLENBQVlMLE9BQVosRUFBcUJNLE1BQWxDO0FBQ0EsVUFBSUYsWUFBVyxDQUFYLElBQWdCTixXQUFXRSxRQUFRVCxFQUFuQixDQUFwQixFQUE0QztBQUMxQyxZQUFJUyxRQUFRWixjQUFSLENBQXVCLE9BQXZCLEtBQW1DWSxRQUFRWixjQUFSLENBQXVCLFFBQXZCLENBQXZDLEVBQXlFO0FBQ3ZFYSxtQkFBUyxJQUFUO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRCxNQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNYLFVBQU0sSUFBSVAsS0FBSixDQUFVLGtCQUFWLENBQU47QUFDRDtBQUNGOztJQUlLYSxHO0FBQ0osZUFBYWhCLEVBQWIsRUFBaUJpQixPQUFqQixFQUEwQkMsRUFBMUIsRUFBOEI7QUFBQTs7QUFBQTs7QUFDNUIsU0FBS2xCLEVBQUwsR0FBVUEsRUFBVjtBQUNBLFNBQUttQixPQUFMLEdBQWUsSUFBSWpDLE9BQUosQ0FBWSxVQUFDa0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQzlDLFlBQUtELE9BQUwsR0FBZUEsT0FBZjtBQUNBLFlBQUtDLE1BQUwsR0FBY0EsTUFBZDtBQUNELEtBSGMsQ0FBZjtBQUlBLFNBQUtILEVBQUwsR0FBVUEsRUFBVjtBQUNBLFNBQUtELE9BQUwsR0FBZUssV0FBVztBQUFBLGFBQU0sTUFBS0MsU0FBTCxDQUFlLElBQUluQixZQUFKLENBQWlCSixFQUFqQixDQUFmLENBQU47QUFBQSxLQUFYLEVBQXVEaUIsT0FBdkQsQ0FBZjtBQUNEOzs7OzhCQUVVTyxLLEVBQU87QUFDaEJDLG1CQUFhLEtBQUtSLE9BQWxCO0FBQ0EsV0FBS0MsRUFBTDtBQUNBLFdBQUtHLE1BQUwsQ0FBWUcsS0FBWjtBQUNEOzs7MkJBRU9mLE8sRUFBUztBQUNmZ0IsbUJBQWEsS0FBS1IsT0FBbEI7QUFDQSxXQUFLQyxFQUFMO0FBQ0EsVUFBSVQsUUFBUVosY0FBUixDQUF1QixPQUF2QixDQUFKLEVBQXFDO0FBQ25DLGFBQUt3QixNQUFMLENBQVlaLFFBQVFlLEtBQXBCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsYUFBS0osT0FBTCxDQUFhWCxRQUFRaUIsTUFBckI7QUFDRDtBQUNGOzs7Ozs7QUF1R0gsSUFBTUMsY0FBYztBQUNsQkMsVUFBUSxDQURVO0FBRWxCQyxjQUFZQyxRQUZNO0FBR2xCQyxjQUFZLElBSE07QUFJbEJDLGFBQVcsSUFKTztBQUtsQkMsV0FBUztBQUxTLENBQXBCOztBQVFBLElBQU1DLFdBQVc7QUFDZkMsY0FBWSxLQURHO0FBRWZDLFFBQU0sRUFGUztBQUdmQyxpQkFBZSxJQUhBO0FBSWZDLHdCQUFzQlgsV0FKUDtBQUtmWSxjQUFZLGFBTEc7QUFNZkMsV0FBU0MsS0FBS0MsS0FOQztBQU9mQyxXQUFTRixLQUFLRyxTQVBDO0FBUWZDLGtCQUFnQkMsTUFSRDtBQVNmQyxnQkFBYyxLQVRDO0FBVWZDLGVBQWEsS0FWRTtBQVdmQyxhQUFXLGNBWEk7QUFZZkMsZUFBYSxJQVpFO0FBYWZDLFlBQVUsSUFiSztBQWNmQyxrQkFBZ0IsS0FkRDtBQWVmQyxhQUFXdkQsU0FmSTtBQWdCZndELE9BQUt4RCxTQWhCVTtBQWlCZnlELGFBQVd6RDtBQWpCSSxDQUFqQjs7SUE0Qk0wRCxNOzs7QUFPSixrQkFBYUMsR0FBYixFQUFnQztBQUFBLFFBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFBQTs7QUFFOUIsV0FBS0QsR0FBTCxHQUFXQSxHQUFYOztBQVFBMUUsbUJBQWFtRCxRQUFiLEVBQXVCd0IsT0FBdkI7QUFDQSxXQUFLL0IsV0FBTCxHQUFtQixFQUFuQjtBQUNBNUMsV0FBTyxPQUFLNEMsV0FBWixFQUF5QkEsV0FBekIsRUFBc0MrQixRQUFRcEIsb0JBQTlDO0FBQ0EsUUFBSSxDQUFDLE9BQUtlLFNBQVYsRUFBcUI7QUFDbkIsYUFBS0EsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxhQUFLQyxHQUFMLEdBQVcsT0FBS0EsR0FBTCxLQUFheEQsU0FBYixHQUF5QixJQUF6QixHQUFnQyxPQUFLd0QsR0FBaEQ7QUFDRDs7QUFNRCxXQUFLSyxTQUFMLEdBQWlCLEtBQWpCO0FBQ0EsV0FBS0MsT0FBTCxHQUFlLENBQWY7QUFDQSxXQUFLQyxJQUFMLEdBQVksRUFBWjtBQUNBLFdBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxXQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsV0FBSy9FLE9BQUwsR0FBZSxDQUFmOztBQU9BLFdBQUtnRixVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsV0FBS0MsUUFBTCxDQUFjLE1BQWQsRUFBc0I7QUFBQSxhQUFNL0UsUUFBUWtDLE9BQVIsRUFBTjtBQUFBLEtBQXRCO0FBQ0EsV0FBSzhDLFNBQUw7QUFwQzhCO0FBcUMvQjs7OzsrQkFFV0wsSSxFQUFNO0FBQUE7O0FBQ2hCLFVBQUlwRCxnQkFBSjtBQUNBekIsY0FBUTtBQUFBLGVBQU0sT0FBS3dELE9BQUwsQ0FBYXFCLEtBQUtBLElBQWxCLENBQU47QUFBQSxPQUFSLEVBQ0dNLElBREgsQ0FDUSxlQUFPO0FBQUUxRCxrQkFBVTJELEdBQVY7QUFBZSxPQURoQyxFQUVHRCxJQUZILENBRVEsWUFBTTtBQUFFLFlBQUksQ0FBQyxPQUFLZixjQUFWLEVBQTBCO0FBQUU1QyxtQkFBU0MsT0FBVDtBQUFtQjtBQUFFLE9BRmpFLEVBR0cwRCxJQUhILENBR1EsWUFBTTtBQUFFLFlBQUksT0FBS2pCLFdBQVQsRUFBc0I7QUFBRSxpQkFBTyxPQUFLQSxXQUFMLENBQWlCekMsT0FBakIsQ0FBUDtBQUFrQztBQUFFLE9BSDVFLEVBSUcwRCxJQUpILENBSVE7QUFBQSxlQUFNLE9BQUtFLFNBQUwsQ0FBZTVELE9BQWYsQ0FBTjtBQUFBLE9BSlIsRUFZRzZELEtBWkgsQ0FZUztBQUFBLGVBQVMsT0FBS0MsSUFBTCxDQUFVLG9CQUFWLEVBQWdDLE9BQUsxQixjQUFMLENBQW9CckIsS0FBcEIsQ0FBaEMsQ0FBVDtBQUFBLE9BWlQ7QUFhRDs7O2lDQUVhO0FBS1osV0FBS2dELE1BQUwsQ0FBWUMsTUFBWixHQUFxQm5GLEtBQUtELElBQUwsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQXJCOztBQU9BLFdBQUttRixNQUFMLENBQVlFLE9BQVosR0FBc0JwRixLQUFLRCxJQUFMLENBQVUsSUFBVixFQUFnQixPQUFoQixDQUF0QjtBQUNBLFdBQUttRixNQUFMLENBQVlHLE9BQVosR0FBc0IsS0FBS0MsUUFBTCxDQUFjdkYsSUFBZCxDQUFtQixJQUFuQixDQUF0QjtBQUNBLFdBQUttRixNQUFMLENBQVlLLFNBQVosR0FBd0IsS0FBS0MsVUFBTCxDQUFnQnpGLElBQWhCLENBQXFCLElBQXJCLENBQXhCO0FBQ0Q7Ozs0QkFFUTtBQUFBOztBQUNQLFdBQUswRixhQUFMLEdBQXFCekQsV0FBVyxZQUFNO0FBQ3BDaEMsYUFBSzBGLElBQUwsU0FBZ0IsTUFBaEI7QUFDQSxZQUFJL0QsVUFBVSxPQUFLK0IsV0FBbkI7O0FBRm9DLDRCQUdULE9BQUtpQyxZQUFMLENBQWtCLE1BQWxCLEVBQTBCLEVBQTFCLEVBQThCLElBQTlCLEVBQW9DaEUsT0FBcEMsQ0FIUztBQUFBLFlBRzlCUixPQUg4QixpQkFHOUJBLE9BSDhCO0FBQUEsWUFHckJVLE9BSHFCLGlCQUdyQkEsT0FIcUI7O0FBSXBDLGVBQUsrRCxLQUFMLENBQVd6RSxPQUFYLEVBQW9CMEQsSUFBcEIsQ0FBeUI7QUFBQSxpQkFBTWhELE9BQU47QUFBQSxTQUF6QixFQUNHZ0QsSUFESCxDQUNRO0FBQUEsaUJBQU03RSxLQUFLMEYsSUFBTCxTQUFnQixNQUFoQixDQUFOO0FBQUEsU0FEUixFQUVHYixJQUZILENBRVE7QUFBQSxpQkFBTSxPQUFLZ0IsS0FBTCxFQUFOO0FBQUEsU0FGUixFQUdHYixLQUhILENBR1M7QUFBQSxpQkFBTSxPQUFLYyxLQUFMLENBQVcsSUFBWCxFQUFpQixjQUFqQixFQUFpQyxLQUFqQyxDQUFOO0FBQUEsU0FIVDtBQUlELE9BUm9CLEVBUWxCLEtBQUtyQyxZQVJhLENBQXJCO0FBU0Q7Ozs4QkFFVTtBQUNULGFBQU8sS0FBS3lCLE1BQUwsS0FDSixLQUFLQSxNQUFMLENBQVlhLFVBQVosS0FBMkIsQ0FBM0IsSUFBZ0MsS0FBS2IsTUFBTCxDQUFZYSxVQUFaLEtBQTJCLENBRHZELENBQVA7QUFFRDs7O2lDQUVhO0FBQUEseUJBQ2lELEtBQUsxRCxXQUR0RDtBQUFBLFVBQ05DLE1BRE0sZ0JBQ05BLE1BRE07QUFBQSxVQUNFQyxVQURGLGdCQUNFQSxVQURGO0FBQUEsVUFDY0UsVUFEZCxnQkFDY0EsVUFEZDtBQUFBLFVBQzBCQyxTQUQxQixnQkFDMEJBLFNBRDFCO0FBQUEsVUFDcUNDLE9BRHJDLGdCQUNxQ0EsT0FEckM7O0FBRVosVUFBSSxLQUFLakQsT0FBTCxJQUFnQmlELE9BQWhCLElBQTJCLEtBQUsrQixVQUFwQyxFQUFnRDtBQUFFO0FBQVE7QUFDMUQsVUFBSXNCLE9BQU8sS0FBS3RELFlBQVl1RCxLQUFLQyxNQUFMLEVBQVosR0FBNEIsQ0FBakMsQ0FBWDtBQUNBLFVBQUl2RSxVQUFVc0UsS0FBS0UsR0FBTCxDQUFTSCxPQUFPdkQsVUFBUCxHQUFvQndELEtBQUtHLEdBQUwsQ0FBUzlELE1BQVQsRUFBaUIsS0FBSzVDLE9BQXRCLENBQTdCLEVBQTZENkMsVUFBN0QsQ0FBZDtBQUNBLFdBQUs4RCxrQkFBTCxHQUEwQnJFLFdBQVcsS0FBSzRDLFNBQUwsQ0FBZTdFLElBQWYsQ0FBb0IsSUFBcEIsQ0FBWCxFQUFzQzRCLE9BQXRDLENBQTFCO0FBQ0EsV0FBS2pDLE9BQUw7QUFDRDs7OzRCQUVRO0FBQUE7O0FBQ1B5QyxtQkFBYSxLQUFLa0Usa0JBQWxCOztBQU1BLFdBQUtuQixNQUFMLEdBQWMsSUFBSSxLQUFLbkIsU0FBVCxDQUFtQixLQUFLSSxHQUF4QixFQUE2QixLQUFLUixTQUFsQyxFQUE2QyxLQUFLTSxTQUFsRCxDQUFkO0FBQ0EsVUFBSSxLQUFLRCxHQUFULEVBQWM7QUFBRSxhQUFLa0IsTUFBTCxDQUFZakMsVUFBWixHQUF5QixLQUFLQSxVQUE5QjtBQUEwQztBQUMxRCxXQUFLcUQsY0FBTCxHQUFzQixZQUFNO0FBQzFCLGVBQUtqQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsZUFBSzNFLE9BQUwsR0FBZSxDQUFmO0FBQ0F5QyxxQkFBYSxPQUFLb0UsYUFBbEI7QUFDQSxlQUFLVixLQUFMO0FBQ0QsT0FMRDtBQU1BLFdBQUtXLFdBQUwsR0FBbUIsWUFBTTtBQUN2QixlQUFLWixLQUFMLENBQVcsT0FBSzlDLElBQWhCLEVBQXNCLEVBQUMyRCxRQUFRLElBQVQsRUFBdEI7QUFDQSxlQUFLRixhQUFMLEdBQXFCdkUsV0FDbkIsT0FBSzhELEtBQUwsQ0FBVy9GLElBQVgsU0FBc0IsSUFBdEIsRUFBNEIsY0FBNUIsRUFBNEMsS0FBNUMsQ0FEbUIsRUFFbkIsT0FBSzhDLFVBRmMsQ0FBckI7QUFHQSxlQUFLNkQsSUFBTCxDQUFVLFNBQVYsRUFBcUIsT0FBS0osY0FBMUI7QUFDRCxPQU5EO0FBT0EsV0FBS0ksSUFBTCxDQUFVLE1BQVYsRUFBa0IsS0FBS0YsV0FBdkI7QUFDQSxXQUFLRyxVQUFMO0FBQ0EsVUFBSSxLQUFLakgsT0FBTCxHQUFlLENBQW5CLEVBQXNCO0FBTXBCTSxhQUFLMEYsSUFBTCxDQUFVLElBQVYsRUFBZ0IsT0FBaEIsRUFBeUIsS0FBS2hHLE9BQTlCO0FBQ0Q7QUFDRjs7OzZCQUVTa0gsRSxFQUFJO0FBQ1osV0FBS3ZDLFNBQUwsR0FBaUIsS0FBakI7QUFDQWxDLG1CQUFhLEtBQUtzRCxhQUFsQjtBQUNBdEQsbUJBQWEsS0FBS29FLGFBQWxCO0FBQ0FwRSxtQkFBYSxLQUFLa0Usa0JBQWxCO0FBQ0EsV0FBS1EsR0FBTCxDQUFTLFNBQVQsRUFBb0IsS0FBS1AsY0FBekI7QUFDQSxXQUFLTyxHQUFMLENBQVMsTUFBVCxFQUFpQixLQUFLTCxXQUF0QjtBQUNBLFVBQUlJLEdBQUdFLElBQUgsS0FBWSxJQUFaLElBQW9CLENBQUMsS0FBSzNDLEdBQTlCLEVBQW1DO0FBQUUsYUFBS08sVUFBTCxHQUFrQixJQUFsQjtBQUF3QjtBQUM3RCxXQUFLLElBQUloRSxFQUFULElBQWUsS0FBSytELFdBQXBCLEVBQWlDO0FBRS9CLFlBQUksS0FBS0EsV0FBTCxDQUFpQmxFLGNBQWpCLENBQWdDRyxFQUFoQyxDQUFKLEVBQXlDO0FBQ3ZDLGNBQUlxRyxNQUFNLEtBQUt0QyxXQUFMLENBQWlCL0QsRUFBakIsQ0FBVjtBQUNBcUcsY0FBSTlFLFNBQUosQ0FBYyxJQUFJeEIsZUFBSixDQUFvQkMsRUFBcEIsQ0FBZDtBQUNEO0FBQ0Y7QUFDRCxXQUFLK0QsV0FBTCxHQUFtQixFQUFuQjtBQUNBLFVBQUksQ0FBQyxLQUFLQyxVQUFOLElBQW9CLEtBQUszQixhQUE3QixFQUE0QztBQUFFLGFBQUtpRSxVQUFMO0FBQW1COztBQU1qRWhILFdBQUswRixJQUFMLENBQVUsSUFBVixFQUFnQixPQUFoQixFQUF5QmtCLEVBQXpCO0FBQ0Q7OztpQ0FFYXpHLEksRUFBTWtCLEksRUFBTTRGLFEsRUFBd0M7QUFBQTs7QUFBQSxVQUE5QnBFLFVBQThCLHVFQUFqQixLQUFLQSxVQUFZOztBQUNoRSxVQUFJaEIsZ0JBQUo7QUFBQSxVQUFhVixnQkFBYjtBQUNBQSxnQkFBVSxFQUFDaEIsVUFBRCxFQUFPa0IsVUFBUCxFQUFWO0FBQ0EsVUFBSTRGLFFBQUosRUFBYztBQUFBO0FBQ1osY0FBSXZHLEtBQUssT0FBSzRELE9BQUwsRUFBVDtBQUNBLGNBQUl5QyxNQUFNLElBQUlyRixHQUFKLENBQVFoQixFQUFSLEVBQVltQyxVQUFaLEVBQXdCO0FBQUEsbUJBQU0sT0FBTyxPQUFLNEIsV0FBTCxDQUFpQi9ELEVBQWpCLENBQWI7QUFBQSxXQUF4QixDQUFWO0FBQ0EsaUJBQUsrRCxXQUFMLENBQWlCL0QsRUFBakIsSUFBdUJxRyxHQUF2QjtBQUNBbEYsb0JBQVVrRixJQUFJbEYsT0FBZDtBQUNBVixrQkFBUVQsRUFBUixHQUFhQSxFQUFiO0FBTFk7QUFNYjtBQUNELGFBQU8sRUFBRVMsZ0JBQUYsRUFBV1UsZ0JBQVgsRUFBUDtBQUNEOzs7OEJBUVVWLE8sRUFBUztBQUFBOztBQUNsQixVQUFJQSxRQUFRaEIsSUFBWixFQUFrQjtBQUNoQixZQUFJRCxtQkFBbUJpQixRQUFRaEIsSUFBM0IsQ0FBSixFQUFzQztBQUFFO0FBQVE7QUFDaEQsWUFBSWdCLFFBQVFoQixJQUFSLEtBQWlCLFNBQWpCLElBQThCLEtBQUtrRSxTQUF2QyxFQUFrRDtBQUFFO0FBQVE7QUFDNUQsWUFBSWxELFFBQVFULEVBQVosRUFBZ0I7QUFBQTtBQUNkLGdCQUFJQSxLQUFLUyxRQUFRVCxFQUFqQjtBQUNBLGdCQUFJd0csS0FBSzdHLFdBQVcsT0FBS21FLFFBQWhCLEVBQTBCckQsUUFBUWhCLElBQWxDLENBQVQ7QUFDQSxnQkFBSStHLEVBQUosRUFBUTtBQUNOeEgsc0JBQVE7QUFBQSx1QkFBTXdILEdBQUdDLEtBQUgsQ0FBUyxJQUFULEVBQWVoRyxRQUFRRSxJQUF2QixDQUFOO0FBQUEsZUFBUixFQUNHd0QsSUFESCxDQUNRO0FBQUEsb0JBQUN6QyxNQUFELHVFQUFVLElBQVY7QUFBQSx1QkFBbUIsT0FBS3dELEtBQUwsQ0FBVyxFQUFDbEYsTUFBRCxFQUFLMEIsY0FBTCxFQUFYLENBQW5CO0FBQUEsZUFEUixFQUVHNEMsS0FGSCxDQUVTO0FBQUEsdUJBQVMsT0FBS1ksS0FBTCxDQUFXLEVBQUNsRixNQUFELEVBQUt3QixPQUFPLE9BQUtxQixjQUFMLENBQW9CckIsS0FBcEIsQ0FBWixFQUFYLENBQVQ7QUFBQSxlQUZUO0FBR0QsYUFKRCxNQUlPO0FBQ0wsa0JBQUlBLFFBQVEsT0FBS3FCLGNBQUwsQ0FBb0IsSUFBSXhDLGdCQUFKLENBQXFCSSxRQUFRaEIsSUFBN0IsQ0FBcEIsQ0FBWjtBQUNBLHFCQUFLeUYsS0FBTCxDQUFXLEVBQUNsRixNQUFELEVBQUt3QixZQUFMLEVBQVg7QUFDRDtBQVZhO0FBV2YsU0FYRCxNQVdPO0FBQ0xsQyxlQUFLbUgsS0FBTCxDQUFXLElBQVgsRUFBaUJySCxPQUFPcUIsUUFBUWhCLElBQWYsRUFBcUJnQixRQUFRRSxJQUE3QixDQUFqQjtBQUNEO0FBQ0YsT0FqQkQsTUFpQk87QUFDTCxZQUFJMEYsTUFBTSxLQUFLdEMsV0FBTCxDQUFpQnRELFFBQVFULEVBQXpCLENBQVY7QUFDQSxZQUFJcUcsR0FBSixFQUFTO0FBQUVBLGNBQUlLLE1BQUosQ0FBV2pHLE9BQVg7QUFBcUI7QUFDakM7QUFDRjs7OzBCQUVNQSxPLEVBQXVEO0FBQUE7O0FBQUEscUZBQUosRUFBSTtBQUFBLGtDQUE1Q2tHLFdBQTRDO0FBQUEsVUFBNUNBLFdBQTRDLG9DQUE5QixLQUE4QjtBQUFBLDZCQUF2QlosTUFBdUI7QUFBQSxVQUF2QkEsTUFBdUIsK0JBQWQsS0FBYzs7QUFDNUQsYUFBTy9HLFFBQVE7QUFBQSxlQUFNLE9BQUttRSxRQUFMLEdBQWdCLE9BQUtBLFFBQUwsQ0FBYzFDLE9BQWQsRUFBdUJrRyxXQUF2QixDQUFoQixHQUFzRCxJQUE1RDtBQUFBLE9BQVIsRUFDSnhDLElBREksQ0FDQztBQUFBLGVBQU13QyxjQUFjbEcsT0FBZCxHQUF3QixPQUFLa0MsT0FBTCxDQUFhbEMsT0FBYixDQUE5QjtBQUFBLE9BREQsRUFFSjBELElBRkksQ0FFQyxnQkFBUTtBQUNaLFlBQUksQ0FBQyxPQUFLUixTQUFOLElBQW1CLENBQUNvQyxNQUF4QixFQUFnQztBQUM5QixjQUFJL0YsS0FBSzJHLGNBQWM3RyxTQUFkLEdBQTBCVyxRQUFRVCxFQUEzQztBQUNBLGdCQUFNLElBQUlELGVBQUosQ0FBb0JDLEVBQXBCLENBQU47QUFDRDtBQUNELFlBQUksT0FBS3NELEdBQVQsRUFBYztBQUNaLGlCQUFPLE9BQUtrQixNQUFMLENBQVlELElBQVosQ0FBaUJWLElBQWpCLENBQVA7QUFDRCxTQUZELE1BRU87QUFBQTtBQUNMLGdCQUFJK0MsU0FBUyxPQUFPL0MsSUFBUCxLQUFnQixRQUE3QjtBQUNBO0FBQUEsaUJBQU81RSxhQUFhO0FBQUEsdUJBQU0sT0FBS3VGLE1BQUwsQ0FBWUQsSUFBWixDQUFpQlYsSUFBakIsRUFBdUIsRUFBQytDLGNBQUQsRUFBdkIsRUFBaUMxRixFQUFqQyxDQUFOO0FBQUEsZUFBYjtBQUFQO0FBRks7O0FBQUE7QUFHTjtBQUNGLE9BYkksQ0FBUDtBQWNEOzs7eUJBV0syRixLLEVBQWdCO0FBQUEsd0NBQU5sRyxJQUFNO0FBQU5BLFlBQU07QUFBQTs7QUFBQSwwQkFDRixLQUFLc0UsWUFBTCxDQUFrQjRCLEtBQWxCLEVBQXlCbEcsSUFBekIsRUFBK0IsS0FBL0IsQ0FERTtBQUFBLFVBQ2RGLE9BRGMsaUJBQ2RBLE9BRGM7O0FBRXBCLGFBQU8sS0FBS3lFLEtBQUwsQ0FBV3pFLE9BQVgsQ0FBUDtBQUNEOzs7Z0NBU1lvRCxJLEVBQU07QUFDakIsYUFBTyxLQUFLcUIsS0FBTCxDQUFXckIsSUFBWCxFQUFpQixFQUFDOEMsYUFBYSxJQUFkLEVBQWpCLENBQVA7QUFDRDs7O2tDQVVjRSxLLEVBQWdCO0FBQUE7O0FBQUEseUNBQU5sRyxJQUFNO0FBQU5BLFlBQU07QUFBQTs7QUFBQSwwQkFDWCxLQUFLc0UsWUFBTCxDQUFrQjRCLEtBQWxCLEVBQXlCbEcsSUFBekIsRUFBK0IsS0FBL0IsQ0FEVztBQUFBLFVBQ3ZCRixPQUR1QixpQkFDdkJBLE9BRHVCOztBQUU3QixhQUFPekIsUUFBUTtBQUFBLGVBQU0sT0FBSzJELE9BQUwsQ0FBYWxDLE9BQWIsQ0FBTjtBQUFBLE9BQVIsQ0FBUDtBQUNEOzs7MkJBWU9oQixJLEVBQWU7QUFBQSx5Q0FBTmtCLElBQU07QUFBTkEsWUFBTTtBQUFBOztBQUFBLDBCQUNNLEtBQUtzRSxZQUFMLENBQWtCeEYsSUFBbEIsRUFBd0JrQixJQUF4QixFQUE4QixJQUE5QixDQUROO0FBQUEsVUFDZkYsT0FEZSxpQkFDZkEsT0FEZTtBQUFBLFVBQ05VLE9BRE0saUJBQ05BLE9BRE07O0FBRXJCLGFBQU8sS0FBSytELEtBQUwsQ0FBV3pFLE9BQVgsRUFBb0IwRCxJQUFwQixDQUF5QjtBQUFBLGVBQU1oRCxPQUFOO0FBQUEsT0FBekIsQ0FBUDtBQUNEOzs7NkJBU1MxQixJLEVBQU1xSCxPLEVBQVM7QUFDdkIsVUFBSW5ILFdBQVcsS0FBS21FLFFBQWhCLEVBQTBCckUsSUFBMUIsQ0FBSixFQUFxQztBQUNuQyxjQUFNLElBQUlVLEtBQUosa0RBQXdEVixJQUF4RCxDQUFOO0FBQ0Q7QUFDRCxXQUFLcUUsUUFBTCxDQUFjckUsSUFBZCxJQUFzQnFILE9BQXRCO0FBQ0Q7OztnQ0FLWTtBQUNYLFdBQUs5QyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsVUFBSSxLQUFLK0MsT0FBTCxFQUFKLEVBQW9CO0FBQ2xCO0FBQ0QsT0FGRCxNQUVPLElBQUksS0FBSzFELFNBQUwsSUFBa0IsS0FBS0ksR0FBM0IsRUFBZ0M7QUFDckMsYUFBS3VELEtBQUw7QUFDRCxPQUZNLE1BRUE7QUFDTCxjQUFNLElBQUk3RyxLQUFKLENBQVUsaUNBQVYsQ0FBTjtBQUNEO0FBQ0Y7Ozs0QkFRMEM7QUFBQSxVQUFwQ2lHLElBQW9DLHVFQUE3QixJQUE2QjtBQUFBLFVBQXZCYSxHQUF1QjtBQUFBLFVBQWxCQyxTQUFrQix1RUFBTixJQUFNOztBQUN6QyxVQUFJLENBQUMsS0FBS2xELFVBQVYsRUFBc0I7QUFDcEIsYUFBS0EsVUFBTCxHQUFrQmtELFNBQWxCO0FBQ0EsWUFBSSxLQUFLSCxPQUFMLEVBQUosRUFBb0I7QUFBRSxlQUFLdkMsTUFBTCxDQUFZWSxLQUFaLENBQWtCZ0IsSUFBbEIsRUFBd0JhLEdBQXhCO0FBQThCO0FBQ3JEO0FBQ0Y7Ozs7RUE3VGtCcEksWTs7QUFxVXJCMkUsT0FBT2pFLFNBQVAsQ0FBaUJELElBQWpCLEdBQXdCa0UsT0FBT2pFLFNBQVAsQ0FBaUJnRixJQUF6Qzs7QUFPQWYsT0FBT2pFLFNBQVAsQ0FBaUI0SCxXQUFqQixHQUErQjNELE9BQU9qRSxTQUFQLENBQWlCNkgsV0FBaEQ7O0FBRUE1RCxPQUFPekQsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXlELE9BQU9uRCxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0FtRCxPQUFPcEQsWUFBUCxHQUFzQkEsWUFBdEI7O0FBRUFpSCxPQUFPQyxPQUFQLEdBQWlCOUQsTUFBakIiLCJmaWxlIjoiQ2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG4vKiBnbG9iYWwgV2ViU29ja2V0ICovXG5cbi8vIFNoYXJlZCBjb2RlIGZvciBub2RlIGFuZCBjbGllbnRzL2Jyb3dzZXJzXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKVxuY29uc3QgeyBhc3NpZ24sIGF0dGVtcHQsIGZyb21DYWxsYmFjaywgUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGJsYWNrbGlzdCA9IFsgJ2Nsb3NlJywgJ29wZW4nLCAnZXJyb3InLCAncG9uZycsICdyZXRyeScgXVxuXG4vLyB1dGlsc1xuXG5jb25zdCBjb25jYXQgPSBbXS5jb25jYXQuYmluZChbXSlcblxuY29uc3QgZW1pdCA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdFxuXG5mdW5jdGlvbiBpc0JsYWNrbGlzdGVkRXZlbnQgKG5hbWUpIHtcbiAgcmV0dXJuIGJsYWNrbGlzdC5pbmRleE9mKG5hbWUpID49IDBcbn1cblxuZnVuY3Rpb24gZ2V0T3duUHJvcCAob2JqLCBuYW1lKSB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkobmFtZSkgPyBvYmpbbmFtZV0gOiB1bmRlZmluZWRcbn1cblxuLy8gZXJyb3JzXG5cbi8qKlxuICoge0BsaW5rIENsaWVudCNzZW5kfS97QGxpbmsgQ2xpZW50I2ludm9rZX0gaXMgcmVqZWN0ZWQgd2l0aCB0aGlzXG4gKiBlcnJvciB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJlZm9yZSBhIG1lc3NhZ2UgaXMgc2VuZCBvciByZXBseVxuICogcmVjZWl2ZWQgKGZvciBgaW52b2tlYCBvbmx5KS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBFcnJvclxuICogQG1lbWJlcm9mIENsaWVudFxuICogQHBhcmFtIHtudW1iZXJ9IFtpZF0gTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gQ29ubmVjdGlvbkVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnQ29ubmVjdGlvbkVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuQ29ubmVjdGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3Igd2hlbiBubyByZXBseSBpc1xuICogcmVjZWl2ZWQgYmVmb3JlIHtAbGluayBDbGllbnQuU29ja2V0T3B0aW9uc30gYGFja1RpbWVvdXRgLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEVycm9yXG4gKiBAbWVtYmVyb2YgQ2xpZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaWQgTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gVGltZW91dEVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3IgYnkgdGhlIG90aGVyIHNpZGVcbiAqIHdoZW4gbm8gaGFuZGxlciBpcyBmb3VuZCBmb3IgYSBwcm9jZWR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgRXJyb3JcbiAqIEBtZW1iZXJvZiBDbGllbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9jZWR1cmUgTmFtZS5cbiAqL1xuZnVuY3Rpb24gTm9Qcm9jZWR1cmVFcnJvciAocHJvY2VkdXJlKSB7XG4gIHRoaXMubmFtZSA9ICdOb1Byb2NlZHVyZUVycm9yJ1xuICB0aGlzLnByb2NlZHVyZSA9IHByb2NlZHVyZVxufVxuXG5Ob1Byb2NlZHVyZUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vLyB2YWxpZGF0aW9uXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQgKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgaWQgPT09ICdudW1iZXInICYmIChpZCAlIDEpID09PSAwICYmIGlkID4gMFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSAobWVzc2FnZSkge1xuICBsZXQgcGFzc2VkID0gZmFsc2VcbiAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7IC8vIG1lc3NhZ2VcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5uYW1lID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmFyZ3MgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICAgIGlmIChucHJvcHMgPT09IDIgfHwgKG5wcm9wcyA9PT0gMyAmJiB2YWxpZGF0ZUlkKG1lc3NhZ2UuaWQpKSkge1xuICAgICAgICAgIHBhc3NlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIGFjayBtZXNzYWdlXG4gICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICBpZiAobnByb3BzID09PSAyICYmIHZhbGlkYXRlSWQobWVzc2FnZS5pZCkpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgfHwgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eSgncmVzdWx0JykpIHtcbiAgICAgICAgICBwYXNzZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFwYXNzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZXJyb3InKVxuICB9XG59XG5cbi8vIGFja1xuXG5jbGFzcyBBY2sge1xuICBjb25zdHJ1Y3RvciAoaWQsIHRpbWVvdXQsIGNiKSB7XG4gICAgdGhpcy5pZCA9IGlkXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgdGhpcy5yZWplY3QgPSByZWplY3RcbiAgICB9KVxuICAgIHRoaXMuY2IgPSBjYlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb3JjZU5hY2sobmV3IFRpbWVvdXRFcnJvcihpZCkpLCB0aW1lb3V0KVxuICB9XG5cbiAgZm9yY2VOYWNrIChlcnJvcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5jYigpXG4gICAgdGhpcy5yZWplY3QoZXJyb3IpXG4gIH1cblxuICBzZXR0bGUgKG1lc3NhZ2UpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMuY2IoKVxuICAgIGlmIChtZXNzYWdlLmhhc093blByb3BlcnR5KCdlcnJvcicpKSB7XG4gICAgICB0aGlzLnJlamVjdChtZXNzYWdlLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpXG4gICAgfVxuICB9XG59XG5cbi8vIGNsaWVudFxuXG4vKipcbiAqIEdlbmVyYWwgZm9ybWF0IGZvciBhbGwgZGF0YSB0aGF0IGlzIHNlbnQgb3IgcmVjZWl2ZWQgb3ZlciBhXG4gKiB3ZWJzb2NrZXQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpZW50Lk1lc3NhZ2VcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2lkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtBcnJheX0gW2FyZ3NdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3Jlc3VsdF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBNZXNzYWdlcyBlbmNvZGVyLiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91c1xuICogZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuRW5jb2RlclxuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZX0gbWVzc2FnZSBNZXNzYWdlLlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fE9iamVjdH0gRGF0YSB0byBzZW5kLlxuICovXG5cbi8qKlxuICogTWVzc2FnZXMgZGVjb2Rlci4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXNcbiAqIGV4ZWN1dGlvbi5cbiAqXG4gKiBAY2FsbGJhY2sgQ2xpZW50LkRlY29kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFJlY2VpdmVkIGRhdGEuXG4gKiBAcmV0dXJuIHtQcm9taXNlPENsaWVudC5NZXNzYWdlPnxDbGllbnQuTWVzc2FnZX0gTWVzc2FnZS5cbiAqL1xuXG4vKipcbiAqIFJlY2VpdmUgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCByZWNlaXZlcyBhIHZhbGlkIG1lc3NhZ2UgdmlhIGFcbiAqIHdlYnNvY2tldC4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXMgZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuUmVjZWl2ZUhvb2tcbiAqIEBwYXJhbSB7Q2xpZW50Lk1lc3NhZ2V9IG1lc3NhZ2UgTWVzc2FnZS5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPnx1bmRlZmluZWR9IFByb21pc2UsIGlmIGl0IGlzIHJlamVjdGVkIG5vXG4gKiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuXG4vKipcbiAqIFNlbmQgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCBzZW5kcyBhbnkgbWVzc2FnZSB2aWEgYVxuICogd2Vic29ja2V0LiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24uXG4gKlxuICogQGNhbGxiYWNrIENsaWVudC5TZW5kSG9va1xuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZXxPYmplY3R9IG1lc3NhZ2UgTWVzc2FnZSBvciBvYmplY3QgaWZcbiAqIGBpc0VuY29kZWRgIGlzIGB0cnVlYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmNvZGVkIElmIGEgbWVzc2FnZSBoYXMgYmVlbiBhbHJlYWR5IGVuY29kZWRcbiAqIHZpYSB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9IG9yIHtAbGluayBTZXJ2ZXIjZW5jb2RlTWVzc2FnZX0uXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD58dW5kZWZpbmVkfSBQcm9taXNlLCBpZiBpdCBpcyByZWplY3RlZCBub1xuICogaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGllbnQuUmV0cnlDb25maWdcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2ZhY3Rvcj0yXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhUaW1lb3V0PUluZmluaXR5XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttaW5UaW1lb3V0PTEwMDBdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYW5kb21pemU9dHJ1ZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmV0cmllcz0xMF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWVudC5Tb2NrZXRPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthY2tUaW1lb3V0PTIwMDAwXSBSZXN1bHQgd2FpdCB0aW1lb3V0IGZvclxuICoge0BsaW5rIENsaWVudCNpbnZva2V9IGluIG1zLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFthdXRoPXt9XSBBdXRoIGRhdGEuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVjb25uZWN0PXRydWVdIEVuYWJsZSBhdXRvIHJlY29ubmVjdC5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LlJldHJ5Q29uZmlnfSBbYXV0b1JlY29ubmVjdE9wdGlvbnNdIEF1dG9cbiAqIHJlY29ubmVjdCBjb25maWcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JpbmFyeVR5cGU9J2FycmF5YnVmZmVyJ10gVzNDIFdlYlNvY2tldFxuICogYmluYXJ5IGRhdGEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LkRlY29kZXJ9IFtkZWNvZGVyPUpTT04ucGFyc2VdIE1lc3NhZ2VzIGRlY29kZXIuXG4gKiBAcHJvcGVydHkge0NsaWVudC5FbmNvZGVyfSBbZW5jb2Rlcj1KU09OLnN0cmluZ2lmeV0gTWVzc2FnZXNcbiAqIGVuY29kZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZXJyb3JGb3JtYXR0ZXI9U3RyaW5nXSBDb252ZXJ0ZXIgZm9yIEpTXG4gKiBlcnJvcnMgdG8gc29tZSBuZXR3b3JrIGZvcm1hdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGluZ0ludGVydmFsPTIwMDAwXSBQaW5nIGludGVydmFsIGluIG1zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5nVGltZW91dD0yMDAwMF0gUGluZyB0aW1lb3V0IGluIG1zLlxuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gW3Byb3RvY29scz0nd3MtbWVzc2FnaW5nJ11cbiAqIFdlYlNvY2tldCBwcm90b2NvbHMuXG4gKiBAcHJvcGVydHkge0NsaWVudC5SZWNlaXZlSG9va30gW3JlY2VpdmVIb29rXSBSZWNlaXZlIGhvb2suXG4gKiBAcHJvcGVydHkge0NsaWVudC5TZW5kSG9va30gW1NlbmRIb29rXSBTZW5kIGhvb2suXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVmFsaWRhdGlvbj1mYWxzZV0gU2tpcHMgYnVpbGQtaW5cbiAqIG1lc3NhZ2VzIHZhbGlkYXRpb24uXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1dlYlNvY2tldD11bmRlZmluZWRdIEFsdGVybmF0aXZlIHdlYnNvY2tldFxuICogY29uc3RydWN0b3IsIGlmIGl0IGlzIHVuZGVmaW5lZCB0aGVuIGEgZ2xvYmFsIFdlYlNvY2tldCBpcyB1c2VkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdzNjPXVuZGVmaW5lZF0gSWYgV2ViU29ja2V0IGlzIHVzaW5nIGEgdzNjXG4gKiBzZW5kIEFQSSwgb3IgYSB3cyBvbmUgKGZyb20gTm9kZS5qcyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2l0aCBhXG4gKiBjYWxsYmFjaykuIEJ5IGRlZmF1bHQgaWYgYSBnbG9iYWwgdmFsdWUgaXMgdXNlZCwgdGhlbiBpdCBpcyBgdHJ1ZWBcbiAqIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbd3NPcHRpb25zXSBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyB0byB3c1xuICogc29ja2V0IGNvbnN0cnVjdG9yLlxuICovXG5cbmNvbnN0IHJldHJ5Q29uZmlnID0ge1xuICBmYWN0b3I6IDIsXG4gIG1heFRpbWVvdXQ6IEluZmluaXR5LFxuICBtaW5UaW1lb3V0OiAxMDAwLFxuICByYW5kb21pemU6IHRydWUsXG4gIHJldHJpZXM6IDEwXG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBhY2tUaW1lb3V0OiAyMDAwMCxcbiAgYXV0aDoge30sXG4gIGF1dG9SZWNvbm5lY3Q6IHRydWUsXG4gIGF1dG9SZWNvbm5lY3RPcHRpb25zOiByZXRyeUNvbmZpZyxcbiAgYmluYXJ5VHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgZGVjb2RlcjogSlNPTi5wYXJzZSxcbiAgZW5jb2RlcjogSlNPTi5zdHJpbmdpZnksXG4gIGVycm9yRm9ybWF0dGVyOiBTdHJpbmcsXG4gIHBpbmdJbnRlcnZhbDogMjAwMDAsXG4gIHBpbmdUaW1lb3V0OiAyMDAwMCxcbiAgcHJvdG9jb2xzOiAnd3MtbWVzc2FnaW5nJyxcbiAgcmVjZWl2ZUhvb2s6IG51bGwsXG4gIHNlbmRIb29rOiBudWxsLFxuICBza2lwVmFsaWRhdGlvbjogZmFsc2UsXG4gIFdlYlNvY2tldDogdW5kZWZpbmVkLFxuICB3M2M6IHVuZGVmaW5lZCxcbiAgd3NPcHRpb25zOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqXG4gKiBAZW1pdHMgQ2xpZW50I2Nsb3NlXG4gKiBAZW1pdHMgQ2xpZW50I29wZW5cbiAqIEBlbWl0cyBDbGllbnQjZXJyb3JcbiAqIEBlbWl0cyBDbGllbnQjY29ubmVjdFxuICovXG5jbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsaWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBXZWJTb2NrZXQgY29ubmVjdGlvbiB1cmwuXG4gICAqIEBwYXJhbSB7Q2xpZW50LlNvY2tldE9wdGlvbnN9IFtvcHRpb25zXSBTb2NrZXQgb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnVybCA9IHVybFxuICAgIC8qKlxuICAgICAqIENsaWVudCBpZC4gU2VydmVyLXNpZGUgb25seS5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGlkXG4gICAgICogQG1lbWJlcm9mIENsaWVudFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGFzc2lnbih0aGlzLCBkZWZhdWx0cywgb3B0aW9ucylcbiAgICB0aGlzLnJldHJ5Q29uZmlnID0ge31cbiAgICBhc3NpZ24odGhpcy5yZXRyeUNvbmZpZywgcmV0cnlDb25maWcsIG9wdGlvbnMuYXV0b1JlY29ubmVjdE9wdGlvbnMpXG4gICAgaWYgKCF0aGlzLldlYlNvY2tldCkge1xuICAgICAgdGhpcy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbiAgICAgIHRoaXMudzNjID0gdGhpcy53M2MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLnczY1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGVuIGEgY2xpZW50IGlzIGNvbm5lY3RlZC5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICB0aGlzLmNvdW50ZXIgPSAxXG4gICAgdGhpcy5kYXRhID0ge31cbiAgICB0aGlzLmhhbmRsZXJzID0ge31cbiAgICB0aGlzLnBlbmRpbmdBY2tzID0ge31cbiAgICB0aGlzLmF0dGVtcHQgPSAwXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlbiBhIGNsaWVudCB3YXMgY2xvc2VkIHZpYSBhIGNsb3NlIG1ldGhvZCBvciBhbiBhdXRoXG4gICAgICogZXJyb3Igb2NjdXJyZWQuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmVnaXN0ZXIoJ3BpbmcnLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSlcbiAgICB0aGlzLnJlY29ubmVjdCgpXG4gIH1cblxuICBfb25NZXNzYWdlIChkYXRhKSB7XG4gICAgbGV0IG1lc3NhZ2VcbiAgICBhdHRlbXB0KCgpID0+IHRoaXMuZGVjb2RlcihkYXRhLmRhdGEpKVxuICAgICAgLnRoZW4obXNnID0+IHsgbWVzc2FnZSA9IG1zZyB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHsgdmFsaWRhdGUobWVzc2FnZSkgfSB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAodGhpcy5yZWNlaXZlSG9vaykgeyByZXR1cm4gdGhpcy5yZWNlaXZlSG9vayhtZXNzYWdlKSB9IH0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLl9kaXNwYXRjaChtZXNzYWdlKSlcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG90aGVyIHNpZGUgZmFpbGVkIHRvIGRlY29kZSBvciB2YWxpZGF0ZSBhXG4gICAgICogd2Vic29ja2V0IG1lc3NhZ2UsIG5hbWVseSBhbiBlcnJvciBpcyBvY2N1cnJlZCBpbnNpZGUgZWl0aGVyXG4gICAgICogYGRlY29kZXJgIG9yIGByZWNlaXZlSG9va2AuXG4gICAgICogQGV2ZW50IENsaWVudCNwcmVwcm9jZXNzaW5nRXJyb3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXJyb3IgQ29udmVydGVkIGVycm9yLlxuICAgICAqL1xuICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuc2VuZCgncHJlcHJvY2Vzc2luZ0Vycm9yJywgdGhpcy5lcnJvckZvcm1hdHRlcihlcnJvcikpKVxuICB9XG5cbiAgX3NldEV2ZW50cyAoKSB7XG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9ub3BlbiBXZWJTb2NrZXQgZXZlbnRzLlxuICAgICAqIEBldmVudCBDbGllbnQjb3BlblxuICAgICAqL1xuICAgIHRoaXMuc29ja2V0Lm9ub3BlbiA9IGVtaXQuYmluZCh0aGlzLCAnb3BlbicpXG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9uZXJyb3IgV2ViU29ja2V0IGV2ZW50cy4gRG9lcyBub3QgdGhyb3cgaWYgdGhlcmUgYXJlXG4gICAgICogbm8gbGlzdGVuZXJzLlxuICAgICAqIEBldmVudCBDbGllbnQjZXJyb3JcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpXG4gICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IHRoaXMuX29uQ2xvc2UuYmluZCh0aGlzKVxuICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpXG4gIH1cblxuICBfcGluZyAoKSB7XG4gICAgdGhpcy5waW5nVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBlbWl0LmNhbGwodGhpcywgJ3BpbmcnKVxuICAgICAgbGV0IHRpbWVvdXQgPSB0aGlzLnBpbmdUaW1lb3V0XG4gICAgICBsZXQgeyBtZXNzYWdlLCBwcm9taXNlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZSgncGluZycsIFtdLCB0cnVlLCB0aW1lb3V0KVxuICAgICAgdGhpcy5fc2VuZChtZXNzYWdlKS50aGVuKCgpID0+IHByb21pc2UpXG4gICAgICAgIC50aGVuKCgpID0+IGVtaXQuY2FsbCh0aGlzLCAncG9uZycpKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9waW5nKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLmNsb3NlKDQwMDgsICdQaW5nIHRpbWVvdXQnLCBmYWxzZSkpXG4gICAgfSwgdGhpcy5waW5nSW50ZXJ2YWwpXG4gIH1cblxuICBfaXNPcGVuICgpIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQgJiZcbiAgICAgICh0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSAwIHx8IHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgPT09IDEpXG4gIH1cblxuICBfcmVjb25uZWN0ICgpIHtcbiAgICBsZXQgeyBmYWN0b3IsIG1heFRpbWVvdXQsIG1pblRpbWVvdXQsIHJhbmRvbWl6ZSwgcmV0cmllcyB9ID0gdGhpcy5yZXRyeUNvbmZpZ1xuICAgIGlmICh0aGlzLmF0dGVtcHQgPj0gcmV0cmllcyB8fCB0aGlzLnRlcm1pbmF0ZWQpIHsgcmV0dXJuIH1cbiAgICBsZXQgcmFuZCA9IDEgKyAocmFuZG9taXplID8gTWF0aC5yYW5kb20oKSA6IDApXG4gICAgbGV0IHRpbWVvdXQgPSBNYXRoLm1pbihyYW5kICogbWluVGltZW91dCAqIE1hdGgucG93KGZhY3RvciwgdGhpcy5hdHRlbXB0KSwgbWF4VGltZW91dClcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5yZWNvbm5lY3QuYmluZCh0aGlzKSwgdGltZW91dClcbiAgICB0aGlzLmF0dGVtcHQrK1xuICB9XG5cbiAgX29wZW4gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXRJZClcbiAgICAvKipcbiAgICAgKiBVbmRlcmx5aW5nIHdlYnNvY2tldC5cbiAgICAgKiBAbWVtYmVyIHtXZWJTb2NrZXR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgdGhpcy5XZWJTb2NrZXQodGhpcy51cmwsIHRoaXMucHJvdG9jb2xzLCB0aGlzLndzT3B0aW9ucylcbiAgICBpZiAodGhpcy53M2MpIHsgdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSA9IHRoaXMuYmluYXJ5VHlwZSB9XG4gICAgdGhpcy5jb25uZWN0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hdHRlbXB0ID0gMFxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYXV0aFRpbWVvdXRJZClcbiAgICAgIHRoaXMuX3BpbmcoKVxuICAgIH1cbiAgICB0aGlzLm9wZW5IYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2VuZCh0aGlzLmF1dGgsIHtpc0F1dGg6IHRydWV9KVxuICAgICAgdGhpcy5hdXRoVGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgdGhpcy5jbG9zZS5iaW5kKHRoaXMsIDQwMDgsICdBdXRoIHRpbWVvdXQnLCBmYWxzZSksXG4gICAgICAgIHRoaXMuYWNrVGltZW91dClcbiAgICAgIHRoaXMub25jZSgnY29ubmVjdCcsIHRoaXMuY29ubmVjdEhhbmRsZXIpXG4gICAgfVxuICAgIHRoaXMub25jZSgnb3BlbicsIHRoaXMub3BlbkhhbmRsZXIpXG4gICAgdGhpcy5fc2V0RXZlbnRzKClcbiAgICBpZiAodGhpcy5hdHRlbXB0ID4gMCkge1xuICAgICAgLyoqXG4gICAgICAgKiBFbWl0cyByZXRyeSBldmVudHMgd2hlbiBhdXRvIHJlY29ubmVjdGluZy5cbiAgICAgICAqIEBldmVudCBDbGllbnQjcmV0cnlcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdHRlbXB0IEF0dGVtcHQgbnVtYmVyIHN0YXJ0aW5nIGZyb20gYDFgLlxuICAgICAgICovXG4gICAgICBlbWl0LmNhbGwodGhpcywgJ3JldHJ5JywgdGhpcy5hdHRlbXB0KVxuICAgIH1cbiAgfVxuXG4gIF9vbkNsb3NlIChldikge1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICBjbGVhclRpbWVvdXQodGhpcy5waW5nVGltZW91dElkKVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dGhUaW1lb3V0SWQpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZW91dElkKVxuICAgIHRoaXMub2ZmKCdjb25uZWN0JywgdGhpcy5jb25uZWN0SGFuZGxlcilcbiAgICB0aGlzLm9mZignb3BlbicsIHRoaXMub3BlbkhhbmRsZXIpXG4gICAgaWYgKGV2LmNvZGUgPT09IDQwMDMgfHwgIXRoaXMudXJsKSB7IHRoaXMudGVybWluYXRlZCA9IHRydWUgfVxuICAgIGZvciAobGV0IGlkIGluIHRoaXMucGVuZGluZ0Fja3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQWNrcy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgbGV0IGFjayA9IHRoaXMucGVuZGluZ0Fja3NbaWRdXG4gICAgICAgIGFjay5mb3JjZU5hY2sobmV3IENvbm5lY3Rpb25FcnJvcihpZCkpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0Fja3MgPSB7fVxuICAgIGlmICghdGhpcy50ZXJtaW5hdGVkICYmIHRoaXMuYXV0b1JlY29ubmVjdCkgeyB0aGlzLl9yZWNvbm5lY3QoKSB9XG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9uY2xvc2UgV2ViU29ja2V0IGV2ZW50cy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I2Nsb3NlXG4gICAgICogQHBhcmFtIHtDbG9zZUV2ZW50fSBkYXRhIENsb3NlIGV2ZW50IGRhdGEuXG4gICAgICovXG4gICAgZW1pdC5jYWxsKHRoaXMsICdjbG9zZScsIGV2KVxuICB9XG5cbiAgX21ha2VNZXNzYWdlIChuYW1lLCBhcmdzLCBuZWVkc0FjaywgYWNrVGltZW91dCA9IHRoaXMuYWNrVGltZW91dCkge1xuICAgIGxldCBwcm9taXNlLCBtZXNzYWdlXG4gICAgbWVzc2FnZSA9IHtuYW1lLCBhcmdzfVxuICAgIGlmIChuZWVkc0Fjaykge1xuICAgICAgbGV0IGlkID0gdGhpcy5jb3VudGVyKytcbiAgICAgIGxldCBhY2sgPSBuZXcgQWNrKGlkLCBhY2tUaW1lb3V0LCAoKSA9PiBkZWxldGUgdGhpcy5wZW5kaW5nQWNrc1tpZF0pXG4gICAgICB0aGlzLnBlbmRpbmdBY2tzW2lkXSA9IGFja1xuICAgICAgcHJvbWlzZSA9IGFjay5wcm9taXNlXG4gICAgICBtZXNzYWdlLmlkID0gaWRcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSwgcHJvbWlzZSB9XG4gIH1cblxuICAvKipcbiAgICogU29ja2V0IGNvbm5lY3Rpb24gaXMgb3BlbiBhbmQgY2xpZW50IGhhcyBwYXNzZWQgYW4gYXV0aFxuICAgKiBjaGVjay4gQ2xpZW50LXNpZGUgb25seS5cbiAgICogQGV2ZW50IENsaWVudCNjb25uZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gZGF0YSBBdXRoIHJlcGx5IGRhdGEuXG4gICAqL1xuICBfZGlzcGF0Y2ggKG1lc3NhZ2UpIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7XG4gICAgICBpZiAoaXNCbGFja2xpc3RlZEV2ZW50KG1lc3NhZ2UubmFtZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChtZXNzYWdlLm5hbWUgPT09ICdjb25uZWN0JyAmJiB0aGlzLmNvbm5lY3RlZCkgeyByZXR1cm4gfVxuICAgICAgaWYgKG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgbGV0IGlkID0gbWVzc2FnZS5pZFxuICAgICAgICBsZXQgZm4gPSBnZXRPd25Qcm9wKHRoaXMuaGFuZGxlcnMsIG1lc3NhZ2UubmFtZSlcbiAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgYXR0ZW1wdCgoKSA9PiBmbi5hcHBseShudWxsLCBtZXNzYWdlLmFyZ3MpKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCA9IG51bGwpID0+IHRoaXMuX3NlbmQoe2lkLCByZXN1bHR9KSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLl9zZW5kKHtpZCwgZXJyb3I6IHRoaXMuZXJyb3JGb3JtYXR0ZXIoZXJyb3IpfSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGVycm9yID0gdGhpcy5lcnJvckZvcm1hdHRlcihuZXcgTm9Qcm9jZWR1cmVFcnJvcihtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgIHRoaXMuX3NlbmQoe2lkLCBlcnJvcn0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXQuYXBwbHkodGhpcywgY29uY2F0KG1lc3NhZ2UubmFtZSwgbWVzc2FnZS5hcmdzKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGFjayA9IHRoaXMucGVuZGluZ0Fja3NbbWVzc2FnZS5pZF1cbiAgICAgIGlmIChhY2spIHsgYWNrLnNldHRsZShtZXNzYWdlKSB9XG4gICAgfVxuICB9XG5cbiAgX3NlbmQgKG1lc3NhZ2UsIHsgc2tpcEVuY29kZXIgPSBmYWxzZSwgaXNBdXRoID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF0dGVtcHQoKCkgPT4gdGhpcy5zZW5kSG9vayA/IHRoaXMuc2VuZEhvb2sobWVzc2FnZSwgc2tpcEVuY29kZXIpIDogbnVsbClcbiAgICAgIC50aGVuKCgpID0+IHNraXBFbmNvZGVyID8gbWVzc2FnZSA6IHRoaXMuZW5jb2RlcihtZXNzYWdlKSlcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkICYmICFpc0F1dGgpIHtcbiAgICAgICAgICBsZXQgaWQgPSBza2lwRW5jb2RlciA/IHVuZGVmaW5lZCA6IG1lc3NhZ2UuaWRcbiAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKGlkKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnczYykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5zZW5kKGRhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGJpbmFyeSA9IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJ1xuICAgICAgICAgIHJldHVybiBmcm9tQ2FsbGJhY2soY2IgPT4gdGhpcy5zb2NrZXQuc2VuZChkYXRhLCB7YmluYXJ5fSwgY2IpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYW4gZXZlbnQsIG5vIHJlcGx5LiBVc2Uge0BsaW5rIG9ufSBvciB7QGxpbmsgb25jZX0gbWV0aG9kc1xuICAgKiB0byBsaXN0ZW4gZXZlbnRzIG9uIGEgcmVjaXBpZW50IHNpZGUuIFJlc2VydmVkIGV2ZW50IG5hbWVzXG4gICAqIChfX01VU1QgTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCwgYG9wZW5gLCBgZXJyb3JgLFxuICAgKiBgcGluZ2AsIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5kZWZpbmVkPn0gUmVzb2x2ZXMgd2hlbiBhIGRhdGEgaGFzIGJlZW4gc2VudC5cbiAgICovXG4gIHNlbmQgKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgbGV0IHsgbWVzc2FnZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UoZXZlbnQsIGFyZ3MsIGZhbHNlKVxuICAgIHJldHVybiB0aGlzLl9zZW5kKG1lc3NhZ2UpXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UgZW5jb2RlZCBieSB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9IG9yIHtAbGlua1xuICAgKiBTZXJ2ZXIjZW5jb2RlTWVzc2FnZX0sIHVzZWZ1bCBmb3IgaWRlbnRpY2FsIG1lc3NhZ2VzXG4gICAqIGJyb2FkY2FzdGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgUmVzdWx0IG9mIHtAbGluayBDbGllbnQjZW5jb2RlTWVzc2FnZX0uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFJlc29sdmVzIHdoZW4gYSBkYXRhIGhhcyBiZWVuIHNlbnQuXG4gICAqL1xuICBzZW5kRW5jb2RlZCAoZGF0YSkge1xuICAgIHJldHVybiB0aGlzLl9zZW5kKGRhdGEsIHtza2lwRW5jb2RlcjogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGEgbWVzc2FnZSBmb3IgYSBsYXRlciB1c2Ugd2l0aCB7QGxpbmsgQ2xpZW50I3NlbmRFbmNvZGVkfS5cbiAgICogUmVzZXJ2ZWQgZXZlbnQgbmFtZXMgKF9fTVVTVCBOT1RfXyBiZSB1c2VkKTogYGNvbm5lY3RgLCBgY2xvc2VgLFxuICAgKiBgb3BlbmAsIGBlcnJvcmAsIGBwaW5nYCwgYHBvbmdgLCBgcmV0cnlgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBbYXJnc10gQXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBFbmNvZGVkIG1lc3NhZ2UuXG4gICAqL1xuICBlbmNvZGVNZXNzYWdlIChldmVudCwgLi4uYXJncykge1xuICAgIGxldCB7IG1lc3NhZ2UgfSA9IHRoaXMuX21ha2VNZXNzYWdlKGV2ZW50LCBhcmdzLCBmYWxzZSlcbiAgICByZXR1cm4gYXR0ZW1wdCgoKSA9PiB0aGlzLmVuY29kZXIobWVzc2FnZSkpXG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGFuIFJQQyBwcm9jZWR1cmUuIFVzZSB7QGxpbmsgQ2xpZW50I3JlZ2lzdGVyfSBtZXRob2QgdG9cbiAgICogYXNzaWduIGFuIFJQQyBtZXRob2QgaGFuZGxlci4gUmVzZXJ2ZWQgcHJvY2VkdXJlIG5hbWVzIChfX01VU1RcbiAgICogTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCwgYG9wZW5gLCBgZXJyb3JgLCBgcGluZ2AsXG4gICAqIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvY2VkdXJlIG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gUmVzb2x2ZXMgb3IgcmVqZWN0cyB3aGVuIGEgcmVwbHkgaXNcbiAgICogcmVjZWl2ZWQuXG4gICAqL1xuICBpbnZva2UgKG5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgeyBtZXNzYWdlLCBwcm9taXNlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZShuYW1lLCBhcmdzLCB0cnVlKVxuICAgIHJldHVybiB0aGlzLl9zZW5kKG1lc3NhZ2UpLnRoZW4oKCkgPT4gcHJvbWlzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBSUEMgaGFuZGxlci4gRWFjaCBuYW1lIG11c3QgaGF2ZSBubyBtb3JlIHRoYW4gYSBvbmVcbiAgICogaGFuZGxlciwgc28gaXQgdGhyb3dzIGFuIGVycm9yIG9uIGEgZHVwbGljYXRlIGhhbmRsZXJcbiAgICogcmVnaXN0cmF0aW9uIGF0dGVtcHQuIFVzZSB7QGxpbmsgQ2xpZW50I2ludm9rZX0gdG8gY2FsbCBhIG1ldGhvZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvY2VkdXJlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBQcm9taXNlLlxuICAgKi9cbiAgcmVnaXN0ZXIgKG5hbWUsIGhhbmRsZXIpIHtcbiAgICBpZiAoZ2V0T3duUHJvcCh0aGlzLmhhbmRsZXJzLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCByZWdpc3RlciBhIGR1cGxpY2F0ZSBSUEMgaGFuZGxlciBmb3IgJHtuYW1lfWApXG4gICAgfVxuICAgIHRoaXMuaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyXG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0LiBDbGllbnQtc2lkZSBvbmx5LlxuICAgKi9cbiAgcmVjb25uZWN0ICgpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgIGlmICh0aGlzLl9pc09wZW4oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLldlYlNvY2tldCAmJiB0aGlzLnVybCkge1xuICAgICAgdGhpcy5fb3BlbigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFsZm9ybWVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucycpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhIGNsaWVudCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvZGU9MTAwMF0gQ29kZSBhcyBwZXIgV2ViU29ja2V0IHNwZWMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXSBPcHRpb25hbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Rlcm1pbmF0ZT10cnVlXSBEaXNhYmxlIHJlY29ubmVjdC5cbiAgICovXG4gIGNsb3NlIChjb2RlID0gMTAwMCwgc3RyLCB0ZXJtaW5hdGUgPSB0cnVlKSB7XG4gICAgaWYgKCF0aGlzLnRlcm1pbmF0ZWQpIHtcbiAgICAgIHRoaXMudGVybWluYXRlZCA9IHRlcm1pbmF0ZVxuICAgICAgaWYgKHRoaXMuX2lzT3BlbigpKSB7IHRoaXMuc29ja2V0LmNsb3NlKGNvZGUsIHN0cikgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgQ2xpZW50I3NlbmR9LlxuICogQG1ldGhvZFxuICogQG5hbWUgQ2xpZW50I2VtaXRcbiAqL1xuQ2xpZW50LnByb3RvdHlwZS5lbWl0ID0gQ2xpZW50LnByb3RvdHlwZS5zZW5kXG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBDbGllbnQjc2VuZEVuY29kZWR9LlxuICogQG1ldGhvZFxuICogQG5hbWUgQ2xpZW50I2VtaXRFbmNvZGVkXG4gKi9cbkNsaWVudC5wcm90b3R5cGUuZW1pdEVuY29kZWQgPSBDbGllbnQucHJvdG90eXBlLnNlbmRFbmNvZGVkXG5cbkNsaWVudC5Db25uZWN0aW9uRXJyb3IgPSBDb25uZWN0aW9uRXJyb3JcbkNsaWVudC5Ob1Byb2NlZHVyZUVycm9yID0gTm9Qcm9jZWR1cmVFcnJvclxuQ2xpZW50LlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvclxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DbGllbnQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJQcm9taXNlIiwiYmxhY2tsaXN0IiwiY29uY2F0IiwiYmluZCIsImVtaXQiLCJwcm90b3R5cGUiLCJpc0JsYWNrbGlzdGVkRXZlbnQiLCJuYW1lIiwiaW5kZXhPZiIsImdldE93blByb3AiLCJvYmoiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsIkNvbm5lY3Rpb25FcnJvciIsImlkIiwiT2JqZWN0IiwiY3JlYXRlIiwiRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJOb1Byb2NlZHVyZUVycm9yIiwicHJvY2VkdXJlIiwidmFsaWRhdGVJZCIsInZhbGlkYXRlIiwibWVzc2FnZSIsInBhc3NlZCIsImFyZ3MiLCJBcnJheSIsIm5wcm9wcyIsImtleXMiLCJsZW5ndGgiLCJBY2siLCJ0aW1lb3V0IiwiY2IiLCJwcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJmb3JjZU5hY2siLCJlcnJvciIsImNsZWFyVGltZW91dCIsInJlc3VsdCIsInJldHJ5Q29uZmlnIiwiZmFjdG9yIiwibWF4VGltZW91dCIsIkluZmluaXR5IiwibWluVGltZW91dCIsInJhbmRvbWl6ZSIsInJldHJpZXMiLCJkZWZhdWx0cyIsImFja1RpbWVvdXQiLCJhdXRoIiwiYXV0b1JlY29ubmVjdCIsImF1dG9SZWNvbm5lY3RPcHRpb25zIiwiYmluYXJ5VHlwZSIsImRlY29kZXIiLCJKU09OIiwicGFyc2UiLCJlbmNvZGVyIiwic3RyaW5naWZ5IiwiZXJyb3JGb3JtYXR0ZXIiLCJTdHJpbmciLCJwaW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsInByb3RvY29scyIsInJlY2VpdmVIb29rIiwic2VuZEhvb2siLCJza2lwVmFsaWRhdGlvbiIsIldlYlNvY2tldCIsInczYyIsIndzT3B0aW9ucyIsIkNsaWVudCIsInVybCIsIm9wdGlvbnMiLCJjb25uZWN0ZWQiLCJjb3VudGVyIiwiZGF0YSIsImhhbmRsZXJzIiwicGVuZGluZ0Fja3MiLCJ0ZXJtaW5hdGVkIiwicmVnaXN0ZXIiLCJyZWNvbm5lY3QiLCJ0aGVuIiwibXNnIiwiX2Rpc3BhdGNoIiwiY2F0Y2giLCJzZW5kIiwic29ja2V0Iiwib25vcGVuIiwib25lcnJvciIsIm9uY2xvc2UiLCJfb25DbG9zZSIsIm9ubWVzc2FnZSIsIl9vbk1lc3NhZ2UiLCJwaW5nVGltZW91dElkIiwiY2FsbCIsIl9tYWtlTWVzc2FnZSIsIl9zZW5kIiwiX3BpbmciLCJjbG9zZSIsInJlYWR5U3RhdGUiLCJyYW5kIiwiTWF0aCIsInJhbmRvbSIsIm1pbiIsInBvdyIsInJlY29ubmVjdFRpbWVvdXRJZCIsImNvbm5lY3RIYW5kbGVyIiwiYXV0aFRpbWVvdXRJZCIsIm9wZW5IYW5kbGVyIiwiaXNBdXRoIiwib25jZSIsIl9zZXRFdmVudHMiLCJldiIsIm9mZiIsImNvZGUiLCJhY2siLCJfcmVjb25uZWN0IiwibmVlZHNBY2siLCJmbiIsImFwcGx5Iiwic2V0dGxlIiwic2tpcEVuY29kZXIiLCJiaW5hcnkiLCJldmVudCIsImhhbmRsZXIiLCJfaXNPcGVuIiwiX29wZW4iLCJzdHIiLCJ0ZXJtaW5hdGUiLCJlbWl0RW5jb2RlZCIsInNlbmRFbmNvZGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFLQSxJQUFNQSxlQUFlQyxRQUFRLGVBQVIsQ0FBckI7O2VBQ21EQSxRQUFRLFNBQVIsQztJQUEzQ0MsTSxZQUFBQSxNO0lBQVFDLE8sWUFBQUEsTztJQUFTQyxZLFlBQUFBLFk7SUFBY0MsTyxZQUFBQSxPOztBQUV2QyxJQUFNQyxZQUFZLENBQUUsT0FBRixFQUFXLE1BQVgsRUFBbUIsT0FBbkIsRUFBNEIsTUFBNUIsRUFBb0MsT0FBcEMsQ0FBbEI7O0FBSUEsSUFBTUMsU0FBUyxHQUFHQSxNQUFILENBQVVDLElBQVYsQ0FBZSxFQUFmLENBQWY7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O0FBRUE1RCxPQUFPekQsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXlELE9BQU9uRCxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0FtRCxPQUFPcEQsWUFBUCxHQUFzQkEsWUFBdEI7O0FBRUFpSCxPQUFPQyxPQUFQLEdBQWlCOUQsTUFBakIiLCJmaWxlIjoiQ2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG4vKiBnbG9iYWwgV2ViU29ja2V0ICovXG5cbi8vIFNoYXJlZCBjb2RlIGZvciBub2RlIGFuZCBjbGllbnRzL2Jyb3dzZXJzXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKVxuY29uc3QgeyBhc3NpZ24sIGF0dGVtcHQsIGZyb21DYWxsYmFjaywgUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGJsYWNrbGlzdCA9IFsgJ2Nsb3NlJywgJ29wZW4nLCAnZXJyb3InLCAncG9uZycsICdyZXRyeScgXVxuXG4vLyB1dGlsc1xuXG5jb25zdCBjb25jYXQgPSBbXS5jb25jYXQuYmluZChbXSlcblxuY29uc3QgZW1pdCA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdFxuXG5mdW5jdGlvbiBpc0JsYWNrbGlzdGVkRXZlbnQgKG5hbWUpIHtcbiAgcmV0dXJuIGJsYWNrbGlzdC5pbmRleE9mKG5hbWUpID49IDBcbn1cblxuZnVuY3Rpb24gZ2V0T3duUHJvcCAob2JqLCBuYW1lKSB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkobmFtZSkgPyBvYmpbbmFtZV0gOiB1bmRlZmluZWRcbn1cblxuLy8gZXJyb3JzXG5cbi8qKlxuICoge0BsaW5rIENsaWVudCNzZW5kfS97QGxpbmsgQ2xpZW50I2ludm9rZX0gaXMgcmVqZWN0ZWQgd2l0aCB0aGlzXG4gKiBlcnJvciB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJlZm9yZSBhIG1lc3NhZ2UgaXMgc2VuZCBvciByZXBseVxuICogcmVjZWl2ZWQgKGZvciBgaW52b2tlYCBvbmx5KS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBFcnJvclxuICogQG1lbWJlcm9mIENsaWVudFxuICogQHBhcmFtIHtudW1iZXJ9IFtpZF0gTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gQ29ubmVjdGlvbkVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnQ29ubmVjdGlvbkVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuQ29ubmVjdGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3Igd2hlbiBubyByZXBseSBpc1xuICogcmVjZWl2ZWQgYmVmb3JlIHtAbGluayBDbGllbnQuU29ja2V0T3B0aW9uc30gYGFja1RpbWVvdXRgLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEVycm9yXG4gKiBAbWVtYmVyb2YgQ2xpZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaWQgTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gVGltZW91dEVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3IgYnkgdGhlIG90aGVyIHNpZGVcbiAqIHdoZW4gbm8gaGFuZGxlciBpcyBmb3VuZCBmb3IgYSBwcm9jZWR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgRXJyb3JcbiAqIEBtZW1iZXJvZiBDbGllbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9jZWR1cmUgTmFtZS5cbiAqL1xuZnVuY3Rpb24gTm9Qcm9jZWR1cmVFcnJvciAocHJvY2VkdXJlKSB7XG4gIHRoaXMubmFtZSA9ICdOb1Byb2NlZHVyZUVycm9yJ1xuICB0aGlzLnByb2NlZHVyZSA9IHByb2NlZHVyZVxufVxuXG5Ob1Byb2NlZHVyZUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vLyB2YWxpZGF0aW9uXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQgKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgaWQgPT09ICdudW1iZXInICYmIChpZCAlIDEpID09PSAwICYmIGlkID4gMFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSAobWVzc2FnZSkge1xuICBsZXQgcGFzc2VkID0gZmFsc2VcbiAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7IC8vIG1lc3NhZ2VcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5uYW1lID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmFyZ3MgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICAgIGlmIChucHJvcHMgPT09IDIgfHwgKG5wcm9wcyA9PT0gMyAmJiB2YWxpZGF0ZUlkKG1lc3NhZ2UuaWQpKSkge1xuICAgICAgICAgIHBhc3NlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIGFjayBtZXNzYWdlXG4gICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICBpZiAobnByb3BzID09PSAyICYmIHZhbGlkYXRlSWQobWVzc2FnZS5pZCkpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgfHwgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eSgncmVzdWx0JykpIHtcbiAgICAgICAgICBwYXNzZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFwYXNzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZXJyb3InKVxuICB9XG59XG5cbi8vIGFja1xuXG5jbGFzcyBBY2sge1xuICBjb25zdHJ1Y3RvciAoaWQsIHRpbWVvdXQsIGNiKSB7XG4gICAgdGhpcy5pZCA9IGlkXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgdGhpcy5yZWplY3QgPSByZWplY3RcbiAgICB9KVxuICAgIHRoaXMuY2IgPSBjYlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb3JjZU5hY2sobmV3IFRpbWVvdXRFcnJvcihpZCkpLCB0aW1lb3V0KVxuICB9XG5cbiAgZm9yY2VOYWNrIChlcnJvcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5jYigpXG4gICAgdGhpcy5yZWplY3QoZXJyb3IpXG4gIH1cblxuICBzZXR0bGUgKG1lc3NhZ2UpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMuY2IoKVxuICAgIGlmIChtZXNzYWdlLmhhc093blByb3BlcnR5KCdlcnJvcicpKSB7XG4gICAgICB0aGlzLnJlamVjdChtZXNzYWdlLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpXG4gICAgfVxuICB9XG59XG5cbi8vIGNsaWVudFxuXG4vKipcbiAqIEdlbmVyYWwgZm9ybWF0IGZvciBhbGwgZGF0YSB0aGF0IGlzIHNlbnQgb3IgcmVjZWl2ZWQgb3ZlciBhXG4gKiB3ZWJzb2NrZXQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpZW50Lk1lc3NhZ2VcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2lkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtBcnJheX0gW2FyZ3NdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3Jlc3VsdF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBNZXNzYWdlcyBlbmNvZGVyLiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91c1xuICogZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuRW5jb2RlclxuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZX0gbWVzc2FnZSBNZXNzYWdlLlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fE9iamVjdH0gRGF0YSB0byBzZW5kLlxuICovXG5cbi8qKlxuICogTWVzc2FnZXMgZGVjb2Rlci4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXNcbiAqIGV4ZWN1dGlvbi5cbiAqXG4gKiBAY2FsbGJhY2sgQ2xpZW50LkRlY29kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFJlY2VpdmVkIGRhdGEuXG4gKiBAcmV0dXJuIHtQcm9taXNlPENsaWVudC5NZXNzYWdlPnxDbGllbnQuTWVzc2FnZX0gTWVzc2FnZS5cbiAqL1xuXG4vKipcbiAqIFJlY2VpdmUgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCByZWNlaXZlcyBhIHZhbGlkIG1lc3NhZ2UgdmlhIGFcbiAqIHdlYnNvY2tldC4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXMgZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuUmVjZWl2ZUhvb2tcbiAqIEBwYXJhbSB7Q2xpZW50Lk1lc3NhZ2V9IG1lc3NhZ2UgTWVzc2FnZS5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPnx1bmRlZmluZWR9IFByb21pc2UsIGlmIGl0IGlzIHJlamVjdGVkIG5vXG4gKiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuXG4vKipcbiAqIFNlbmQgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCBzZW5kcyBhbnkgbWVzc2FnZSB2aWEgYVxuICogd2Vic29ja2V0LiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24uXG4gKlxuICogQGNhbGxiYWNrIENsaWVudC5TZW5kSG9va1xuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZXxPYmplY3R9IG1lc3NhZ2UgTWVzc2FnZSBvciBvYmplY3QgaWZcbiAqIGBpc0VuY29kZWRgIGlzIGB0cnVlYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmNvZGVkIElmIGEgbWVzc2FnZSBoYXMgYmVlbiBhbHJlYWR5IGVuY29kZWRcbiAqIHZpYSB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9IG9yIHtAbGluayBTZXJ2ZXIjZW5jb2RlTWVzc2FnZX0uXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD58dW5kZWZpbmVkfSBQcm9taXNlLCBpZiBpdCBpcyByZWplY3RlZCBub1xuICogaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGllbnQuUmV0cnlDb25maWdcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2ZhY3Rvcj0yXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhUaW1lb3V0PUluZmluaXR5XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttaW5UaW1lb3V0PTEwMDBdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYW5kb21pemU9dHJ1ZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmV0cmllcz0xMF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWVudC5Tb2NrZXRPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthY2tUaW1lb3V0PTIwMDAwXSBSZXN1bHQgd2FpdCB0aW1lb3V0IGZvclxuICoge0BsaW5rIENsaWVudCNpbnZva2V9IGluIG1zLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFthdXRoPXt9XSBBdXRoIGRhdGEuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVjb25uZWN0PXRydWVdIEVuYWJsZSBhdXRvIHJlY29ubmVjdC5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LlJldHJ5Q29uZmlnfSBbYXV0b1JlY29ubmVjdE9wdGlvbnNdIEF1dG9cbiAqIHJlY29ubmVjdCBjb25maWcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JpbmFyeVR5cGU9J2FycmF5YnVmZmVyJ10gVzNDIFdlYlNvY2tldFxuICogYmluYXJ5IGRhdGEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LkRlY29kZXJ9IFtkZWNvZGVyPUpTT04ucGFyc2VdIE1lc3NhZ2VzIGRlY29kZXIuXG4gKiBAcHJvcGVydHkge0NsaWVudC5FbmNvZGVyfSBbZW5jb2Rlcj1KU09OLnN0cmluZ2lmeV0gTWVzc2FnZXNcbiAqIGVuY29kZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZXJyb3JGb3JtYXR0ZXI9U3RyaW5nXSBDb252ZXJ0ZXIgZm9yIEpTXG4gKiBlcnJvcnMgdG8gc29tZSBuZXR3b3JrIGZvcm1hdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGluZ0ludGVydmFsPTIwMDAwXSBQaW5nIGludGVydmFsIGluIG1zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5nVGltZW91dD0yMDAwMF0gUGluZyB0aW1lb3V0IGluIG1zLlxuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gW3Byb3RvY29scz0nd3MtbWVzc2FnaW5nJ11cbiAqIFdlYlNvY2tldCBwcm90b2NvbHMuXG4gKiBAcHJvcGVydHkge0NsaWVudC5SZWNlaXZlSG9va30gW3JlY2VpdmVIb29rXSBSZWNlaXZlIGhvb2suXG4gKiBAcHJvcGVydHkge0NsaWVudC5TZW5kSG9va30gW3JlbmRIb29rXSBTZW5kIGhvb2suXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVmFsaWRhdGlvbj1mYWxzZV0gU2tpcHMgYnVpbGQtaW5cbiAqIG1lc3NhZ2VzIHZhbGlkYXRpb24uXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1dlYlNvY2tldD11bmRlZmluZWRdIEFsdGVybmF0aXZlIHdlYnNvY2tldFxuICogY29uc3RydWN0b3IsIGlmIGl0IGlzIHVuZGVmaW5lZCB0aGVuIGEgZ2xvYmFsIFdlYlNvY2tldCBpcyB1c2VkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdzNjPXVuZGVmaW5lZF0gSWYgV2ViU29ja2V0IGlzIHVzaW5nIGEgdzNjXG4gKiBzZW5kIEFQSSwgb3IgYSB3cyBvbmUgKGZyb20gTm9kZS5qcyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2l0aCBhXG4gKiBjYWxsYmFjaykuIEJ5IGRlZmF1bHQgaWYgYSBnbG9iYWwgdmFsdWUgaXMgdXNlZCwgdGhlbiBpdCBpcyBgdHJ1ZWBcbiAqIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbd3NPcHRpb25zXSBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyB0byB3c1xuICogc29ja2V0IGNvbnN0cnVjdG9yLlxuICovXG5cbmNvbnN0IHJldHJ5Q29uZmlnID0ge1xuICBmYWN0b3I6IDIsXG4gIG1heFRpbWVvdXQ6IEluZmluaXR5LFxuICBtaW5UaW1lb3V0OiAxMDAwLFxuICByYW5kb21pemU6IHRydWUsXG4gIHJldHJpZXM6IDEwXG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBhY2tUaW1lb3V0OiAyMDAwMCxcbiAgYXV0aDoge30sXG4gIGF1dG9SZWNvbm5lY3Q6IHRydWUsXG4gIGF1dG9SZWNvbm5lY3RPcHRpb25zOiByZXRyeUNvbmZpZyxcbiAgYmluYXJ5VHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgZGVjb2RlcjogSlNPTi5wYXJzZSxcbiAgZW5jb2RlcjogSlNPTi5zdHJpbmdpZnksXG4gIGVycm9yRm9ybWF0dGVyOiBTdHJpbmcsXG4gIHBpbmdJbnRlcnZhbDogMjAwMDAsXG4gIHBpbmdUaW1lb3V0OiAyMDAwMCxcbiAgcHJvdG9jb2xzOiAnd3MtbWVzc2FnaW5nJyxcbiAgcmVjZWl2ZUhvb2s6IG51bGwsXG4gIHNlbmRIb29rOiBudWxsLFxuICBza2lwVmFsaWRhdGlvbjogZmFsc2UsXG4gIFdlYlNvY2tldDogdW5kZWZpbmVkLFxuICB3M2M6IHVuZGVmaW5lZCxcbiAgd3NPcHRpb25zOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqXG4gKiBAZW1pdHMgQ2xpZW50I2Nsb3NlXG4gKiBAZW1pdHMgQ2xpZW50I29wZW5cbiAqIEBlbWl0cyBDbGllbnQjZXJyb3JcbiAqIEBlbWl0cyBDbGllbnQjY29ubmVjdFxuICovXG5jbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsaWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBXZWJTb2NrZXQgY29ubmVjdGlvbiB1cmwuXG4gICAqIEBwYXJhbSB7Q2xpZW50LlNvY2tldE9wdGlvbnN9IFtvcHRpb25zXSBTb2NrZXQgb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnVybCA9IHVybFxuICAgIC8qKlxuICAgICAqIENsaWVudCBpZC4gU2VydmVyLXNpZGUgb25seS5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGlkXG4gICAgICogQG1lbWJlcm9mIENsaWVudFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGFzc2lnbih0aGlzLCBkZWZhdWx0cywgb3B0aW9ucylcbiAgICB0aGlzLnJldHJ5Q29uZmlnID0ge31cbiAgICBhc3NpZ24odGhpcy5yZXRyeUNvbmZpZywgcmV0cnlDb25maWcsIG9wdGlvbnMuYXV0b1JlY29ubmVjdE9wdGlvbnMpXG4gICAgaWYgKCF0aGlzLldlYlNvY2tldCkge1xuICAgICAgdGhpcy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbiAgICAgIHRoaXMudzNjID0gdGhpcy53M2MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLnczY1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGVuIGEgY2xpZW50IGlzIGNvbm5lY3RlZC5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICB0aGlzLmNvdW50ZXIgPSAxXG4gICAgdGhpcy5kYXRhID0ge31cbiAgICB0aGlzLmhhbmRsZXJzID0ge31cbiAgICB0aGlzLnBlbmRpbmdBY2tzID0ge31cbiAgICB0aGlzLmF0dGVtcHQgPSAwXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlbiBhIGNsaWVudCB3YXMgY2xvc2VkIHZpYSBhIGNsb3NlIG1ldGhvZCBvciBhbiBhdXRoXG4gICAgICogZXJyb3Igb2NjdXJyZWQuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmVnaXN0ZXIoJ3BpbmcnLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSlcbiAgICB0aGlzLnJlY29ubmVjdCgpXG4gIH1cblxuICBfb25NZXNzYWdlIChkYXRhKSB7XG4gICAgbGV0IG1lc3NhZ2VcbiAgICBhdHRlbXB0KCgpID0+IHRoaXMuZGVjb2RlcihkYXRhLmRhdGEpKVxuICAgICAgLnRoZW4obXNnID0+IHsgbWVzc2FnZSA9IG1zZyB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHsgdmFsaWRhdGUobWVzc2FnZSkgfSB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAodGhpcy5yZWNlaXZlSG9vaykgeyByZXR1cm4gdGhpcy5yZWNlaXZlSG9vayhtZXNzYWdlKSB9IH0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLl9kaXNwYXRjaChtZXNzYWdlKSlcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG90aGVyIHNpZGUgZmFpbGVkIHRvIGRlY29kZSBvciB2YWxpZGF0ZSBhXG4gICAgICogd2Vic29ja2V0IG1lc3NhZ2UsIG5hbWVseSBhbiBlcnJvciBpcyBvY2N1cnJlZCBpbnNpZGUgZWl0aGVyXG4gICAgICogYGRlY29kZXJgIG9yIGByZWNlaXZlSG9va2AuXG4gICAgICogQGV2ZW50IENsaWVudCNwcmVwcm9jZXNzaW5nRXJyb3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXJyb3IgQ29udmVydGVkIGVycm9yLlxuICAgICAqL1xuICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuc2VuZCgncHJlcHJvY2Vzc2luZ0Vycm9yJywgdGhpcy5lcnJvckZvcm1hdHRlcihlcnJvcikpKVxuICB9XG5cbiAgX3NldEV2ZW50cyAoKSB7XG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9ub3BlbiBXZWJTb2NrZXQgZXZlbnRzLlxuICAgICAqIEBldmVudCBDbGllbnQjb3BlblxuICAgICAqL1xuICAgIHRoaXMuc29ja2V0Lm9ub3BlbiA9IGVtaXQuYmluZCh0aGlzLCAnb3BlbicpXG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9uZXJyb3IgV2ViU29ja2V0IGV2ZW50cy4gRG9lcyBub3QgdGhyb3cgaWYgdGhlcmUgYXJlXG4gICAgICogbm8gbGlzdGVuZXJzLlxuICAgICAqIEBldmVudCBDbGllbnQjZXJyb3JcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpXG4gICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IHRoaXMuX29uQ2xvc2UuYmluZCh0aGlzKVxuICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpXG4gIH1cblxuICBfcGluZyAoKSB7XG4gICAgdGhpcy5waW5nVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBlbWl0LmNhbGwodGhpcywgJ3BpbmcnKVxuICAgICAgbGV0IHRpbWVvdXQgPSB0aGlzLnBpbmdUaW1lb3V0XG4gICAgICBsZXQgeyBtZXNzYWdlLCBwcm9taXNlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZSgncGluZycsIFtdLCB0cnVlLCB0aW1lb3V0KVxuICAgICAgdGhpcy5fc2VuZChtZXNzYWdlKS50aGVuKCgpID0+IHByb21pc2UpXG4gICAgICAgIC50aGVuKCgpID0+IGVtaXQuY2FsbCh0aGlzLCAncG9uZycpKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9waW5nKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLmNsb3NlKDQwMDgsICdQaW5nIHRpbWVvdXQnLCBmYWxzZSkpXG4gICAgfSwgdGhpcy5waW5nSW50ZXJ2YWwpXG4gIH1cblxuICBfaXNPcGVuICgpIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQgJiZcbiAgICAgICh0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSAwIHx8IHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgPT09IDEpXG4gIH1cblxuICBfcmVjb25uZWN0ICgpIHtcbiAgICBsZXQgeyBmYWN0b3IsIG1heFRpbWVvdXQsIG1pblRpbWVvdXQsIHJhbmRvbWl6ZSwgcmV0cmllcyB9ID0gdGhpcy5yZXRyeUNvbmZpZ1xuICAgIGlmICh0aGlzLmF0dGVtcHQgPj0gcmV0cmllcyB8fCB0aGlzLnRlcm1pbmF0ZWQpIHsgcmV0dXJuIH1cbiAgICBsZXQgcmFuZCA9IDEgKyAocmFuZG9taXplID8gTWF0aC5yYW5kb20oKSA6IDApXG4gICAgbGV0IHRpbWVvdXQgPSBNYXRoLm1pbihyYW5kICogbWluVGltZW91dCAqIE1hdGgucG93KGZhY3RvciwgdGhpcy5hdHRlbXB0KSwgbWF4VGltZW91dClcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5yZWNvbm5lY3QuYmluZCh0aGlzKSwgdGltZW91dClcbiAgICB0aGlzLmF0dGVtcHQrK1xuICB9XG5cbiAgX29wZW4gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXRJZClcbiAgICAvKipcbiAgICAgKiBVbmRlcmx5aW5nIHdlYnNvY2tldC5cbiAgICAgKiBAbWVtYmVyIHtXZWJTb2NrZXR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgdGhpcy5XZWJTb2NrZXQodGhpcy51cmwsIHRoaXMucHJvdG9jb2xzLCB0aGlzLndzT3B0aW9ucylcbiAgICBpZiAodGhpcy53M2MpIHsgdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSA9IHRoaXMuYmluYXJ5VHlwZSB9XG4gICAgdGhpcy5jb25uZWN0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hdHRlbXB0ID0gMFxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYXV0aFRpbWVvdXRJZClcbiAgICAgIHRoaXMuX3BpbmcoKVxuICAgIH1cbiAgICB0aGlzLm9wZW5IYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5fc2VuZCh0aGlzLmF1dGgsIHtpc0F1dGg6IHRydWV9KVxuICAgICAgdGhpcy5hdXRoVGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgdGhpcy5jbG9zZS5iaW5kKHRoaXMsIDQwMDgsICdBdXRoIHRpbWVvdXQnLCBmYWxzZSksXG4gICAgICAgIHRoaXMuYWNrVGltZW91dClcbiAgICAgIHRoaXMub25jZSgnY29ubmVjdCcsIHRoaXMuY29ubmVjdEhhbmRsZXIpXG4gICAgfVxuICAgIHRoaXMub25jZSgnb3BlbicsIHRoaXMub3BlbkhhbmRsZXIpXG4gICAgdGhpcy5fc2V0RXZlbnRzKClcbiAgICBpZiAodGhpcy5hdHRlbXB0ID4gMCkge1xuICAgICAgLyoqXG4gICAgICAgKiBFbWl0cyByZXRyeSBldmVudHMgd2hlbiBhdXRvIHJlY29ubmVjdGluZy5cbiAgICAgICAqIEBldmVudCBDbGllbnQjcmV0cnlcbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdHRlbXB0IEF0dGVtcHQgbnVtYmVyIHN0YXJ0aW5nIGZyb20gYDFgLlxuICAgICAgICovXG4gICAgICBlbWl0LmNhbGwodGhpcywgJ3JldHJ5JywgdGhpcy5hdHRlbXB0KVxuICAgIH1cbiAgfVxuXG4gIF9vbkNsb3NlIChldikge1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICBjbGVhclRpbWVvdXQodGhpcy5waW5nVGltZW91dElkKVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dGhUaW1lb3V0SWQpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZW91dElkKVxuICAgIHRoaXMub2ZmKCdjb25uZWN0JywgdGhpcy5jb25uZWN0SGFuZGxlcilcbiAgICB0aGlzLm9mZignb3BlbicsIHRoaXMub3BlbkhhbmRsZXIpXG4gICAgaWYgKGV2LmNvZGUgPT09IDQwMDMgfHwgIXRoaXMudXJsKSB7IHRoaXMudGVybWluYXRlZCA9IHRydWUgfVxuICAgIGZvciAobGV0IGlkIGluIHRoaXMucGVuZGluZ0Fja3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQWNrcy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgbGV0IGFjayA9IHRoaXMucGVuZGluZ0Fja3NbaWRdXG4gICAgICAgIGFjay5mb3JjZU5hY2sobmV3IENvbm5lY3Rpb25FcnJvcihpZCkpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0Fja3MgPSB7fVxuICAgIGlmICghdGhpcy50ZXJtaW5hdGVkICYmIHRoaXMuYXV0b1JlY29ubmVjdCkgeyB0aGlzLl9yZWNvbm5lY3QoKSB9XG4gICAgLyoqXG4gICAgICogRW1pdHMgdzNjIG9uY2xvc2UgV2ViU29ja2V0IGV2ZW50cy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I2Nsb3NlXG4gICAgICogQHBhcmFtIHtDbG9zZUV2ZW50fSBkYXRhIENsb3NlIGV2ZW50IGRhdGEuXG4gICAgICovXG4gICAgZW1pdC5jYWxsKHRoaXMsICdjbG9zZScsIGV2KVxuICB9XG5cbiAgX21ha2VNZXNzYWdlIChuYW1lLCBhcmdzLCBuZWVkc0FjaywgYWNrVGltZW91dCA9IHRoaXMuYWNrVGltZW91dCkge1xuICAgIGxldCBwcm9taXNlLCBtZXNzYWdlXG4gICAgbWVzc2FnZSA9IHtuYW1lLCBhcmdzfVxuICAgIGlmIChuZWVkc0Fjaykge1xuICAgICAgbGV0IGlkID0gdGhpcy5jb3VudGVyKytcbiAgICAgIGxldCBhY2sgPSBuZXcgQWNrKGlkLCBhY2tUaW1lb3V0LCAoKSA9PiBkZWxldGUgdGhpcy5wZW5kaW5nQWNrc1tpZF0pXG4gICAgICB0aGlzLnBlbmRpbmdBY2tzW2lkXSA9IGFja1xuICAgICAgcHJvbWlzZSA9IGFjay5wcm9taXNlXG4gICAgICBtZXNzYWdlLmlkID0gaWRcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSwgcHJvbWlzZSB9XG4gIH1cblxuICAvKipcbiAgICogU29ja2V0IGNvbm5lY3Rpb24gaXMgb3BlbiBhbmQgY2xpZW50IGhhcyBwYXNzZWQgYW4gYXV0aFxuICAgKiBjaGVjay4gQ2xpZW50LXNpZGUgb25seS5cbiAgICogQGV2ZW50IENsaWVudCNjb25uZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gZGF0YSBBdXRoIHJlcGx5IGRhdGEuXG4gICAqL1xuICBfZGlzcGF0Y2ggKG1lc3NhZ2UpIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7XG4gICAgICBpZiAoaXNCbGFja2xpc3RlZEV2ZW50KG1lc3NhZ2UubmFtZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChtZXNzYWdlLm5hbWUgPT09ICdjb25uZWN0JyAmJiB0aGlzLmNvbm5lY3RlZCkgeyByZXR1cm4gfVxuICAgICAgaWYgKG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgbGV0IGlkID0gbWVzc2FnZS5pZFxuICAgICAgICBsZXQgZm4gPSBnZXRPd25Qcm9wKHRoaXMuaGFuZGxlcnMsIG1lc3NhZ2UubmFtZSlcbiAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgYXR0ZW1wdCgoKSA9PiBmbi5hcHBseShudWxsLCBtZXNzYWdlLmFyZ3MpKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCA9IG51bGwpID0+IHRoaXMuX3NlbmQoe2lkLCByZXN1bHR9KSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLl9zZW5kKHtpZCwgZXJyb3I6IHRoaXMuZXJyb3JGb3JtYXR0ZXIoZXJyb3IpfSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGVycm9yID0gdGhpcy5lcnJvckZvcm1hdHRlcihuZXcgTm9Qcm9jZWR1cmVFcnJvcihtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgIHRoaXMuX3NlbmQoe2lkLCBlcnJvcn0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXQuYXBwbHkodGhpcywgY29uY2F0KG1lc3NhZ2UubmFtZSwgbWVzc2FnZS5hcmdzKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGFjayA9IHRoaXMucGVuZGluZ0Fja3NbbWVzc2FnZS5pZF1cbiAgICAgIGlmIChhY2spIHsgYWNrLnNldHRsZShtZXNzYWdlKSB9XG4gICAgfVxuICB9XG5cbiAgX3NlbmQgKG1lc3NhZ2UsIHsgc2tpcEVuY29kZXIgPSBmYWxzZSwgaXNBdXRoID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF0dGVtcHQoKCkgPT4gdGhpcy5zZW5kSG9vayA/IHRoaXMuc2VuZEhvb2sobWVzc2FnZSwgc2tpcEVuY29kZXIpIDogbnVsbClcbiAgICAgIC50aGVuKCgpID0+IHNraXBFbmNvZGVyID8gbWVzc2FnZSA6IHRoaXMuZW5jb2RlcihtZXNzYWdlKSlcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkICYmICFpc0F1dGgpIHtcbiAgICAgICAgICBsZXQgaWQgPSBza2lwRW5jb2RlciA/IHVuZGVmaW5lZCA6IG1lc3NhZ2UuaWRcbiAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkVycm9yKGlkKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnczYykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5zZW5kKGRhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGJpbmFyeSA9IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJ1xuICAgICAgICAgIHJldHVybiBmcm9tQ2FsbGJhY2soY2IgPT4gdGhpcy5zb2NrZXQuc2VuZChkYXRhLCB7YmluYXJ5fSwgY2IpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYW4gZXZlbnQsIG5vIHJlcGx5LiBVc2Uge0BsaW5rIG9ufSBvciB7QGxpbmsgb25jZX0gbWV0aG9kc1xuICAgKiB0byBsaXN0ZW4gZXZlbnRzIG9uIGEgcmVjaXBpZW50IHNpZGUuIFJlc2VydmVkIGV2ZW50IG5hbWVzXG4gICAqIChfX01VU1QgTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCwgYG9wZW5gLCBgZXJyb3JgLFxuICAgKiBgcGluZ2AsIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5kZWZpbmVkPn0gUmVzb2x2ZXMgd2hlbiBhIGRhdGEgaGFzIGJlZW4gc2VudC5cbiAgICovXG4gIHNlbmQgKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgbGV0IHsgbWVzc2FnZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UoZXZlbnQsIGFyZ3MsIGZhbHNlKVxuICAgIHJldHVybiB0aGlzLl9zZW5kKG1lc3NhZ2UpXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UgZW5jb2RlZCBieSB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9IG9yIHtAbGlua1xuICAgKiBTZXJ2ZXIjZW5jb2RlTWVzc2FnZX0sIHVzZWZ1bCBmb3IgaWRlbnRpY2FsIG1lc3NhZ2VzXG4gICAqIGJyb2FkY2FzdGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgUmVzdWx0IG9mIHtAbGluayBDbGllbnQjZW5jb2RlTWVzc2FnZX0uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFJlc29sdmVzIHdoZW4gYSBkYXRhIGhhcyBiZWVuIHNlbnQuXG4gICAqL1xuICBzZW5kRW5jb2RlZCAoZGF0YSkge1xuICAgIHJldHVybiB0aGlzLl9zZW5kKGRhdGEsIHtza2lwRW5jb2RlcjogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGEgbWVzc2FnZSBmb3IgYSBsYXRlciB1c2Ugd2l0aCB7QGxpbmsgQ2xpZW50I3NlbmRFbmNvZGVkfS5cbiAgICogUmVzZXJ2ZWQgZXZlbnQgbmFtZXMgKF9fTVVTVCBOT1RfXyBiZSB1c2VkKTogYGNvbm5lY3RgLCBgY2xvc2VgLFxuICAgKiBgb3BlbmAsIGBlcnJvcmAsIGBwaW5nYCwgYHBvbmdgLCBgcmV0cnlgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBbYXJnc10gQXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBFbmNvZGVkIG1lc3NhZ2UuXG4gICAqL1xuICBlbmNvZGVNZXNzYWdlIChldmVudCwgLi4uYXJncykge1xuICAgIGxldCB7IG1lc3NhZ2UgfSA9IHRoaXMuX21ha2VNZXNzYWdlKGV2ZW50LCBhcmdzLCBmYWxzZSlcbiAgICByZXR1cm4gYXR0ZW1wdCgoKSA9PiB0aGlzLmVuY29kZXIobWVzc2FnZSkpXG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGFuIFJQQyBwcm9jZWR1cmUuIFVzZSB7QGxpbmsgQ2xpZW50I3JlZ2lzdGVyfSBtZXRob2QgdG9cbiAgICogYXNzaWduIGFuIFJQQyBtZXRob2QgaGFuZGxlci4gUmVzZXJ2ZWQgcHJvY2VkdXJlIG5hbWVzIChfX01VU1RcbiAgICogTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCwgYG9wZW5gLCBgZXJyb3JgLCBgcGluZ2AsXG4gICAqIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvY2VkdXJlIG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gUmVzb2x2ZXMgb3IgcmVqZWN0cyB3aGVuIGEgcmVwbHkgaXNcbiAgICogcmVjZWl2ZWQuXG4gICAqL1xuICBpbnZva2UgKG5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgeyBtZXNzYWdlLCBwcm9taXNlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZShuYW1lLCBhcmdzLCB0cnVlKVxuICAgIHJldHVybiB0aGlzLl9zZW5kKG1lc3NhZ2UpLnRoZW4oKCkgPT4gcHJvbWlzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBSUEMgaGFuZGxlci4gRWFjaCBuYW1lIG11c3QgaGF2ZSBubyBtb3JlIHRoYW4gYSBvbmVcbiAgICogaGFuZGxlciwgc28gaXQgdGhyb3dzIGFuIGVycm9yIG9uIGEgZHVwbGljYXRlIGhhbmRsZXJcbiAgICogcmVnaXN0cmF0aW9uIGF0dGVtcHQuIFVzZSB7QGxpbmsgQ2xpZW50I2ludm9rZX0gdG8gY2FsbCBhIG1ldGhvZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvY2VkdXJlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBQcm9taXNlLlxuICAgKi9cbiAgcmVnaXN0ZXIgKG5hbWUsIGhhbmRsZXIpIHtcbiAgICBpZiAoZ2V0T3duUHJvcCh0aGlzLmhhbmRsZXJzLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCByZWdpc3RlciBhIGR1cGxpY2F0ZSBSUEMgaGFuZGxlciBmb3IgJHtuYW1lfWApXG4gICAgfVxuICAgIHRoaXMuaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyXG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0LiBDbGllbnQtc2lkZSBvbmx5LlxuICAgKi9cbiAgcmVjb25uZWN0ICgpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgIGlmICh0aGlzLl9pc09wZW4oKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtcmV0dXJuXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKHRoaXMuV2ViU29ja2V0ICYmIHRoaXMudXJsKSB7XG4gICAgICB0aGlzLl9vcGVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgY29uZmlndXJhdGlvbiBvcHRpb25zJylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGEgY2xpZW50IGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29kZT0xMDAwXSBDb2RlIGFzIHBlciBXZWJTb2NrZXQgc3BlYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdIE9wdGlvbmFsIHN0cmluZy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdGVybWluYXRlPXRydWVdIERpc2FibGUgcmVjb25uZWN0LlxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSAxMDAwLCBzdHIsIHRlcm1pbmF0ZSA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMudGVybWluYXRlZCkge1xuICAgICAgdGhpcy50ZXJtaW5hdGVkID0gdGVybWluYXRlXG4gICAgICBpZiAodGhpcy5faXNPcGVuKCkpIHsgdGhpcy5zb2NrZXQuY2xvc2UoY29kZSwgc3RyKSB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBDbGllbnQjc2VuZH0uXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBDbGllbnQjZW1pdFxuICovXG5DbGllbnQucHJvdG90eXBlLmVtaXQgPSBDbGllbnQucHJvdG90eXBlLnNlbmRcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIENsaWVudCNzZW5kRW5jb2RlZH0uXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBDbGllbnQjZW1pdEVuY29kZWRcbiAqL1xuQ2xpZW50LnByb3RvdHlwZS5lbWl0RW5jb2RlZCA9IENsaWVudC5wcm90b3R5cGUuc2VuZEVuY29kZWRcblxuQ2xpZW50LkNvbm5lY3Rpb25FcnJvciA9IENvbm5lY3Rpb25FcnJvclxuQ2xpZW50Lk5vUHJvY2VkdXJlRXJyb3IgPSBOb1Byb2NlZHVyZUVycm9yXG5DbGllbnQuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yXG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50XG4iXX0=

@@ -7,2 +7,2 @@ 'use strict';

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkNMT1NFX0ZPUkJJRERFTiIsIkNMT1NFX1RJTUVPVVQiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLG1CQUFpQixJQURGO0FBRWZDLGlCQUFlO0FBRkEsQ0FBakIiLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDTE9TRV9GT1JCSURERU46IDQwMDMsXG4gIENMT1NFX1RJTUVPVVQ6IDQwMDhcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkNMT1NFX0ZPUkJJRERFTiIsIkNMT1NFX1RJTUVPVVQiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLG1CQUFpQixJQURGO0FBRWZDLGlCQUFlO0FBRkEsQ0FBakIiLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDTE9TRV9GT1JCSURERU46IDQwMDMsXG4gIENMT1NFX1RJTUVPVVQ6IDQwMDhcbn1cbiJdfQ==

@@ -177,2 +177,2 @@

module.exports = Server;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXJ2ZXIuanMiXSwibmFtZXMiOlsiQ2xpZW50IiwicmVxdWlyZSIsIkV2ZW50RW1pdHRlciIsIldlYlNvY2tldCIsIldlYlNvY2tldFNlcnZlciIsIlNlcnZlciIsInVpZCIsIkNMT1NFX0ZPUkJJRERFTiIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJkZWZhdWx0cyIsImNvbm5lY3Rpb25Ib29rIiwiYXV0aFRpbWVvdXQiLCJ3c3NPcHRpb25zIiwic2VydmVyT3B0aW9ucyIsInNvY2tldE9wdGlvbnMiLCJjbGllbnRzIiwiTWFwIiwiX3NldEV2ZW50cyIsIndzcyIsImVycm9yIiwiZW1pdCIsIm9uIiwiYmluZCIsIl9vbkNvbm5lY3Rpb24iLCJzb2NrZXQiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImNsb3NlIiwib25jZSIsIl9hZGRDbGllbnQiLCJkYXRhIiwiY2xpZW50IiwiY2xlYXJUaW1lb3V0IiwidGhlbiIsImlkIiwiYXV0b1JlY29ubmVjdCIsInNldCIsIl9yZW1vdmVDbGllbnQiLCJkZWNvZGVyIiwiYXV0aERhdGEiLCJfaXNPcGVuIiwiY29ubmVjdGVkIiwic2VuZCIsImF1dGhSZXBseURhdGEiLCJfcGluZyIsImNhdGNoIiwic3RyIiwidG9TdHJpbmciLCJkZWxldGUiLCJnZXQiLCJldmVudCIsImFyZ3MiLCJlbmNvZGVyIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJjb2RlIiwiY2xlYXIiLCJjYiIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsU0FBU0MsUUFBUSxVQUFSLENBQWY7QUFDQSxJQUFNQyxlQUFlRCxRQUFRLGVBQVIsQ0FBckI7QUFDQSxJQUFNRSxZQUFZRixRQUFRLElBQVIsQ0FBbEI7QUFDQSxJQUFNRyxrQkFBa0JILFFBQVEsSUFBUixFQUFjSSxNQUF0QztBQUNBLElBQU1DLE1BQU1MLFFBQVEsVUFBUixDQUFaOztlQUM0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O0FBQ0Q7Ozs7RUFqSGtCMUQsWTs7QUFvSHJCMkQsT0FBT0MsT0FBUCxHQUFpQnpELE1BQWpCIiwiZmlsZSI6IlNlcnZlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4ndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9DbGllbnQnKVxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpXG5jb25zdCBXZWJTb2NrZXQgPSByZXF1aXJlKCd3cycpXG5jb25zdCBXZWJTb2NrZXRTZXJ2ZXIgPSByZXF1aXJlKCd3cycpLlNlcnZlclxuY29uc3QgdWlkID0gcmVxdWlyZSgndWlkLXNhZmUnKVxuY29uc3QgeyBDTE9TRV9GT1JCSURERU4gfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgYXNzaWduLCBhdHRlbXB0LCBmcm9tQ2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgV2ViU29ja2V0U2VydmVyLFxuICBjb25uZWN0aW9uSG9vazogbnVsbCxcbiAgYXV0aFRpbWVvdXQ6IDIwMDAwXG59XG5cbi8qKlxuICogQ29ubmVjdGlvbiBob29rIGlzIHJ1biB3aGVuIGEgY2xpZW50IGNvbm5lY3RzIHRvIGEgc2VydmVyLiBUaGVcbiAqIHJlc3VsdCBpcyB1c2VkIGFzIGFuIGF1dGggcmVwbHkgZGF0YS4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvclxuICogYW4gYXN5bmNocm9ub3VzIGV4ZWN1dGlvbi4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgb3IgYW4gZXJyb3JcbiAqIGlzIHRocm93biwgdGhlbiBhdXRoIGhhcyBmYWlsZWQgYW5kIHRoZSBzb2NrZXQgd2lsbCBiZSBjbG9zZWQuXG4gKlxuICogQGNhbGxiYWNrIFNlcnZlci5Db25uZWN0aW9uSG9va1xuICpcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnQgQ2xpZW50LlxuICogQHBhcmFtIHtPYmplY3R9IGF1dGggQXV0aCBkYXRhLlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3R8dW5kZWZpbmVkPnxPYmplY3R8dW5kZWZpbmVkfSBBdXRoIHJlcGx5XG4gKiBkYXRhLlxuICovXG4vKiA6OiB0eXBlIENvbm5lY3Rpb25Ib29rID0gKGNsaWVudDogQ2xpZW50LCBkYXRhPzogYW55KSA9PiBQcm9taXNlPGFueT4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJ2ZXIuU2VydmVyT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7U2VydmVyLkNvbm5lY3Rpb25Ib29rfSBbY29ubmVjdGlvbkhvb2tdIENvbm5lY3Rpb25cbiAqIGhvb2suXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1dlYlNvY2tldFNlcnZlcl0gQWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgZm9yIHdzXG4gKiBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2F1dGhUaW1lb3V0PTIwMDAwXSBBdXRoIG1lc3NhZ2Ugd2FpdCB0aW1lb3V0IGluXG4gKiBtcy5cbiAqL1xuLyogOjpcbnR5cGUgU2VydmVyT3B0aW9ucyA9IHsgV2ViU29ja2V0U2VydmVyPzogY29uc3RydWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Ib29rPzogQ29ubmVjdGlvbkhvb2ssXG4gICAgICAgICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0PzogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICB9XG4qL1xuXG4vKiA6OiB0eXBlIFNvY2tldE9wdGlvbnMgPSBPYmplY3QgKi9cblxuLyoqXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqXG4gKiBAZW1pdHMgU2VydmVyI3JlYWR5XG4gKiBAZW1pdHMgU2VydmVyI2Vycm9yXG4gKlxuICogQGJvcnJvd3MgQ2xpZW50I2VuY29kZU1lc3NhZ2UgYXMgI2VuY29kZU1lc3NhZ2VcbiAqL1xuY2xhc3MgU2VydmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyogOjpcbiAgYXV0aFRpbWVvdXQ6IG51bWJlclxuICBXZWJTb2NrZXRTZXJ2ZXI6IGNvbnN0cnVjdG9yXG4gIGNsaWVudHM6IE1hcDxzdHJpbmcsIE9iamVjdD5cbiAgY29ubmVjdGlvbkhvb2s6IENvbm5lY3Rpb25Ib29rXG4gIHNvY2tldE9wdGlvbnM6IE9iamVjdFxuICB3c3M6IE9iamVjdFxuICAgKi9cblxuICAvKipcbiAgICogU3RhcnRzIGEgc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gd3NzT3B0aW9ucyBPcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB3cyBzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7U2VydmVyLlNlcnZlck9wdGlvbnN9IFtzZXJ2ZXJPcHRpb25zXSBTZXJ2ZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtDbGllbnQuU29ja2V0T3B0aW9uc30gW3NvY2tldE9wdGlvbnNdIFNvY2tldCBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHdzc09wdGlvbnMgLyogOiBPYmplY3QgKi8sXG4gICAgICAgICAgICAgICBzZXJ2ZXJPcHRpb25zIC8qIDogU2VydmVyT3B0aW9ucyAqLyA9IHt9LFxuICAgICAgICAgICAgICAgc29ja2V0T3B0aW9ucyAvKiA6IFNvY2tldE9wdGlvbnMgICovID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zb2NrZXRPcHRpb25zID0geyBXZWJTb2NrZXQgfVxuICAgIGFzc2lnbih0aGlzLnNvY2tldE9wdGlvbnMsIHNvY2tldE9wdGlvbnMpXG4gICAgYXNzaWduKHRoaXMsIGRlZmF1bHRzLCBzZXJ2ZXJPcHRpb25zKVxuICAgIHRoaXMuY2xpZW50cyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX3NldEV2ZW50cyh3c3NPcHRpb25zKVxuICB9XG5cbiAgX3NldEV2ZW50cyAod3NzT3B0aW9ucyAvKiA6IE9iamVjdCAqLykgLyogOiB2b2lkICovIHtcbiAgICAvKipcbiAgICAgKiBFbWl0cyBhIHJlYWR5IGV2ZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGV2ZW50IFNlcnZlciNyZWFkeVxuICAgICAqL1xuICAgIHRoaXMud3NzID0gbmV3IHRoaXMuV2ViU29ja2V0U2VydmVyKHdzc09wdGlvbnMsIChlcnJvcikgPT4ge1xuICAgICAgZXJyb3IgPyB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpIDogdGhpcy5lbWl0KCdyZWFkeScpXG4gICAgfSlcbiAgICAvKipcbiAgICAgKiBFbWl0cyB3c3MgZXJyb3IgZXZlbnRzLiBEb2VzIG5vdCB0aHJvdyBpZiB0aGVyZSBhcmUgbm9cbiAgICAgKiBsaXN0ZW5lcnMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZXZlbnQgU2VydmVyI2Vycm9yXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgRXJyb3IuXG4gICAgICovXG4gICAgdGhpcy53c3Mub24oJ2Vycm9yJywgdGhpcy5lbWl0LmJpbmQodGhpcykpXG4gICAgdGhpcy53c3Mub24oJ2Nvbm5lY3Rpb24nLCBzb2NrZXQgPT4gdGhpcy5fb25Db25uZWN0aW9uKHNvY2tldCkpXG4gIH1cblxuICBfb25Db25uZWN0aW9uIChzb2NrZXQgLyogOiBPYmplY3QgJiBFdmVudEVtaXR0ZXIgKi8pIC8qIDogdm9pZCAqLyB7XG4gICAgbGV0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgc29ja2V0LmNsb3NlLmJpbmQoc29ja2V0LCBDTE9TRV9GT1JCSURERU4pLCB0aGlzLmF1dGhUaW1lb3V0KVxuICAgIHNvY2tldC5vbmNlKCdtZXNzYWdlJywgZGF0YSA9PiB0aGlzLl9hZGRDbGllbnQoc29ja2V0LCBkYXRhLCB0aW1lb3V0KSlcbiAgfVxuXG4gIF9hZGRDbGllbnQgKHNvY2tldCAvKiA6IEV2ZW50RW1pdHRlciAqLyxcbiAgICAgICAgICAgICAgZGF0YSAvKiA6IGFueSAqLyxcbiAgICAgICAgICAgICAgdGltZW91dCAvKiA6IG51bWJlciAqLykgLyogOiB2b2lkICovIHtcbiAgICBsZXQgY2xpZW50XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdWlkKDE4KS50aGVuKGlkID0+IHtcbiAgICAgIGNsaWVudCA9IG5ldyBDbGllbnQobnVsbCwgYXNzaWduKHtzb2NrZXQsIGlkfSwgdGhpcy5zb2NrZXRPcHRpb25zKSlcbiAgICAgIGNsaWVudC5hdXRvUmVjb25uZWN0ID0gZmFsc2VcbiAgICAgIHRoaXMuY2xpZW50cy5zZXQoY2xpZW50LmlkLCBjbGllbnQpXG4gICAgICBjbGllbnQub24oJ2Nsb3NlJywgKCkgPT4gdGhpcy5fcmVtb3ZlQ2xpZW50KGNsaWVudC5pZCkpXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uSG9vaykge1xuICAgICAgICByZXR1cm4gYXR0ZW1wdCgoKSA9PiBjbGllbnQuZGVjb2RlcihkYXRhKSlcbiAgICAgICAgICAudGhlbihhdXRoRGF0YSA9PiB0aGlzLmNvbm5lY3Rpb25Ib29rKGNsaWVudCwgYXV0aERhdGEpKVxuICAgICAgfVxuICAgIH0pLnRoZW4oYXV0aFJlcGx5RGF0YSA9PiB7XG4gICAgICBpZiAoY2xpZW50Ll9pc09wZW4oKSkge1xuICAgICAgICBjbGllbnQuX3NldEV2ZW50cygpXG4gICAgICAgIGNsaWVudC5jb25uZWN0ZWQgPSB0cnVlXG4gICAgICAgIGNsaWVudC5zZW5kKCdjb25uZWN0JywgYXV0aFJlcGx5RGF0YSlcbiAgICAgICAgY2xpZW50Ll9waW5nKClcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBsZXQgc3RyID0gZXJyb3IudG9TdHJpbmcoKVxuICAgICAgICBjbGllbnQuY2xvc2UoQ0xPU0VfRk9SQklEREVOLCBzdHIpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIF9yZW1vdmVDbGllbnQgKGlkIC8qIDogc3RyaW5nICovKSAvKiA6IHZvaWQgKi8ge1xuICAgIHRoaXMuY2xpZW50cy5kZWxldGUoaWQpXG4gIH1cblxuICAvKipcbiAgICogR2l0IGEgY2xpZW50IGJ5IGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgQ2xpZW50IGlkLlxuICAgKiBAcmV0dXJucyB7Q2xpZW50fHVuZGVmaW5lZH0gQ2xpZW50IGlmIGZvdW5kLlxuICAgKi9cbiAgZ2V0Q2xpZW50IChpZCAvKiA6IHN0cmluZyAqLykgLyogOiBDbGllbnQgKi8ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudHMuZ2V0KGlkKVxuICB9XG5cbiAgZW5jb2RlTWVzc2FnZSAoZXZlbnQgLyogOiBzdHJpbmcgKi8sIC4uLmFyZ3MgLyogOiBBcnJheTxhbnk+ICovKSAvKiA6IGFueSAqLyB7XG4gICAgbGV0IGVuY29kZXIgPSB0aGlzLnNvY2tldE9wdGlvbnMuZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeVxuICAgIHJldHVybiBhdHRlbXB0KCgpID0+IGVuY29kZXIoeyBuYW1lOiBldmVudCwgYXJncyB9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7Y29kZX0gW2NvZGU9MTAwMF0gQ29kZSBhcyBwZXIgV2ViU29ja2V0IHNwZWMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFByb21pc2UuXG4gICAqL1xuICBjbG9zZSAoY29kZSAvKiA6IG51bWJlciAqLyA9IDEwMDApIC8qIDogUHJvbWlzZTx2b2lkPiAqLyB7XG4gICAgZm9yIChsZXQgWywgY2xpZW50XSBvZiB0aGlzLmNsaWVudHMpIHtcbiAgICAgIGNsaWVudC5jbG9zZShjb2RlKVxuICAgIH1cbiAgICB0aGlzLmNsaWVudHMuY2xlYXIoKVxuICAgIHJldHVybiBmcm9tQ2FsbGJhY2soY2IgPT4gdGhpcy53c3MuY2xvc2UoY2IpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VydmVyXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXJ2ZXIuanMiXSwibmFtZXMiOlsiQ2xpZW50IiwicmVxdWlyZSIsIkV2ZW50RW1pdHRlciIsIldlYlNvY2tldCIsIldlYlNvY2tldFNlcnZlciIsIlNlcnZlciIsInVpZCIsIkNMT1NFX0ZPUkJJRERFTiIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJkZWZhdWx0cyIsImNvbm5lY3Rpb25Ib29rIiwiYXV0aFRpbWVvdXQiLCJ3c3NPcHRpb25zIiwic2VydmVyT3B0aW9ucyIsInNvY2tldE9wdGlvbnMiLCJjbGllbnRzIiwiTWFwIiwiX3NldEV2ZW50cyIsIndzcyIsImVycm9yIiwiZW1pdCIsIm9uIiwiYmluZCIsIl9vbkNvbm5lY3Rpb24iLCJzb2NrZXQiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImNsb3NlIiwib25jZSIsIl9hZGRDbGllbnQiLCJkYXRhIiwiY2xpZW50IiwiY2xlYXJUaW1lb3V0IiwidGhlbiIsImlkIiwiYXV0b1JlY29ubmVjdCIsInNldCIsIl9yZW1vdmVDbGllbnQiLCJkZWNvZGVyIiwiYXV0aERhdGEiLCJfaXNPcGVuIiwiY29ubmVjdGVkIiwic2VuZCIsImF1dGhSZXBseURhdGEiLCJfcGluZyIsImNhdGNoIiwic3RyIiwidG9TdHJpbmciLCJkZWxldGUiLCJnZXQiLCJldmVudCIsImFyZ3MiLCJlbmNvZGVyIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJjb2RlIiwiY2xlYXIiLCJjYiIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsU0FBU0MsUUFBUSxVQUFSLENBQWY7QUFDQSxJQUFNQyxlQUFlRCxRQUFRLGVBQVIsQ0FBckI7QUFDQSxJQUFNRSxZQUFZRixRQUFRLElBQVIsQ0FBbEI7QUFDQSxJQUFNRyxrQkFBa0JILFFBQVEsSUFBUixFQUFjSSxNQUF0QztBQUNBLElBQU1DLE1BQU1MLFFBQVEsVUFBUixDQUFaOztlQUM0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O0FBQ0Q7Ozs7RUFqSGtCMUQsWTs7QUFvSHJCMkQsT0FBT0MsT0FBUCxHQUFpQnpELE1BQWpCIiwiZmlsZSI6IlNlcnZlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4ndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9DbGllbnQnKVxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpXG5jb25zdCBXZWJTb2NrZXQgPSByZXF1aXJlKCd3cycpXG5jb25zdCBXZWJTb2NrZXRTZXJ2ZXIgPSByZXF1aXJlKCd3cycpLlNlcnZlclxuY29uc3QgdWlkID0gcmVxdWlyZSgndWlkLXNhZmUnKVxuY29uc3QgeyBDTE9TRV9GT1JCSURERU4gfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgYXNzaWduLCBhdHRlbXB0LCBmcm9tQ2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgV2ViU29ja2V0U2VydmVyLFxuICBjb25uZWN0aW9uSG9vazogbnVsbCxcbiAgYXV0aFRpbWVvdXQ6IDIwMDAwXG59XG5cbi8qKlxuICogQ29ubmVjdGlvbiBob29rIGlzIHJ1biB3aGVuIGEgY2xpZW50IGNvbm5lY3RzIHRvIGEgc2VydmVyLiBUaGVcbiAqIHJlc3VsdCBpcyB1c2VkIGFzIGFuIGF1dGggcmVwbHkgZGF0YS4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvclxuICogYW4gYXN5bmNocm9ub3VzIGV4ZWN1dGlvbi4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgb3IgYW4gZXJyb3JcbiAqIGlzIHRocm93biwgdGhlbiBhdXRoIGhhcyBmYWlsZWQgYW5kIHRoZSBzb2NrZXQgd2lsbCBiZSBjbG9zZWQuXG4gKlxuICogQGNhbGxiYWNrIFNlcnZlci5Db25uZWN0aW9uSG9va1xuICpcbiAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnQgQ2xpZW50LlxuICogQHBhcmFtIHtPYmplY3R9IGF1dGggQXV0aCBkYXRhLlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3R8dW5kZWZpbmVkPnxPYmplY3R8dW5kZWZpbmVkfSBBdXRoIHJlcGx5XG4gKiBkYXRhLlxuICovXG4vKiA6OiB0eXBlIENvbm5lY3Rpb25Ib29rID0gKGNsaWVudDogQ2xpZW50LCBkYXRhPzogYW55KSA9PiBQcm9taXNlPGFueT4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJ2ZXIuU2VydmVyT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7U2VydmVyLkNvbm5lY3Rpb25Ib29rfSBbY29ubmVjdGlvbkhvb2tdIENvbm5lY3Rpb25cbiAqIGhvb2suXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1dlYlNvY2tldFNlcnZlcl0gQWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgZm9yIHdzXG4gKiBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2F1dGhUaW1lb3V0PTIwMDAwXSBBdXRoIG1lc3NhZ2Ugd2FpdCB0aW1lb3V0IGluXG4gKiBtcy5cbiAqL1xuLyogOjpcbnR5cGUgU2VydmVyT3B0aW9ucyA9IHsgV2ViU29ja2V0U2VydmVyPzogY29uc3RydWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Ib29rPzogQ29ubmVjdGlvbkhvb2ssXG4gICAgICAgICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0PzogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICB9XG4qL1xuXG4vKiA6OiB0eXBlIFNvY2tldE9wdGlvbnMgPSBPYmplY3QgKi9cblxuLyoqXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqXG4gKiBAZW1pdHMgU2VydmVyI3JlYWR5XG4gKiBAZW1pdHMgU2VydmVyI2Vycm9yXG4gKlxuICogQGJvcnJvd3MgQ2xpZW50I2VuY29kZU1lc3NhZ2UgYXMgI2VuY29kZU1lc3NhZ2VcbiAqL1xuY2xhc3MgU2VydmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyogOjpcbiAgYXV0aFRpbWVvdXQ6IG51bWJlclxuICBXZWJTb2NrZXRTZXJ2ZXI6IGNvbnN0cnVjdG9yXG4gIGNsaWVudHM6IE1hcDxzdHJpbmcsIE9iamVjdD5cbiAgY29ubmVjdGlvbkhvb2s6IENvbm5lY3Rpb25Ib29rXG4gIHNvY2tldE9wdGlvbnM6IE9iamVjdFxuICB3c3M6IE9iamVjdFxuICAgKi9cblxuICAvKipcbiAgICogU3RhcnRzIGEgc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gd3NzT3B0aW9ucyBPcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB3cyBzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7U2VydmVyLlNlcnZlck9wdGlvbnN9IFtzZXJ2ZXJPcHRpb25zXSBTZXJ2ZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtDbGllbnQuU29ja2V0T3B0aW9uc30gW3NvY2tldE9wdGlvbnNdIFNvY2tldCBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHdzc09wdGlvbnMgLyogOiBPYmplY3QgKi8sXG4gICAgc2VydmVyT3B0aW9ucyAvKiA6IFNlcnZlck9wdGlvbnMgKi8gPSB7fSxcbiAgICBzb2NrZXRPcHRpb25zIC8qIDogU29ja2V0T3B0aW9ucyAgKi8gPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNvY2tldE9wdGlvbnMgPSB7IFdlYlNvY2tldCB9XG4gICAgYXNzaWduKHRoaXMuc29ja2V0T3B0aW9ucywgc29ja2V0T3B0aW9ucylcbiAgICBhc3NpZ24odGhpcywgZGVmYXVsdHMsIHNlcnZlck9wdGlvbnMpXG4gICAgdGhpcy5jbGllbnRzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fc2V0RXZlbnRzKHdzc09wdGlvbnMpXG4gIH1cblxuICBfc2V0RXZlbnRzICh3c3NPcHRpb25zIC8qIDogT2JqZWN0ICovKSAvKiA6IHZvaWQgKi8ge1xuICAgIC8qKlxuICAgICAqIEVtaXRzIGEgcmVhZHkgZXZlbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZXZlbnQgU2VydmVyI3JlYWR5XG4gICAgICovXG4gICAgdGhpcy53c3MgPSBuZXcgdGhpcy5XZWJTb2NrZXRTZXJ2ZXIod3NzT3B0aW9ucywgKGVycm9yKSA9PiB7XG4gICAgICBlcnJvciA/IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikgOiB0aGlzLmVtaXQoJ3JlYWR5JylcbiAgICB9KVxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdzcyBlcnJvciBldmVudHMuIERvZXMgbm90IHRocm93IGlmIHRoZXJlIGFyZSBub1xuICAgICAqIGxpc3RlbmVycy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBldmVudCBTZXJ2ZXIjZXJyb3JcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICB0aGlzLndzcy5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzKSlcbiAgICB0aGlzLndzcy5vbignY29ubmVjdGlvbicsIHNvY2tldCA9PiB0aGlzLl9vbkNvbm5lY3Rpb24oc29ja2V0KSlcbiAgfVxuXG4gIF9vbkNvbm5lY3Rpb24gKHNvY2tldCAvKiA6IE9iamVjdCAmIEV2ZW50RW1pdHRlciAqLykgLyogOiB2b2lkICovIHtcbiAgICBsZXQgdGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICBzb2NrZXQuY2xvc2UuYmluZChzb2NrZXQsIENMT1NFX0ZPUkJJRERFTiksIHRoaXMuYXV0aFRpbWVvdXQpXG4gICAgc29ja2V0Lm9uY2UoJ21lc3NhZ2UnLCBkYXRhID0+IHRoaXMuX2FkZENsaWVudChzb2NrZXQsIGRhdGEsIHRpbWVvdXQpKVxuICB9XG5cbiAgX2FkZENsaWVudCAoc29ja2V0IC8qIDogRXZlbnRFbWl0dGVyICovLFxuICAgIGRhdGEgLyogOiBhbnkgKi8sXG4gICAgdGltZW91dCAvKiA6IG51bWJlciAqLykgLyogOiB2b2lkICovIHtcbiAgICBsZXQgY2xpZW50XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdWlkKDE4KS50aGVuKGlkID0+IHtcbiAgICAgIGNsaWVudCA9IG5ldyBDbGllbnQobnVsbCwgYXNzaWduKHtzb2NrZXQsIGlkfSwgdGhpcy5zb2NrZXRPcHRpb25zKSlcbiAgICAgIGNsaWVudC5hdXRvUmVjb25uZWN0ID0gZmFsc2VcbiAgICAgIHRoaXMuY2xpZW50cy5zZXQoY2xpZW50LmlkLCBjbGllbnQpXG4gICAgICBjbGllbnQub24oJ2Nsb3NlJywgKCkgPT4gdGhpcy5fcmVtb3ZlQ2xpZW50KGNsaWVudC5pZCkpXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uSG9vaykge1xuICAgICAgICByZXR1cm4gYXR0ZW1wdCgoKSA9PiBjbGllbnQuZGVjb2RlcihkYXRhKSlcbiAgICAgICAgICAudGhlbihhdXRoRGF0YSA9PiB0aGlzLmNvbm5lY3Rpb25Ib29rKGNsaWVudCwgYXV0aERhdGEpKVxuICAgICAgfVxuICAgIH0pLnRoZW4oYXV0aFJlcGx5RGF0YSA9PiB7XG4gICAgICBpZiAoY2xpZW50Ll9pc09wZW4oKSkge1xuICAgICAgICBjbGllbnQuX3NldEV2ZW50cygpXG4gICAgICAgIGNsaWVudC5jb25uZWN0ZWQgPSB0cnVlXG4gICAgICAgIGNsaWVudC5zZW5kKCdjb25uZWN0JywgYXV0aFJlcGx5RGF0YSlcbiAgICAgICAgY2xpZW50Ll9waW5nKClcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBsZXQgc3RyID0gZXJyb3IudG9TdHJpbmcoKVxuICAgICAgICBjbGllbnQuY2xvc2UoQ0xPU0VfRk9SQklEREVOLCBzdHIpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIF9yZW1vdmVDbGllbnQgKGlkIC8qIDogc3RyaW5nICovKSAvKiA6IHZvaWQgKi8ge1xuICAgIHRoaXMuY2xpZW50cy5kZWxldGUoaWQpXG4gIH1cblxuICAvKipcbiAgICogR2l0IGEgY2xpZW50IGJ5IGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgQ2xpZW50IGlkLlxuICAgKiBAcmV0dXJucyB7Q2xpZW50fHVuZGVmaW5lZH0gQ2xpZW50IGlmIGZvdW5kLlxuICAgKi9cbiAgZ2V0Q2xpZW50IChpZCAvKiA6IHN0cmluZyAqLykgLyogOiBDbGllbnQgKi8ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudHMuZ2V0KGlkKVxuICB9XG5cbiAgZW5jb2RlTWVzc2FnZSAoZXZlbnQgLyogOiBzdHJpbmcgKi8sIC4uLmFyZ3MgLyogOiBBcnJheTxhbnk+ICovKSAvKiA6IGFueSAqLyB7XG4gICAgbGV0IGVuY29kZXIgPSB0aGlzLnNvY2tldE9wdGlvbnMuZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeVxuICAgIHJldHVybiBhdHRlbXB0KCgpID0+IGVuY29kZXIoeyBuYW1lOiBldmVudCwgYXJncyB9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7Y29kZX0gW2NvZGU9MTAwMF0gQ29kZSBhcyBwZXIgV2ViU29ja2V0IHNwZWMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFByb21pc2UuXG4gICAqL1xuICBjbG9zZSAoY29kZSAvKiA6IG51bWJlciAqLyA9IDEwMDApIC8qIDogUHJvbWlzZTx2b2lkPiAqLyB7XG4gICAgZm9yIChsZXQgWywgY2xpZW50XSBvZiB0aGlzLmNsaWVudHMpIHtcbiAgICAgIGNsaWVudC5jbG9zZShjb2RlKVxuICAgIH1cbiAgICB0aGlzLmNsaWVudHMuY2xlYXIoKVxuICAgIHJldHVybiBmcm9tQ2FsbGJhY2soY2IgPT4gdGhpcy53c3MuY2xvc2UoY2IpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VydmVyXG4iXX0=

@@ -42,2 +42,2 @@ 'use strict';

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsImFzc2lnbiIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImF0dGVtcHQiLCJmbiIsInJlc29sdmUiLCJ0aGVuIiwiZnJvbUNhbGxiYWNrIiwicmVqZWN0IiwiZXJyb3IiLCJyZXN1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxJQUFNQSxVQUFVQyxRQUFRLGtCQUFSLENBQWhCOztBQUVBLFNBQVNDLE1BQVQsQ0FBaUJDLE1BQWpCLEVBQXlCO0FBQ3ZCLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJQyxVQUFVQyxNQUE5QixFQUFzQ0YsR0FBdEMsRUFBMkM7QUFDekMsUUFBSUcsU0FBU0YsVUFBVUQsQ0FBVixDQUFiO0FBQ0EsUUFBSSxDQUFDRyxNQUFMLEVBQWE7QUFBRTtBQUFVO0FBQ3pCLFNBQUssSUFBSUMsR0FBVCxJQUFnQkQsTUFBaEIsRUFBd0I7QUFFdEIsVUFBSUEsT0FBT0UsY0FBUCxDQUFzQkQsR0FBdEIsQ0FBSixFQUFnQztBQUM5QkwsZUFBT0ssR0FBUCxJQUFjRCxPQUFPQyxHQUFQLENBQWQ7QUFDRDtBQUNGO0FBQ0Y7QUFDRCxTQUFPTCxNQUFQO0FBQ0Q7O0FBRUQsU0FBU08sT0FBVCxDQUFrQkMsRUFBbEIsRUFBc0I7QUFDcEIsU0FBT1gsUUFBUVksT0FBUixHQUFrQkMsSUFBbEIsQ0FBdUJGLEVBQXZCLENBQVA7QUFDRDs7QUFFRCxTQUFTRyxZQUFULENBQXVCSCxFQUF2QixFQUEyQjtBQUN6QixTQUFPLElBQUlYLE9BQUosQ0FBWSxVQUFDWSxPQUFELEVBQVVHLE1BQVYsRUFBcUI7QUFDdENKLE9BQUcsVUFBQ0ssS0FBRCxFQUFRQyxNQUFSLEVBQW1CO0FBQ3BCLFVBQUlELEtBQUosRUFBVztBQUNURCxlQUFPQyxLQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0xKLGdCQUFRSyxNQUFSO0FBQ0Q7QUFDRixLQU5EO0FBT0QsR0FSTSxDQUFQO0FBU0Q7O0FBRURDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZmpCLGdCQURlO0FBRWZRLGtCQUZlO0FBR2ZJLDRCQUhlO0FBSWZkO0FBSmUsQ0FBakIiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UtcG9seWZpbGwnKVxuXG5mdW5jdGlvbiBhc3NpZ24gKHRhcmdldCkge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBzb3VyY2UgPSBhcmd1bWVudHNbaV1cbiAgICBpZiAoIXNvdXJjZSkgeyBjb250aW51ZSB9XG4gICAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdCAoZm4pIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pXG59XG5cbmZ1bmN0aW9uIGZyb21DYWxsYmFjayAoZm4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmbigoZXJyb3IsIHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NpZ24sXG4gIGF0dGVtcHQsXG4gIGZyb21DYWxsYmFjayxcbiAgUHJvbWlzZVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsImFzc2lnbiIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImF0dGVtcHQiLCJmbiIsInJlc29sdmUiLCJ0aGVuIiwiZnJvbUNhbGxiYWNrIiwicmVqZWN0IiwiZXJyb3IiLCJyZXN1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxJQUFNQSxVQUFVQyxRQUFRLGtCQUFSLENBQWhCOztBQUVBLFNBQVNDLE1BQVQsQ0FBaUJDLE1BQWpCLEVBQXlCO0FBQ3ZCLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJQyxVQUFVQyxNQUE5QixFQUFzQ0YsR0FBdEMsRUFBMkM7QUFDekMsUUFBSUcsU0FBU0YsVUFBVUQsQ0FBVixDQUFiO0FBQ0EsUUFBSSxDQUFDRyxNQUFMLEVBQWE7QUFBRTtBQUFVO0FBQ3pCLFNBQUssSUFBSUMsR0FBVCxJQUFnQkQsTUFBaEIsRUFBd0I7QUFFdEIsVUFBSUEsT0FBT0UsY0FBUCxDQUFzQkQsR0FBdEIsQ0FBSixFQUFnQztBQUM5QkwsZUFBT0ssR0FBUCxJQUFjRCxPQUFPQyxHQUFQLENBQWQ7QUFDRDtBQUNGO0FBQ0Y7QUFDRCxTQUFPTCxNQUFQO0FBQ0Q7O0FBRUQsU0FBU08sT0FBVCxDQUFrQkMsRUFBbEIsRUFBc0I7QUFDcEIsU0FBT1gsUUFBUVksT0FBUixHQUFrQkMsSUFBbEIsQ0FBdUJGLEVBQXZCLENBQVA7QUFDRDs7QUFFRCxTQUFTRyxZQUFULENBQXVCSCxFQUF2QixFQUEyQjtBQUN6QixTQUFPLElBQUlYLE9BQUosQ0FBWSxVQUFDWSxPQUFELEVBQVVHLE1BQVYsRUFBcUI7QUFDdENKLE9BQUcsVUFBQ0ssS0FBRCxFQUFRQyxNQUFSLEVBQW1CO0FBQ3BCLFVBQUlELEtBQUosRUFBVztBQUNURCxlQUFPQyxLQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0xKLGdCQUFRSyxNQUFSO0FBQ0Q7QUFDRixLQU5EO0FBT0QsR0FSTSxDQUFQO0FBU0Q7O0FBRURDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZmpCLGdCQURlO0FBRWZRLGtCQUZlO0FBR2ZJLDRCQUhlO0FBSWZkO0FBSmUsQ0FBakIiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UtcG9seWZpbGwnKVxuXG5mdW5jdGlvbiBhc3NpZ24gKHRhcmdldCkge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBzb3VyY2UgPSBhcmd1bWVudHNbaV1cbiAgICBpZiAoIXNvdXJjZSkgeyBjb250aW51ZSB9XG4gICAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdCAoZm4pIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pXG59XG5cbmZ1bmN0aW9uIGZyb21DYWxsYmFjayAoZm4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmbigoZXJyb3IsIHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NpZ24sXG4gIGF0dGVtcHQsXG4gIGZyb21DYWxsYmFjayxcbiAgUHJvbWlzZVxufVxuIl19
{
"name": "ws-messaging",
"version": "0.7.2",
"version": "0.8.0",
"description": "A minimalistic abstraction layer for websockets.",

@@ -14,3 +14,3 @@ "main": "index.js",

"generate-docs": "jsdoc --configure .jsdoc.json --verbose",
"prepublish": "npm run bundle-client",
"prepare": "npm run bundle-client",
"pretest": "npm run compile",

@@ -37,7 +37,7 @@ "test": "nyc mocha"

"dependencies": {
"eventemitter3": "^2.0.0",
"promise-polyfill": "^6.0.2",
"eventemitter3": "^3.0.0",
"promise-polyfill": "^7.0.0",
"semver": "^5.3.0",
"uid-safe": "^2.1.2",
"ws": "^1.1.1"
"ws": "^3.3.3"
},

@@ -47,14 +47,14 @@ "devDependencies": {

"babel-preset-es2015": "^6.14.0",
"browserify": "^13.1.0",
"chai": "^3.5.0",
"codecov": "^1.0.1",
"browserify": "^15.0.0",
"chai": "^4.1.2",
"codecov": "^3.0.0",
"docdash": "^0.4.0",
"event-to-promise": "^0.7.0",
"event-to-promise": "^0.8.0",
"jsdoc": "^3.4.1",
"mocha": "^3.0.2",
"mocha": "^4.1.0",
"msgpack-lite": "^0.1.20",
"nyc": "^10.0.0",
"safe-buffer": "^5.0.1",
"standard": "^8.0.0",
"uglifyify": "^3.0.3"
"nyc": "^11.4.1",
"safe-buffer": "^5.1.1",
"standard": "^10.0.3",
"uglifyify": "^4.0.5"
},

@@ -61,0 +61,0 @@ "nyc": {

@@ -81,3 +81,3 @@ # ws-messaging

let client = new Client(url, auth)
let client = new Client(url, {auth})

@@ -84,0 +84,0 @@ client.on('someEvent', (...data) => { /* do smth */ })

@@ -223,3 +223,3 @@ 'use strict'

* @property {Client.ReceiveHook} [receiveHook] Receive hook.
* @property {Client.SendHook} [SendHook] Send hook.
* @property {Client.SendHook} [rendHook] Send hook.
* @property {boolean} [skipValidation=false] Skips build-in

@@ -571,2 +571,3 @@ * messages validation.

if (this._isOpen()) {
// eslint-disable-next-line no-useless-return
return

@@ -573,0 +574,0 @@ } else if (this.WebSocket && this.url) {

@@ -78,4 +78,4 @@ // @flow

constructor (wssOptions /* : Object */,
serverOptions /* : ServerOptions */ = {},
socketOptions /* : SocketOptions */ = {}) {
serverOptions /* : ServerOptions */ = {},
socketOptions /* : SocketOptions */ = {}) {
super()

@@ -116,4 +116,4 @@ this.socketOptions = { WebSocket }

_addClient (socket /* : EventEmitter */,
data /* : any */,
timeout /* : number */) /* : void */ {
data /* : any */,
timeout /* : number */) /* : void */ {
let client

@@ -120,0 +120,0 @@ clearTimeout(timeout)

'use strict'
/* eslint-env mocha */
/* eslint-disable no-unused-expressions */

@@ -393,3 +394,3 @@ const semver = require('semver')

server = new Server({port}, {connectionHook},
{pingInterval: 1000, pingTimeout: 1000})
{pingInterval: 1000, pingTimeout: 1000})
client = new Client(url, {WebSocket, autoReconnect: false})

@@ -396,0 +397,0 @@ return eventToPromise(client, 'connect')

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.wsMessaging = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function isBlacklistedEvent(e){return blacklist.indexOf(e)>=0}function getOwnProp(e,t){return e.hasOwnProperty(t)?e[t]:void 0}function ConnectionError(e){this.name="ConnectionError",this.id=e}function TimeoutError(e){this.name="TimeoutError",this.id=e}function NoProcedureError(e){this.name="NoProcedureError",this.procedure=e}function validateId(e){return"number"==typeof e&&e%1===0&&e>0}function validate(e){var t=!1;if(e instanceof Object)if(e.name){if("string"==typeof e.name&&e.args instanceof Array){var n=Object.keys(e).length;(2===n||3===n&&validateId(e.id))&&(t=!0)}}else{var r=Object.keys(e).length;2===r&&validateId(e.id)&&(e.hasOwnProperty("error")||e.hasOwnProperty("result"))&&(t=!0)}if(!t)throw new Error("Validation error")}var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),EventEmitter=require("eventemitter3"),_require=require("./utils"),assign=_require.assign,attempt=_require.attempt,fromCallback=_require.fromCallback,Promise=_require.Promise,blacklist=["close","open","error","pong","retry"],concat=[].concat.bind([]),emit=EventEmitter.prototype.emit;ConnectionError.prototype=Object.create(Error.prototype),TimeoutError.prototype=Object.create(Error.prototype),NoProcedureError.prototype=Object.create(Error.prototype);var Ack=function(){function e(t,n,r){var o=this;_classCallCheck(this,e),this.id=t,this.promise=new Promise(function(e,t){o.resolve=e,o.reject=t}),this.cb=r,this.timeout=setTimeout(function(){return o.forceNack(new TimeoutError(t))},n)}return _createClass(e,[{key:"forceNack",value:function(e){clearTimeout(this.timeout),this.cb(),this.reject(e)}},{key:"settle",value:function(e){clearTimeout(this.timeout),this.cb(),e.hasOwnProperty("error")?this.reject(e.error):this.resolve(e.result)}}]),e}(),retryConfig={factor:2,maxTimeout:1/0,minTimeout:1e3,randomize:!0,retries:10},defaults={ackTimeout:2e4,auth:{},autoReconnect:!0,autoReconnectOptions:retryConfig,binaryType:"arraybuffer",decoder:JSON.parse,encoder:JSON.stringify,errorFormatter:String,pingInterval:2e4,pingTimeout:2e4,protocols:"ws-messaging",receiveHook:null,sendHook:null,skipValidation:!1,WebSocket:void 0,w3c:void 0,wsOptions:void 0},Client=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.url=e,assign(r,defaults,n),r.retryConfig={},assign(r.retryConfig,retryConfig,n.autoReconnectOptions),r.WebSocket||(r.WebSocket=WebSocket,r.w3c=void 0===r.w3c||r.w3c),r.connected=!1,r.counter=1,r.data={},r.handlers={},r.pendingAcks={},r.attempt=0,r.terminated=!1,r.register("ping",function(){return Promise.resolve()}),r.reconnect(),r}return _inherits(t,e),_createClass(t,[{key:"_onMessage",value:function(e){var t=this,n=void 0;attempt(function(){return t.decoder(e.data)}).then(function(e){n=e}).then(function(){t.skipValidation||validate(n)}).then(function(){if(t.receiveHook)return t.receiveHook(n)}).then(function(){return t._dispatch(n)}).catch(function(e){return t.send("preprocessingError",t.errorFormatter(e))})}},{key:"_setEvents",value:function(){this.socket.onopen=emit.bind(this,"open"),this.socket.onerror=emit.bind(this,"error"),this.socket.onclose=this._onClose.bind(this),this.socket.onmessage=this._onMessage.bind(this)}},{key:"_ping",value:function(){var e=this;this.pingTimeoutId=setTimeout(function(){emit.call(e,"ping");var t=e.pingTimeout,n=e._makeMessage("ping",[],!0,t),r=n.message,o=n.promise;e._send(r).then(function(){return o}).then(function(){return emit.call(e,"pong")}).then(function(){return e._ping()}).catch(function(){return e.close(4008,"Ping timeout",!1)})},this.pingInterval)}},{key:"_isOpen",value:function(){return this.socket&&(0===this.socket.readyState||1===this.socket.readyState)}},{key:"_reconnect",value:function(){var e=this.retryConfig,t=e.factor,n=e.maxTimeout,r=e.minTimeout,o=e.randomize,i=e.retries;if(!(this.attempt>=i||this.terminated)){var s=1+(o?Math.random():0),c=Math.min(s*r*Math.pow(t,this.attempt),n);this.reconnectTimeoutId=setTimeout(this.reconnect.bind(this),c),this.attempt++}}},{key:"_open",value:function(){var e=this;clearTimeout(this.reconnectTimeoutId),this.socket=new this.WebSocket(this.url,this.protocols,this.wsOptions),this.w3c&&(this.socket.binaryType=this.binaryType),this.connectHandler=function(){e.connected=!0,e.attempt=0,clearTimeout(e.authTimeoutId),e._ping()},this.openHandler=function(){e._send(e.auth,{isAuth:!0}),e.authTimeoutId=setTimeout(e.close.bind(e,4008,"Auth timeout",!1),e.ackTimeout),e.once("connect",e.connectHandler)},this.once("open",this.openHandler),this._setEvents(),this.attempt>0&&emit.call(this,"retry",this.attempt)}},{key:"_onClose",value:function(e){this.connected=!1,clearTimeout(this.pingTimeoutId),clearTimeout(this.authTimeoutId),clearTimeout(this.reconnectTimeoutId),this.off("connect",this.connectHandler),this.off("open",this.openHandler),4003!==e.code&&this.url||(this.terminated=!0);for(var t in this.pendingAcks)if(this.pendingAcks.hasOwnProperty(t)){var n=this.pendingAcks[t];n.forceNack(new ConnectionError(t))}this.pendingAcks={},!this.terminated&&this.autoReconnect&&this._reconnect(),emit.call(this,"close",e)}},{key:"_makeMessage",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.ackTimeout,i=void 0,s=void 0;return s={name:e,args:t},n&&!function(){var e=r.counter++,t=new Ack(e,o,function(){return delete r.pendingAcks[e]});r.pendingAcks[e]=t,i=t.promise,s.id=e}(),{message:s,promise:i}}},{key:"_dispatch",value:function(e){var t=this;if(e.name){if(isBlacklistedEvent(e.name))return;if("connect"===e.name&&this.connected)return;e.id?!function(){var n=e.id,r=getOwnProp(t.handlers,e.name);if(r)attempt(function(){return r.apply(null,e.args)}).then(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return t._send({id:n,result:e})}).catch(function(e){return t._send({id:n,error:t.errorFormatter(e)})});else{var o=t.errorFormatter(new NoProcedureError(e.name));t._send({id:n,error:o})}}():emit.apply(this,concat(e.name,e.args))}else{var n=this.pendingAcks[e.id];n&&n.settle(e)}}},{key:"_send",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.skipEncoder,o=void 0!==r&&r,i=n.isAuth,s=void 0!==i&&i;return attempt(function(){return t.sendHook?t.sendHook(e,o):null}).then(function(){return o?e:t.encoder(e)}).then(function(n){if(!t.connected&&!s){var r=o?void 0:e.id;throw new ConnectionError(r)}if(t.w3c)return t.socket.send(n);var i=function(){var e="string"!=typeof n;return{v:fromCallback(function(r){return t.socket.send(n,{binary:e},r)})}}();return"object"===("undefined"==typeof i?"undefined":_typeof(i))?i.v:void 0})}},{key:"send",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=this._makeMessage(e,n,!1),i=o.message;return this._send(i)}},{key:"sendEncoded",value:function(e){return this._send(e,{skipEncoder:!0})}},{key:"encodeMessage",value:function(e){for(var t=this,n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];var i=this._makeMessage(e,r,!1),s=i.message;return attempt(function(){return t.encoder(s)})}},{key:"invoke",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=this._makeMessage(e,n,!0),i=o.message,s=o.promise;return this._send(i).then(function(){return s})}},{key:"register",value:function(e,t){if(getOwnProp(this.handlers,e))throw new Error("Can't register a duplicate RPC handler for "+e);this.handlers[e]=t}},{key:"reconnect",value:function(){if(this.terminated=!1,!this._isOpen()){if(!this.WebSocket||!this.url)throw new Error("Malformed configuration options");this._open()}}},{key:"close",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3,t=arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];this.terminated||(this.terminated=n,this._isOpen()&&this.socket.close(e,t))}}]),t}(EventEmitter);Client.prototype.emit=Client.prototype.send,Client.prototype.emitEncoded=Client.prototype.sendEncoded,Client.ConnectionError=ConnectionError,Client.NoProcedureError=NoProcedureError,Client.TimeoutError=TimeoutError,module.exports=Client;
"use strict";var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var EventEmitter=require("eventemitter3"),_require=require("./utils"),assign=_require.assign,attempt=_require.attempt,fromCallback=_require.fromCallback,Promise=_require.Promise,blacklist=["close","open","error","pong","retry"],concat=[].concat.bind([]),emit=EventEmitter.prototype.emit;function isBlacklistedEvent(e){return blacklist.indexOf(e)>=0}function getOwnProp(e,t){return e.hasOwnProperty(t)?e[t]:void 0}function ConnectionError(e){this.name="ConnectionError",this.id=e}ConnectionError.prototype=Object.create(Error.prototype);function TimeoutError(e){this.name="TimeoutError",this.id=e}TimeoutError.prototype=Object.create(Error.prototype);function NoProcedureError(e){this.name="NoProcedureError",this.procedure=e}NoProcedureError.prototype=Object.create(Error.prototype);function validateId(e){return"number"==typeof e&&e%1==0&&e>0}function validate(e){var t=!1;if(e instanceof Object)if(e.name){if("string"==typeof e.name&&e.args instanceof Array){var n=Object.keys(e).length;(2===n||3===n&&validateId(e.id))&&(t=!0)}}else{2===Object.keys(e).length&&validateId(e.id)&&(e.hasOwnProperty("error")||e.hasOwnProperty("result"))&&(t=!0)}if(!t)throw new Error("Validation error")}var Ack=function(){function e(t,n,r){var i=this;_classCallCheck(this,e),this.id=t,this.promise=new Promise(function(e,t){i.resolve=e,i.reject=t}),this.cb=r,this.timeout=setTimeout(function(){return i.forceNack(new TimeoutError(t))},n)}return _createClass(e,[{key:"forceNack",value:function(e){clearTimeout(this.timeout),this.cb(),this.reject(e)}},{key:"settle",value:function(e){clearTimeout(this.timeout),this.cb(),e.hasOwnProperty("error")?this.reject(e.error):this.resolve(e.result)}}]),e}(),retryConfig={factor:2,maxTimeout:1/0,minTimeout:1e3,randomize:!0,retries:10},defaults={ackTimeout:2e4,auth:{},autoReconnect:!0,autoReconnectOptions:retryConfig,binaryType:"arraybuffer",decoder:JSON.parse,encoder:JSON.stringify,errorFormatter:String,pingInterval:2e4,pingTimeout:2e4,protocols:"ws-messaging",receiveHook:null,sendHook:null,skipValidation:!1,WebSocket:void 0,w3c:void 0,wsOptions:void 0},Client=function(e){_inherits(t,EventEmitter);function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.url=e,assign(r,defaults,n),r.retryConfig={},assign(r.retryConfig,retryConfig,n.autoReconnectOptions),r.WebSocket||(r.WebSocket=WebSocket,r.w3c=void 0===r.w3c||r.w3c),r.connected=!1,r.counter=1,r.data={},r.handlers={},r.pendingAcks={},r.attempt=0,r.terminated=!1,r.register("ping",function(){return Promise.resolve()}),r.reconnect(),r}return _createClass(t,[{key:"_onMessage",value:function(e){var t=this,n=void 0;attempt(function(){return t.decoder(e.data)}).then(function(e){n=e}).then(function(){t.skipValidation||validate(n)}).then(function(){if(t.receiveHook)return t.receiveHook(n)}).then(function(){return t._dispatch(n)}).catch(function(e){return t.send("preprocessingError",t.errorFormatter(e))})}},{key:"_setEvents",value:function(){this.socket.onopen=emit.bind(this,"open"),this.socket.onerror=emit.bind(this,"error"),this.socket.onclose=this._onClose.bind(this),this.socket.onmessage=this._onMessage.bind(this)}},{key:"_ping",value:function(){var e=this;this.pingTimeoutId=setTimeout(function(){emit.call(e,"ping");var t=e.pingTimeout,n=e._makeMessage("ping",[],!0,t),r=n.message,i=n.promise;e._send(r).then(function(){return i}).then(function(){return emit.call(e,"pong")}).then(function(){return e._ping()}).catch(function(){return e.close(4008,"Ping timeout",!1)})},this.pingInterval)}},{key:"_isOpen",value:function(){return this.socket&&(0===this.socket.readyState||1===this.socket.readyState)}},{key:"_reconnect",value:function(){var e=this.retryConfig,t=e.factor,n=e.maxTimeout,r=e.minTimeout,i=e.randomize,o=e.retries;if(!(this.attempt>=o||this.terminated)){var s=1+(i?Math.random():0),c=Math.min(s*r*Math.pow(t,this.attempt),n);this.reconnectTimeoutId=setTimeout(this.reconnect.bind(this),c),this.attempt++}}},{key:"_open",value:function(){var e=this;clearTimeout(this.reconnectTimeoutId),this.socket=new this.WebSocket(this.url,this.protocols,this.wsOptions),this.w3c&&(this.socket.binaryType=this.binaryType),this.connectHandler=function(){e.connected=!0,e.attempt=0,clearTimeout(e.authTimeoutId),e._ping()},this.openHandler=function(){e._send(e.auth,{isAuth:!0}),e.authTimeoutId=setTimeout(e.close.bind(e,4008,"Auth timeout",!1),e.ackTimeout),e.once("connect",e.connectHandler)},this.once("open",this.openHandler),this._setEvents(),this.attempt>0&&emit.call(this,"retry",this.attempt)}},{key:"_onClose",value:function(e){this.connected=!1,clearTimeout(this.pingTimeoutId),clearTimeout(this.authTimeoutId),clearTimeout(this.reconnectTimeoutId),this.off("connect",this.connectHandler),this.off("open",this.openHandler),4003!==e.code&&this.url||(this.terminated=!0);for(var t in this.pendingAcks)if(this.pendingAcks.hasOwnProperty(t)){this.pendingAcks[t].forceNack(new ConnectionError(t))}this.pendingAcks={},!this.terminated&&this.autoReconnect&&this._reconnect(),emit.call(this,"close",e)}},{key:"_makeMessage",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.ackTimeout,o=void 0,s=void 0;if(s={name:e,args:t},n){var c=this.counter++,a=new Ack(c,i,function(){return delete r.pendingAcks[c]});this.pendingAcks[c]=a,o=a.promise,s.id=c}return{message:s,promise:o}}},{key:"_dispatch",value:function(e){var t=this;if(e.name){if(isBlacklistedEvent(e.name))return;if("connect"===e.name&&this.connected)return;if(e.id){var n=e.id,r=getOwnProp(this.handlers,e.name);if(r)attempt(function(){return r.apply(null,e.args)}).then(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return t._send({id:n,result:e})}).catch(function(e){return t._send({id:n,error:t.errorFormatter(e)})});else{var i=this.errorFormatter(new NoProcedureError(e.name));this._send({id:n,error:i})}}else emit.apply(this,concat(e.name,e.args))}else{var o=this.pendingAcks[e.id];o&&o.settle(e)}}},{key:"_send",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.skipEncoder,i=void 0!==r&&r,o=n.isAuth,s=void 0!==o&&o;return attempt(function(){return t.sendHook?t.sendHook(e,i):null}).then(function(){return i?e:t.encoder(e)}).then(function(n){if(!t.connected&&!s){throw new ConnectionError(i?void 0:e.id)}if(t.w3c)return t.socket.send(n);var r="string"!=typeof n;return fromCallback(function(e){return t.socket.send(n,{binary:r},e)})})}},{key:"send",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=this._makeMessage(e,n,!1).message;return this._send(i)}},{key:"sendEncoded",value:function(e){return this._send(e,{skipEncoder:!0})}},{key:"encodeMessage",value:function(e){for(var t=this,n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];var o=this._makeMessage(e,r,!1).message;return attempt(function(){return t.encoder(o)})}},{key:"invoke",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=this._makeMessage(e,n,!0),o=i.message,s=i.promise;return this._send(o).then(function(){return s})}},{key:"register",value:function(e,t){if(getOwnProp(this.handlers,e))throw new Error("Can't register a duplicate RPC handler for "+e);this.handlers[e]=t}},{key:"reconnect",value:function(){if(this.terminated=!1,!this._isOpen()){if(!this.WebSocket||!this.url)throw new Error("Malformed configuration options");this._open()}}},{key:"close",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3,t=arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];this.terminated||(this.terminated=n,this._isOpen()&&this.socket.close(e,t))}}]),t}();Client.prototype.emit=Client.prototype.send,Client.prototype.emitEncoded=Client.prototype.sendEncoded,Client.ConnectionError=ConnectionError,Client.NoProcedureError=NoProcedureError,Client.TimeoutError=TimeoutError,module.exports=Client;
},{"./utils":2,"eventemitter3":3}],2:[function(require,module,exports){
"use strict";function assign(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n])}return r}function attempt(r){return Promise.resolve().then(r)}function fromCallback(r){return new Promise(function(e,t){r(function(r,n){r?t(r):e(n)})})}var Promise=require("promise-polyfill");module.exports={assign:assign,attempt:attempt,fromCallback:fromCallback,Promise:Promise};
"use strict";var Promise=require("promise-polyfill");function assign(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n])}return r}function attempt(r){return Promise.resolve().then(r)}function fromCallback(r){return new Promise(function(e,t){r(function(r,n){r?t(r):e(n)})})}module.exports={assign:assign,attempt:attempt,fromCallback:fromCallback,Promise:Promise};
},{"promise-polyfill":4}],3:[function(require,module,exports){
"use strict";function Events(){}function EE(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function EventEmitter(){this._events=new Events,this._eventsCount=0}var has=Object.prototype.hasOwnProperty,prefix="~";Object.create&&(Events.prototype=Object.create(null),(new Events).__proto__||(prefix=!1)),EventEmitter.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)has.call(e,t)&&n.push(prefix?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},EventEmitter.prototype.listeners=function(e,t){var n=prefix?prefix+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var s=0,i=r.length,o=new Array(i);s<i;s++)o[s]=r[s].fn;return o},EventEmitter.prototype.emit=function(e,t,n,r,s,i){var o=prefix?prefix+e:e;if(!this._events[o])return!1;var v,f,h=this._events[o],c=arguments.length;if(h.fn){switch(h.once&&this.removeListener(e,h.fn,void 0,!0),c){case 1:return h.fn.call(h.context),!0;case 2:return h.fn.call(h.context,t),!0;case 3:return h.fn.call(h.context,t,n),!0;case 4:return h.fn.call(h.context,t,n,r),!0;case 5:return h.fn.call(h.context,t,n,r,s),!0;case 6:return h.fn.call(h.context,t,n,r,s,i),!0}for(f=1,v=new Array(c-1);f<c;f++)v[f-1]=arguments[f];h.fn.apply(h.context,v)}else{var p,a=h.length;for(f=0;f<a;f++)switch(h[f].once&&this.removeListener(e,h[f].fn,void 0,!0),c){case 1:h[f].fn.call(h[f].context);break;case 2:h[f].fn.call(h[f].context,t);break;case 3:h[f].fn.call(h[f].context,t,n);break;case 4:h[f].fn.call(h[f].context,t,n,r);break;default:if(!v)for(p=1,v=new Array(c-1);p<c;p++)v[p-1]=arguments[p];h[f].fn.apply(h[f].context,v)}}return!0},EventEmitter.prototype.on=function(e,t,n){var r=new EE(t,n||this),s=prefix?prefix+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],r]:this._events[s].push(r):(this._events[s]=r,this._eventsCount++),this},EventEmitter.prototype.once=function(e,t,n){var r=new EE(t,n||this,!0),s=prefix?prefix+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],r]:this._events[s].push(r):(this._events[s]=r,this._eventsCount++),this},EventEmitter.prototype.removeListener=function(e,t,n,r){var s=prefix?prefix+e:e;if(!this._events[s])return this;if(!t)return 0===--this._eventsCount?this._events=new Events:delete this._events[s],this;var i=this._events[s];if(i.fn)i.fn!==t||r&&!i.once||n&&i.context!==n||(0===--this._eventsCount?this._events=new Events:delete this._events[s]);else{for(var o=0,v=[],f=i.length;o<f;o++)(i[o].fn!==t||r&&!i[o].once||n&&i[o].context!==n)&&v.push(i[o]);v.length?this._events[s]=1===v.length?v[0]:v:0===--this._eventsCount?this._events=new Events:delete this._events[s]}return this},EventEmitter.prototype.removeAllListeners=function(e){var t;return e?(t=prefix?prefix+e:e,this._events[t]&&(0===--this._eventsCount?this._events=new Events:delete this._events[t])):(this._events=new Events,this._eventsCount=0),this},EventEmitter.prototype.off=EventEmitter.prototype.removeListener,EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prototype.setMaxListeners=function(){return this},EventEmitter.prefixed=prefix,EventEmitter.EventEmitter=EventEmitter,"undefined"!=typeof module&&(module.exports=EventEmitter);
"use strict";var has=Object.prototype.hasOwnProperty,prefix="~";function Events(){}Object.create&&(Events.prototype=Object.create(null),(new Events).__proto__||(prefix=!1));function EE(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function addListener(e,t,n,r,i){if("function"!=typeof n)throw new TypeError("The listener must be a function");var o=new EE(n,r||e,i),s=prefix?prefix+t:t;return e._events[s]?e._events[s].fn?e._events[s]=[e._events[s],o]:e._events[s].push(o):(e._events[s]=o,e._eventsCount++),e}function clearEvent(e,t){0==--e._eventsCount?e._events=new Events:delete e._events[t]}function EventEmitter(){this._events=new Events,this._eventsCount=0}EventEmitter.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)has.call(e,t)&&n.push(prefix?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},EventEmitter.prototype.listeners=function(e){var t=prefix?prefix+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var r=0,i=n.length,o=new Array(i);r<i;r++)o[r]=n[r].fn;return o},EventEmitter.prototype.listenerCount=function(e){var t=prefix?prefix+e:e,n=this._events[t];return n?n.fn?1:n.length:0},EventEmitter.prototype.emit=function(e,t,n,r,i,o){var s=prefix?prefix+e:e;if(!this._events[s])return!1;var f,c,v=this._events[s],a=arguments.length;if(v.fn){switch(v.once&&this.removeListener(e,v.fn,void 0,!0),a){case 1:return v.fn.call(v.context),!0;case 2:return v.fn.call(v.context,t),!0;case 3:return v.fn.call(v.context,t,n),!0;case 4:return v.fn.call(v.context,t,n,r),!0;case 5:return v.fn.call(v.context,t,n,r,i),!0;case 6:return v.fn.call(v.context,t,n,r,i,o),!0}for(c=1,f=new Array(a-1);c<a;c++)f[c-1]=arguments[c];v.fn.apply(v.context,f)}else{var p,l=v.length;for(c=0;c<l;c++)switch(v[c].once&&this.removeListener(e,v[c].fn,void 0,!0),a){case 1:v[c].fn.call(v[c].context);break;case 2:v[c].fn.call(v[c].context,t);break;case 3:v[c].fn.call(v[c].context,t,n);break;case 4:v[c].fn.call(v[c].context,t,n,r);break;default:if(!f)for(p=1,f=new Array(a-1);p<a;p++)f[p-1]=arguments[p];v[c].fn.apply(v[c].context,f)}}return!0},EventEmitter.prototype.on=function(e,t,n){return addListener(this,e,t,n,!1)},EventEmitter.prototype.once=function(e,t,n){return addListener(this,e,t,n,!0)},EventEmitter.prototype.removeListener=function(e,t,n,r){var i=prefix?prefix+e:e;if(!this._events[i])return this;if(!t)return clearEvent(this,i),this;var o=this._events[i];if(o.fn)o.fn!==t||r&&!o.once||n&&o.context!==n||clearEvent(this,i);else{for(var s=0,f=[],c=o.length;s<c;s++)(o[s].fn!==t||r&&!o[s].once||n&&o[s].context!==n)&&f.push(o[s]);f.length?this._events[i]=1===f.length?f[0]:f:clearEvent(this,i)}return this},EventEmitter.prototype.removeAllListeners=function(e){var t;return e?(t=prefix?prefix+e:e,this._events[t]&&clearEvent(this,t)):(this._events=new Events,this._eventsCount=0),this},EventEmitter.prototype.off=EventEmitter.prototype.removeListener,EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prefixed=prefix,EventEmitter.EventEmitter=EventEmitter,"undefined"!=typeof module&&(module.exports=EventEmitter);
},{}],4:[function(require,module,exports){
!function(e){function n(){}function t(e,n){return function(){e.apply(n,arguments)}}function o(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],s(e,this)}function i(e,n){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(n):(e._handled=!0,void o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null===t)return void(1===e._state?r:u)(n.promise,e._value);var o;try{o=t(e._value)}catch(e){return void u(n.promise,e)}r(n.promise,o)}))}function r(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var i=n.then;if(n instanceof o)return e._state=3,e._value=n,void f(e);if("function"==typeof i)return void s(t(i,n),e)}e._state=1,e._value=n,f(e)}catch(n){u(e,n)}}function u(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;n<t;n++)i(e,e._deferreds[n]);e._deferreds=null}function c(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}function s(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,u(n,e))})}catch(e){if(t)return;t=!0,u(n,e)}}var a=setTimeout;o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var o=new this.constructor(n);return i(this,new c(e,t,o)),o},o.all=function(e){var n=Array.prototype.slice.call(e);return new o(function(e,t){function o(r,u){try{if(u&&("object"==typeof u||"function"==typeof u)){var f=u.then;if("function"==typeof f)return void f.call(u,function(e){o(r,e)},t)}n[r]=u,0===--i&&e(n)}catch(e){t(e)}}if(0===n.length)return e([]);for(var i=n.length,r=0;r<n.length;r++)o(r,n[r])})},o.resolve=function(e){return e&&"object"==typeof e&&e.constructor===o?e:new o(function(n){n(e)})},o.reject=function(e){return new o(function(n,t){t(e)})},o.race=function(e){return new o(function(n,t){for(var o=0,i=e.length;o<i;o++)e[o].then(n,t)})},o._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){a(e,0)},o._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},o._setImmediateFn=function(e){o._immediateFn=e},o._setUnhandledRejectionFn=function(e){o._unhandledRejectionFn=e},"undefined"!=typeof module&&module.exports?module.exports=o:e.Promise||(e.Promise=o)}(this);
"use strict";var setTimeoutFunc=setTimeout;function noop(){}function bind(e,n){return function(){e.apply(n,arguments)}}function handle(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,Promise._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(e){return void reject(n.promise,e)}resolve(n.promise,o)}else(1===e._state?resolve:reject)(n.promise,e._value)})):e._deferreds.push(n)}function resolve(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if(n instanceof Promise)return e._state=3,e._value=n,void finale(e);if("function"==typeof t)return void doResolve(bind(t,n),e)}e._state=1,e._value=n,finale(e)}catch(n){reject(e,n)}}function reject(e,n){e._state=2,e._value=n,finale(e)}function finale(e){2===e._state&&0===e._deferreds.length&&Promise._immediateFn(function(){e._handled||Promise._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;n<t;n++)handle(e,e._deferreds[n]);e._deferreds=null}function Handler(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}function doResolve(e,n){var t=!1;try{e(function(e){t||(t=!0,resolve(n,e))},function(e){t||(t=!0,reject(n,e))})}catch(e){if(t)return;t=!0,reject(n,e)}}function Promise(e){if(!(this instanceof Promise))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],doResolve(e,this)}var _proto=Promise.prototype;_proto.catch=function(e){return this.then(null,e)},_proto.then=function(e,n){var t=new this.constructor(noop);return handle(this,new Handler(e,n,t)),t},Promise.all=function(e){return new Promise(function(n,t){if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var o=Array.prototype.slice.call(e);if(0===o.length)return n([]);var r=o.length;function i(e,s){try{if(s&&("object"==typeof s||"function"==typeof s)){var c=s.then;if("function"==typeof c)return void c.call(s,function(n){i(e,n)},t)}o[e]=s,0==--r&&n(o)}catch(e){t(e)}}for(var s=0;s<o.length;s++)i(s,o[s])})},Promise.resolve=function(e){return e&&"object"==typeof e&&e.constructor===Promise?e:new Promise(function(n){n(e)})},Promise.reject=function(e){return new Promise(function(n,t){t(e)})},Promise.race=function(e){return new Promise(function(n,t){for(var o=0,r=e.length;o<r;o++)e[o].then(n,t)})},Promise._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){setTimeoutFunc(e,0)},Promise._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},module.exports=Promise;
},{}]},{},[1])(1)
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc