UNPKG

material-ui-cordova

Version:

React components that implement Google's Material Design.

653 lines (510 loc) 2.53 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("./react"), require("./react-dom"), require("react-transition-group/TransitionGroup")); else if(typeof define === 'function' && define.amd) define("material-ui", ["react", "react-dom", "react-transition-group/TransitionGroup"], factory); else if(typeof exports === 'object') exports["material-ui"] = factory(require("./react"), require("./react-dom"), require("react-transition-group/TransitionGroup")); else root["material-ui"] = factory(root["React"], root["ReactDOM"], root["react-transition-group/TransitionGroup"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_206__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 159); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (process.env.NODE_ENV !== 'production') { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(162)(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = __webpack_require__(165)(); } /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5))) /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) { Object.defineProperty(exports, "__esModule", { value: true }); exports.sheetsManager = exports.preset = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 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; }; }(); var _react = __webpack_require__(1); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(0); var _propTypes2 = _interopRequireDefault(_propTypes); var _warning = __webpack_require__(4); var _warning2 = _interopRequireDefault(_warning); var _hoistNonReactStatics = __webpack_require__(166); var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics); var _wrapDisplayName = __webpack_require__(27); var _wrapDisplayName2 = _interopRequireDefault(_wrapDisplayName); var _getDisplayName = __webpack_require__(90); var _getDisplayName2 = _interopRequireDefault(_getDisplayName); var _contextTypes = __webpack_require__(167); var _contextTypes2 = _interopRequireDefault(_contextTypes); var _jss = __webpack_require__(169); var _jssGlobal = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-global\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssGlobal2 = _interopRequireDefault(_jssGlobal); var _jssNested = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-nested\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssNested2 = _interopRequireDefault(_jssNested); var _jssCamelCase = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-camel-case\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssCamelCase2 = _interopRequireDefault(_jssCamelCase); var _jssDefaultUnit = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-default-unit\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssDefaultUnit2 = _interopRequireDefault(_jssDefaultUnit); var _jssVendorPrefixer = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-vendor-prefixer\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssVendorPrefixer2 = _interopRequireDefault(_jssVendorPrefixer); var _jssPropsSort = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-props-sort\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var _jssPropsSort2 = _interopRequireDefault(_jssPropsSort); var _ns = __webpack_require__(91); var ns = _interopRequireWildcard(_ns); var _createMuiTheme = __webpack_require__(64); var _createMuiTheme2 = _interopRequireDefault(_createMuiTheme); var _themeListener = __webpack_require__(67); var _themeListener2 = _interopRequireDefault(_themeListener); var _createGenerateClassName = __webpack_require__(192); var _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName); var _getStylesCreator = __webpack_require__(193); var _getStylesCreator2 = _interopRequireDefault(_getStylesCreator); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } // weak var babelPluginFlowReactPropTypes_proptype_HigherOrderComponent = __webpack_require__(46).babelPluginFlowReactPropTypes_proptype_HigherOrderComponent || __webpack_require__(0).any; var preset = exports.preset = function preset() { return { plugins: [(0, _jssGlobal2.default)(), (0, _jssNested2.default)(), (0, _jssCamelCase2.default)(), (0, _jssDefaultUnit2.default)(), (0, _jssVendorPrefixer2.default)(), (0, _jssPropsSort2.default)()] }; }; // New JSS instance. var jss = (0, _jss.create)(preset()); // Use a singleton or the provided one by the context. var generateClassName = (0, _createGenerateClassName2.default)(); // Global index counter to preserve source order. // As we create the style sheet during componentWillMount lifecycle, // children are handled after the parents, so the order of style elements would // be parent->child. It is a problem though when a parent passes a className // which needs to override any childs styles. StyleSheet of the child has a higher // specificity, because of the source order. // So our solution is to render sheets them in the reverse order child->sheet, so // that parent has a higher specificity. var indexCounter = Number.MIN_SAFE_INTEGER; var sheetsManager = exports.sheetsManager = new Map(); // We use the same empty object to ref count the styles that don't need a theme object. var noopTheme = {}; // In order to have self-supporting components, we rely on default theme when not provided. var defaultTheme = void 0; function getDefaultTheme() { if (defaultTheme) { return defaultTheme; } defaultTheme = (0, _createMuiTheme2.default)(); return defaultTheme; } var babelPluginFlowReactPropTypes_proptype_RequiredProps = { /** * Useful to extend the style applied to components. */ classes: __webpack_require__(0).object, /** * Use that property to pass a ref callback to the decorated component. */ innerRef: __webpack_require__(0).func }; // Note, theme is conditionally injected, but flow is static analysis so we need to include it. if (true) Object.defineProperty(exports, 'babelPluginFlowReactPropTypes_proptype_RequiredProps', { value: babelPluginFlowReactPropTypes_proptype_RequiredProps, configurable: true, enumerable: true }); var babelPluginFlowReactPropTypes_proptype_InjectedProps = { classes: __webpack_require__(0).object.isRequired, theme: __webpack_require__(0).object }; // Link a style sheet with a component. // It does not modify the component passed to it; // instead, it returns a new component, with a `classes` property. if (true) Object.defineProperty(exports, 'babelPluginFlowReactPropTypes_proptype_InjectedProps', { value: babelPluginFlowReactPropTypes_proptype_InjectedProps, configurable: true, enumerable: true }); var withStyles = function withStyles(stylesOrCreator) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return function (Component) { var _options$withTheme = options.withTheme, withTheme = _options$withTheme === undefined ? false : _options$withTheme, flip = options.flip, name = options.name, styleSheetOptions = _objectWithoutProperties(options, ['withTheme', 'flip', 'name']); var stylesCreator = (0, _getStylesCreator2.default)(stylesOrCreator); var listenToTheme = stylesCreator.themingEnabled || withTheme || typeof name === 'string'; if (stylesCreator.options.index === undefined) { indexCounter += 1; stylesCreator.options.index = indexCounter; } (0, _warning2.default)(indexCounter < 0, ['Material-UI: you might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join(' ')); var Style = function (_React$Component) { _inherits(Style, _React$Component); function Style(props, context) { _classCallCheck(this, Style); var _this = _possibleConstructorReturn(this, (Style.__proto__ || Object.getPrototypeOf(Style)).call(this, props, context)); _this.state = {}; _this.unsubscribeId = null; _this.jss = null; _this.sheetsManager = sheetsManager; _this.disableStylesGeneration = false; _this.stylesCreatorSaved = null; _this.theme = null; _this.sheetOptions = null; _this.theme = null; var muiThemeProviderOptions = _this.context.muiThemeProviderOptions; _this.jss = _this.context[ns.jss] || jss; if (muiThemeProviderOptions) { if (muiThemeProviderOptions.sheetsManager) { _this.sheetsManager = muiThemeProviderOptions.sheetsManager; } _this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration; } // Attach the stylesCreator to the instance of the component as in the context // of react-hot-loader the hooks can be executed in a different closure context: // https://github.com/gaearon/react-hot-loader/blob/master/src/patch.dev.js#L107 _this.stylesCreatorSaved = stylesCreator; _this.sheetOptions = _extends({ generateClassName: generateClassName }, _this.context[ns.sheetOptions]); // We use || as it's lazy evaluated. _this.theme = listenToTheme ? _themeListener2.default.initial(context) || getDefaultTheme() : noopTheme; return _this; } // Exposed for test purposes. // Exposed for tests purposes _createClass(Style, [{ key: 'componentWillMount', value: function componentWillMount() { this.attach(this.theme); } }, { key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; if (!listenToTheme) { return; } this.unsubscribeId = _themeListener2.default.subscribe(this.context, function (theme) { var oldTheme = _this2.theme; _this2.theme = theme; _this2.attach(_this2.theme); // Rerender the component so the underlying component gets the theme update. // By theme update we mean receiving and applying the new class names. _this2.setState({}, function () { _this2.detach(oldTheme); }); }); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps() { // react-hot-loader specific logic if (this.stylesCreatorSaved === stylesCreator || process.env.NODE_ENV === 'production') { return; } this.detach(this.theme); this.stylesCreatorSaved = stylesCreator; this.attach(this.theme); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.detach(this.theme); if (this.unsubscribeId !== null) { _themeListener2.default.unsubscribe(this.context, this.unsubscribeId); } } }, { key: 'attach', value: function attach(theme) { if (this.disableStylesGeneration) { return; } var stylesCreatorSaved = this.stylesCreatorSaved; var sheetManager = this.sheetsManager.get(stylesCreatorSaved); if (!sheetManager) { sheetManager = new Map(); this.sheetsManager.set(stylesCreatorSaved, sheetManager); } var sheetManagerTheme = sheetManager.get(theme); if (!sheetManagerTheme) { sheetManagerTheme = { refs: 0, sheet: null }; sheetManager.set(theme, sheetManagerTheme); } if (sheetManagerTheme.refs === 0) { var styles = stylesCreatorSaved.create(theme, name); var _meta = void 0; if (process.env.NODE_ENV !== 'production') { _meta = name || (0, _getDisplayName2.default)(Component); } var sheet = this.jss.createStyleSheet(styles, _extends({ meta: _meta, flip: typeof flip === 'boolean' ? flip : theme.direction === 'rtl', link: false }, this.sheetOptions, stylesCreatorSaved.options, { name: name }, styleSheetOptions)); sheetManagerTheme.sheet = sheet; sheet.attach(); var sheetsRegistry = this.context[ns.sheetsRegistry]; if (sheetsRegistry) { sheetsRegistry.add(sheet); } } sheetManagerTheme.refs += 1; } }, { key: 'detach', value: function detach(theme) { if (this.disableStylesGeneration) { return; } var stylesCreatorSaved = this.stylesCreatorSaved; var sheetManager = this.sheetsManager.get(stylesCreatorSaved); var sheetManagerTheme = sheetManager.get(theme); sheetManagerTheme.refs -= 1; if (sheetManagerTheme.refs === 0) { sheetManager.delete(theme); this.jss.removeStyleSheet(sheetManagerTheme.sheet); var sheetsRegistry = this.context[ns.sheetsRegistry]; if (sheetsRegistry) { sheetsRegistry.remove(sheetManagerTheme.sheet); } } } }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, classesProp = _props.classes, innerRef = _props.innerRef, other = _objectWithoutProperties(_props, ['classes', 'innerRef']); var classes = void 0; var renderedClasses = {}; if (!this.disableStylesGeneration) { var sheetManager = this.sheetsManager.get(this.stylesCreatorSaved); var sheetsManagerTheme = sheetManager.get(this.theme); renderedClasses = sheetsManagerTheme.sheet.classes; } if (classesProp) { classes = _extends({}, renderedClasses, Object.keys(classesProp).reduce(function (accumulator, key) { (0, _warning2.default)(renderedClasses[key] || _this3.disableStylesGeneration, ['Material-UI: the key `' + key + '` ' + ('provided to the classes property is not implemented in ' + (0, _getDisplayName2.default)(Component) + '.'), 'You can only override one of the following: ' + Object.keys(renderedClasses).join(',')].join('\n')); (0, _warning2.default)(!classesProp[key] || typeof classesProp[key] === 'string', ['Material-UI: the key `' + key + '` ' + ('provided to the classes property is not valid for ' + (0, _getDisplayName2.default)(Component) + '.'), 'You need to provide a non empty string instead of: ' + classesProp[key] + '.'].join('\n')); if (classesProp[key]) { accumulator[key] = renderedClasses[key] + ' ' + classesProp[key]; } return accumulator; }, {})); } else { classes = renderedClasses; } var more = {}; // Provide the theme to the wrapped component. // So we don't have to use the `withTheme()` Higher-order Component. if (withTheme) { more.theme = this.theme; } return _react2.default.createElement(Component, _extends({ classes: classes }, more, other, { ref: innerRef })); } }]); return Style; }(_react2.default.Component); Style.contextTypes = _extends({ muiThemeProviderOptions: _propTypes2.default.object }, _contextTypes2.default, listenToTheme ? _themeListener2.default.contextTypes : {}); Style.Naked = Component; Style.propTypes = { classes: __webpack_require__(0).object, innerRef: __webpack_require__(0).func }; (0, _hoistNonReactStatics2.default)(Style, Component); // Higher specificity Style.options = options; if (process.env.NODE_ENV !== 'production') { Style.displayName = (0, _wrapDisplayName2.default)(Component, 'withStyles'); } return Style; }; }; exports.default = withStyles; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9zdHlsZXMvd2l0aFN0eWxlcy5qcyJdLCJuYW1lcyI6WyJucyIsInByZXNldCIsInBsdWdpbnMiLCJqc3MiLCJnZW5lcmF0ZUNsYXNzTmFtZSIsImluZGV4Q291bnRlciIsIk51bWJlciIsIk1JTl9TQUZFX0lOVEVHRVIiLCJzaGVldHNNYW5hZ2VyIiwiTWFwIiwibm9vcFRoZW1lIiwiZGVmYXVsdFRoZW1lIiwiZ2V0RGVmYXVsdFRoZW1lIiwid2l0aFN0eWxlcyIsInN0eWxlc09yQ3JlYXRvciIsIm9wdGlvbnMiLCJDb21wb25lbnQiLCJ3aXRoVGhlbWUiLCJmbGlwIiwibmFtZSIsInN0eWxlU2hlZXRPcHRpb25zIiwic3R5bGVzQ3JlYXRvciIsImxpc3RlblRvVGhlbWUiLCJ0aGVtaW5nRW5hYmxlZCIsImluZGV4IiwidW5kZWZpbmVkIiwiam9pbiIsIlN0eWxlIiwicHJvcHMiLCJjb250ZXh0Iiwic3RhdGUiLCJ1bnN1YnNjcmliZUlkIiwiZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24iLCJzdHlsZXNDcmVhdG9yU2F2ZWQiLCJ0aGVtZSIsInNoZWV0T3B0aW9ucyIsIm11aVRoZW1lUHJvdmlkZXJPcHRpb25zIiwiaW5pdGlhbCIsImF0dGFjaCIsInN1YnNjcmliZSIsIm9sZFRoZW1lIiwic2V0U3RhdGUiLCJkZXRhY2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ1bnN1YnNjcmliZSIsInNoZWV0TWFuYWdlciIsImdldCIsInNldCIsInNoZWV0TWFuYWdlclRoZW1lIiwicmVmcyIsInNoZWV0Iiwic3R5bGVzIiwiY3JlYXRlIiwibWV0YSIsImNyZWF0ZVN0eWxlU2hlZXQiLCJkaXJlY3Rpb24iLCJsaW5rIiwic2hlZXRzUmVnaXN0cnkiLCJhZGQiLCJkZWxldGUiLCJyZW1vdmVTdHlsZVNoZWV0IiwicmVtb3ZlIiwiY2xhc3Nlc1Byb3AiLCJjbGFzc2VzIiwiaW5uZXJSZWYiLCJvdGhlciIsInJlbmRlcmVkQ2xhc3NlcyIsInNoZWV0c01hbmFnZXJUaGVtZSIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsImtleSIsIm1vcmUiLCJjb250ZXh0VHlwZXMiLCJvYmplY3QiLCJOYWtlZCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0lBQVlBLEU7O0FBQ1o7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzZOQXJCQTs7OztBQXVCTyxJQUFNQywwQkFBUyxTQUFUQSxNQUFTO0FBQUEsU0FBTztBQUMzQkMsYUFBUyxDQUNQLDBCQURPLEVBRVAsMEJBRk8sRUFHUCw2QkFITyxFQUlQLCtCQUpPLEVBS1Asa0NBTE8sRUFNUCw2QkFOTztBQURrQixHQUFQO0FBQUEsQ0FBZjs7QUFXUDtBQUNBLElBQU1DLE1BQU0saUJBQU9GLFFBQVAsQ0FBWjs7QUFFQTtBQUNBLElBQU1HLG9CQUFvQix3Q0FBMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlDLGVBQWVDLE9BQU9DLGdCQUExQjs7QUFFTyxJQUFNQyx3Q0FBMkIsSUFBSUMsR0FBSixFQUFqQzs7QUFFUDtBQUNBLElBQU1DLFlBQVksRUFBbEI7O0FBRUE7QUFDQSxJQUFJQyxxQkFBSjs7QUFFQSxTQUFTQyxlQUFULEdBQTJCO0FBQ3pCLE1BQUlELFlBQUosRUFBa0I7QUFDaEIsV0FBT0EsWUFBUDtBQUNEOztBQUVEQSxpQkFBZSwrQkFBZjtBQUNBLFNBQU9BLFlBQVA7QUFDRDs7O0FBcUJDOzs7OztBQUlBOzs7Ozs7O0FBTUY7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7O0FBQ0EsSUFBTUUsYUFBYSxTQUFiQSxVQUFhLENBQ2pCQyxlQURpQjtBQUFBLE1BRWpCQyxPQUZp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QUFBO0FBQUE7OztBQXFQaEYsd0NBQXFCVyxLQUFyQixFQUE0QlgsU0FBNUI7O0FBRUE7QUFDQVcsVUFBTVosT0FBTixHQUFnQkEsT0FBaEI7O0FBRUEsUUFBSTRCLFFBQVFDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztBQUN6Q2xCLFlBQU1vRCxXQUFOLEdBQW9CLCtCQUFnQi9ELFNBQWhCLEVBQTJCLFlBQTNCLENBQXBCO0FBQ0Q7O0FBRUQsV0FBT1csS0FBUDtBQUNELEdBbFFrQjtBQUFBLENBQW5COztrQkFvUWVkLFUiLCJmaWxlIjoid2l0aFN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9sdWthc3MvRG9jdW1lbnRzL3ByaXZhdGUvbWF0ZXJpYWwtdWkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvdyB3ZWFrXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgdHlwZSB7IEhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAncmVhY3QtZmxvdy10eXBlcyc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IHdyYXBEaXNwbGF5TmFtZSBmcm9tICdyZWNvbXBvc2Uvd3JhcERpc3BsYXlOYW1lJztcbmltcG9ydCBnZXREaXNwbGF5TmFtZSBmcm9tICdyZWNvbXBvc2UvZ2V0RGlzcGxheU5hbWUnO1xuaW1wb3J0IGNvbnRleHRUeXBlcyBmcm9tICdyZWFjdC1qc3MvbGliL2NvbnRleHRUeXBlcyc7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICdqc3MnO1xuaW1wb3J0IGpzc0dsb2JhbCBmcm9tICdqc3MtZ2xvYmFsJztcbmltcG9ydCBqc3NOZXN0ZWQgZnJvbSAnanNzLW5lc3RlZCc7XG5pbXBvcnQganNzQ2FtZWxDYXNlIGZyb20gJ2pzcy1jYW1lbC1jYXNlJztcbmltcG9ydCBqc3NEZWZhdWx0VW5pdCBmcm9tICdqc3MtZGVmYXVsdC11bml0JztcbmltcG9ydCBqc3NWZW5kb3JQcmVmaXhlciBmcm9tICdqc3MtdmVuZG9yLXByZWZpeGVyJztcbmltcG9ydCBqc3NQcm9wc1NvcnQgZnJvbSAnanNzLXByb3BzLXNvcnQnO1xuaW1wb3J0ICogYXMgbnMgZnJvbSAncmVhY3QtanNzL2xpYi9ucyc7XG5pbXBvcnQgY3JlYXRlTXVpVGhlbWUgZnJvbSAnLi9jcmVhdGVNdWlUaGVtZSc7XG5pbXBvcnQgdGhlbWVMaXN0ZW5lciBmcm9tICcuL3RoZW1lTGlzdGVuZXInO1xuaW1wb3J0IGNyZWF0ZUdlbmVyYXRlQ2xhc3NOYW1lIGZyb20gJy4vY3JlYXRlR2VuZXJhdGVDbGFzc05hbWUnO1xuaW1wb3J0IGdldFN0eWxlc0NyZWF0b3IgZnJvbSAnLi9nZXRTdHlsZXNDcmVhdG9yJztcblxuZXhwb3J0IGNvbnN0IHByZXNldCA9ICgpID0+ICh7XG4gIHBsdWdpbnM6IFtcbiAgICBqc3NHbG9iYWwoKSxcbiAgICBqc3NOZXN0ZWQoKSxcbiAgICBqc3NDYW1lbENhc2UoKSxcbiAgICBqc3NEZWZhdWx0VW5pdCgpLFxuICAgIGpzc1ZlbmRvclByZWZpeGVyKCksXG4gICAganNzUHJvcHNTb3J0KCksXG4gIF0sXG59KTtcblxuLy8gTmV3IEpTUyBpbnN0YW5jZS5cbmNvbnN0IGpzcyA9IGNyZWF0ZShwcmVzZXQoKSk7XG5cbi8vIFVzZSBhIHNpbmdsZXRvbiBvciB0aGUgcHJvdmlkZWQgb25lIGJ5IHRoZSBjb250ZXh0LlxuY29uc3QgZ2VuZXJhdGVDbGFzc05hbWUgPSBjcmVhdGVHZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4vLyBHbG9iYWwgaW5kZXggY291bnRlciB0byBwcmVzZXJ2ZSBzb3VyY2Ugb3JkZXIuXG4vLyBBcyB3ZSBjcmVhdGUgdGhlIHN0eWxlIHNoZWV0IGR1cmluZyBjb21wb25lbnRXaWxsTW91bnQgbGlmZWN5Y2xlLFxuLy8gY2hpbGRyZW4gYXJlIGhhbmRsZWQgYWZ0ZXIgdGhlIHBhcmVudHMsIHNvIHRoZSBvcmRlciBvZiBzdHlsZSBlbGVtZW50cyB3b3VsZFxuLy8gYmUgcGFyZW50LT5jaGlsZC4gSXQgaXMgYSBwcm9ibGVtIHRob3VnaCB3aGVuIGEgcGFyZW50IHBhc3NlcyBhIGNsYXNzTmFtZVxuLy8gd2hpY2ggbmVlZHMgdG8gb3ZlcnJpZGUgYW55IGNoaWxkcyBzdHlsZXMuIFN0eWxlU2hlZXQgb2YgdGhlIGNoaWxkIGhhcyBhIGhpZ2hlclxuLy8gc3BlY2lmaWNpdHksIGJlY2F1c2Ugb2YgdGhlIHNvdXJjZSBvcmRlci5cbi8vIFNvIG91ciBzb2x1dGlvbiBpcyB0byByZW5kZXIgc2hlZXRzIHRoZW0gaW4gdGhlIHJldmVyc2Ugb3JkZXIgY2hpbGQtPnNoZWV0LCBzb1xuLy8gdGhhdCBwYXJlbnQgaGFzIGEgaGlnaGVyIHNwZWNpZmljaXR5LlxubGV0IGluZGV4Q291bnRlciA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuXG5leHBvcnQgY29uc3Qgc2hlZXRzTWFuYWdlcjogTWFwPCosICo+ID0gbmV3IE1hcCgpO1xuXG4vLyBXZSB1c2UgdGhlIHNhbWUgZW1wdHkgb2JqZWN0IHRvIHJlZiBjb3VudCB0aGUgc3R5bGVzIHRoYXQgZG9uJ3QgbmVlZCBhIHRoZW1lIG9iamVjdC5cbmNvbnN0IG5vb3BUaGVtZSA9IHt9O1xuXG4vLyBJbiBvcmRlciB0byBoYXZlIHNlbGYtc3VwcG9ydGluZyBjb21wb25lbnRzLCB3ZSByZWx5IG9uIGRlZmF1bHQgdGhlbWUgd2hlbiBub3QgcHJvdmlkZWQuXG5sZXQgZGVmYXVsdFRoZW1lO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0VGhlbWUoKSB7XG4gIGlmIChkZWZhdWx0VGhlbWUpIHtcbiAgICByZXR1cm4gZGVmYXVsdFRoZW1lO1xuICB9XG5cbiAgZGVmYXVsdFRoZW1lID0gY3JlYXRlTXVpVGhlbWUoKTtcbiAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbn1cblxudHlwZSBPcHRpb25zID0ge1xuICBmbGlwPzogYm9vbGVhbixcbiAgd2l0aFRoZW1lPzogYm9vbGVhbixcbiAgbmFtZT86IHN0cmluZyxcblxuICAvLyBQcm9ibGVtOiBodHRwczovL2dpdGh1Yi5jb20vYnJpZ2FuZC9iYWJlbC1wbHVnaW4tZmxvdy1yZWFjdC1wcm9wdHlwZXMvaXNzdWVzLzEyN1xuICAvLyBpbXBvcnQgdHlwZSB7IFN0eWxlU2hlZXRGYWN0b3J5T3B0aW9ucyB9IGZyb20gJ2pzcy9saWIvdHlwZXMnO1xuICAvLyAgLi4uU3R5bGVTaGVldEZhY3RvcnlPcHRpb25zLFxuICAvLyBhbmQgdGhlIGZhY3QgdGhhdCB3ZSBjdXJyZW50bHkgY2Fubm90IGltcG9ydC9zcHJlYWQgdHlwZXMgd2l0aFxuICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2JyaWdhbmQvYmFiZWwtcGx1Z2luLWZsb3ctcmVhY3QtcHJvcHR5cGVzL2lzc3Vlcy8xMDZcbiAgbWVkaWE/OiBzdHJpbmcsXG4gIG1ldGE/OiBzdHJpbmcsXG4gIGluZGV4PzogbnVtYmVyLFxuICBsaW5rPzogYm9vbGVhbixcbiAgZWxlbWVudD86IEhUTUxTdHlsZUVsZW1lbnQsXG4gIGdlbmVyYXRlQ2xhc3NOYW1lPzogRnVuY3Rpb24sIC8vIGdlbmVyYXRlQ2xhc3NOYW1lIC0gdXNlIGdlbmVyaWMgdG8gc3RvcCB0aGUgYmxlZWRpbmcuXG59O1xuXG5leHBvcnQgdHlwZSBSZXF1aXJlZFByb3BzID0ge1xuICAvKipcbiAgICogVXNlZnVsIHRvIGV4dGVuZCB0aGUgc3R5bGUgYXBwbGllZCB0byBjb21wb25lbnRzLlxuICAgKi9cbiAgY2xhc3Nlcz86IE9iamVjdCxcbiAgLyoqXG4gICAqIFVzZSB0aGF0IHByb3BlcnR5IHRvIHBhc3MgYSByZWYgY2FsbGJhY2sgdG8gdGhlIGRlY29yYXRlZCBjb21wb25lbnQuXG4gICAqL1xuICBpbm5lclJlZj86IEZ1bmN0aW9uLFxufTtcblxuLy8gTm90ZSwgdGhlbWUgaXMgY29uZGl0aW9uYWxseSBpbmplY3RlZCwgYnV0IGZsb3cgaXMgc3RhdGljIGFuYWx5c2lzIHNvIHdlIG5lZWQgdG8gaW5jbHVkZSBpdC5cbmV4cG9ydCB0eXBlIEluamVjdGVkUHJvcHMgPSB7IGNsYXNzZXM6IE9iamVjdCwgdGhlbWU/OiBPYmplY3QgfTtcblxuLy8gTGluayBhIHN0eWxlIHNoZWV0IHdpdGggYSBjb21wb25lbnQuXG4vLyBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvbXBvbmVudCBwYXNzZWQgdG8gaXQ7XG4vLyBpbnN0ZWFkLCBpdCByZXR1cm5zIGEgbmV3IGNvbXBvbmVudCwgd2l0aCBhIGBjbGFzc2VzYCBwcm9wZXJ0eS5cbmNvbnN0IHdpdGhTdHlsZXMgPSAoXG4gIHN0eWxlc09yQ3JlYXRvcjogT2JqZWN0LFxuICBvcHRpb25zPzogT3B0aW9ucyA9IHt9LFxuKTogSGlnaGVyT3JkZXJDb21wb25lbnQ8UmVxdWlyZWRQcm9wcywgSW5qZWN0ZWRQcm9wcz4gPT4gKENvbXBvbmVudDogYW55KTogYW55ID0+IHtcbiAgY29uc3QgeyB3aXRoVGhlbWUgPSBmYWxzZSwgZmxpcCwgbmFtZSwgLi4uc3R5bGVTaGVldE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0eWxlc0NyZWF0b3IgPSBnZXRTdHlsZXNDcmVhdG9yKHN0eWxlc09yQ3JlYXRvcik7XG4gIGNvbnN0IGxpc3RlblRvVGhlbWUgPSBzdHlsZXNDcmVhdG9yLnRoZW1pbmdFbmFibGVkIHx8IHdpdGhUaGVtZSB8fCB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKHN0eWxlc0NyZWF0b3Iub3B0aW9ucy5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaW5kZXhDb3VudGVyICs9IDE7XG4gICAgc3R5bGVzQ3JlYXRvci5vcHRpb25zLmluZGV4ID0gaW5kZXhDb3VudGVyO1xuICB9XG5cbiAgd2FybmluZyhcbiAgICBpbmRleENvdW50ZXIgPCAwLFxuICAgIFtcbiAgICAgICdNYXRlcmlhbC1VSTogeW91IG1pZ2h0IGhhdmUgYSBtZW1vcnkgbGVhay4nLFxuICAgICAgJ1RoZSBpbmRleENvdW50ZXIgaXMgbm90IHN1cHBvc2VkIHRvIGdyb3cgdGhhdCBtdWNoLicsXG4gICAgXS5qb2luKCcgJyksXG4gICk7XG5cbiAgY2xhc3MgU3R5bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UmVxdWlyZWRQcm9wcz4ge1xuICAgIHN0YXRpYyBjb250ZXh0VHlwZXMgPSB7XG4gICAgICBtdWlUaGVtZVByb3ZpZGVyT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIC4uLmNvbnRleHRUeXBlcyxcbiAgICAgIC4uLihsaXN0ZW5Ub1RoZW1lID8gdGhlbWVMaXN0ZW5lci5jb250ZXh0VHlwZXMgOiB7fSksXG4gICAgfTtcblxuICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzIHB1cnBvc2VzXG4gICAgc3RhdGljIG9wdGlvbnM6ID9PcHRpb25zO1xuXG4gICAgLy8gRXhwb3NlZCBmb3IgdGVzdCBwdXJwb3Nlcy5cbiAgICBzdGF0aWMgTmFrZWQgPSBDb21wb25lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcywgY29udGV4dDogT2JqZWN0KSB7XG4gICAgICBzdXBlcihwcm9wcywgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHsgbXVpVGhlbWVQcm92aWRlck9wdGlvbnMgfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgdGhpcy5qc3MgPSB0aGlzLmNvbnRleHRbbnMuanNzXSB8fCBqc3M7XG5cbiAgICAgIGlmIChtdWlUaGVtZVByb3ZpZGVyT3B0aW9ucykge1xuICAgICAgICBpZiAobXVpVGhlbWVQcm92aWRlck9wdGlvbnMuc2hlZXRzTWFuYWdlcikge1xuICAgICAgICAgIHRoaXMuc2hlZXRzTWFuYWdlciA9IG11aVRoZW1lUHJvdmlkZXJPcHRpb25zLnNoZWV0c01hbmFnZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc2FibGVTdHlsZXNHZW5lcmF0aW9uID0gbXVpVGhlbWVQcm92aWRlck9wdGlvbnMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIC8vIEF0dGFjaCB0aGUgc3R5bGVzQ3JlYXRvciB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBhcyBpbiB0aGUgY29udGV4dFxuICAgICAgLy8gb2YgcmVhY3QtaG90LWxvYWRlciB0aGUgaG9va3MgY2FuIGJlIGV4ZWN1dGVkIGluIGEgZGlmZmVyZW50IGNsb3N1cmUgY29udGV4dDpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nYWVhcm9uL3JlYWN0LWhvdC1sb2FkZXIvYmxvYi9tYXN0ZXIvc3JjL3BhdGNoLmRldi5qcyNMMTA3XG4gICAgICB0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZCA9IHN0eWxlc0NyZWF0b3I7XG4gICAgICB0aGlzLnNoZWV0T3B0aW9ucyA9IHtcbiAgICAgICAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gICAgICAgIC4uLnRoaXMuY29udGV4dFtucy5zaGVldE9wdGlvbnNdLFxuICAgICAgfTtcbiAgICAgIC8vIFdlIHVzZSB8fCBhcyBpdCdzIGxhenkgZXZhbHVhdGVkLlxuICAgICAgdGhpcy50aGVtZSA9IGxpc3RlblRvVGhlbWUgPyB0aGVtZUxpc3RlbmVyLmluaXRpYWwoY29udGV4dCkgfHwgZ2V0RGVmYXVsdFRoZW1lKCkgOiBub29wVGhlbWU7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7fTtcblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgIHRoaXMuYXR0YWNoKHRoaXMudGhlbWUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCFsaXN0ZW5Ub1RoZW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bnN1YnNjcmliZUlkID0gdGhlbWVMaXN0ZW5lci5zdWJzY3JpYmUodGhpcy5jb250ZXh0LCB0aGVtZSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZFRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy50aGVtZSA9IHRoZW1lO1xuICAgICAgICB0aGlzLmF0dGFjaCh0aGlzLnRoZW1lKTtcblxuICAgICAgICAvLyBSZXJlbmRlciB0aGUgY29tcG9uZW50IHNvIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudCBnZXRzIHRoZSB0aGVtZSB1cGRhdGUuXG4gICAgICAgIC8vIEJ5IHRoZW1lIHVwZGF0ZSB3ZSBtZWFuIHJlY2VpdmluZyBhbmQgYXBwbHlpbmcgdGhlIG5ldyBjbGFzcyBuYW1lcy5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7fSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGV0YWNoKG9sZFRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkge1xuICAgICAgLy8gcmVhY3QtaG90LWxvYWRlciBzcGVjaWZpYyBsb2dpY1xuICAgICAgaWYgKHRoaXMuc3R5bGVzQ3JlYXRvclNhdmVkID09PSBzdHlsZXNDcmVhdG9yIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRldGFjaCh0aGlzLnRoZW1lKTtcbiAgICAgIHRoaXMuc3R5bGVzQ3JlYXRvclNhdmVkID0gc3R5bGVzQ3JlYXRvcjtcbiAgICAgIHRoaXMuYXR0YWNoKHRoaXMudGhlbWUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5kZXRhY2godGhpcy50aGVtZSk7XG5cbiAgICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlSWQgIT09IG51bGwpIHtcbiAgICAgICAgdGhlbWVMaXN0ZW5lci51bnN1YnNjcmliZSh0aGlzLmNvbnRleHQsIHRoaXMudW5zdWJzY3JpYmVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0YWNoKHRoZW1lOiBPYmplY3QpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVTdHlsZXNHZW5lcmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3R5bGVzQ3JlYXRvclNhdmVkID0gdGhpcy5zdHlsZXNDcmVhdG9yU2F2ZWQ7XG4gICAgICBsZXQgc2hlZXRNYW5hZ2VyID0gdGhpcy5zaGVldHNNYW5hZ2VyLmdldChzdHlsZXNDcmVhdG9yU2F2ZWQpO1xuXG4gICAgICBpZiAoIXNoZWV0TWFuYWdlcikge1xuICAgICAgICBzaGVldE1hbmFnZXIgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuc2hlZXRzTWFuYWdlci5zZXQoc3R5bGVzQ3JlYXRvclNhdmVkLCBzaGVldE1hbmFnZXIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2hlZXRNYW5hZ2VyVGhlbWUgPSBzaGVldE1hbmFnZXIuZ2V0KHRoZW1lKTtcblxuICAgICAgaWYgKCFzaGVldE1hbmFnZXJUaGVtZSkge1xuICAgICAgICBzaGVldE1hbmFnZXJUaGVtZSA9IHtcbiAgICAgICAgICByZWZzOiAwLFxuICAgICAgICAgIHNoZWV0OiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICBzaGVldE1hbmFnZXIuc2V0KHRoZW1lLCBzaGVldE1hbmFnZXJUaGVtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaGVldE1hbmFnZXJUaGVtZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IHN0eWxlc0NyZWF0b3JTYXZlZC5jcmVhdGUodGhlbWUsIG5hbWUpO1xuICAgICAgICBsZXQgbWV0YTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIG1ldGEgPSBuYW1lIHx8IGdldERpc3BsYXlOYW1lKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaGVldCA9IHRoaXMuanNzLmNyZWF0ZVN0eWxlU2hlZXQoc3R5bGVzLCB7XG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgICBmbGlwOiB0eXBlb2YgZmxpcCA9PT0gJ2Jvb2xlYW4nID8gZmxpcCA6IHRoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCcsXG4gICAgICAgICAgbGluazogZmFsc2UsXG4gICAgICAgICAgLi4udGhpcy5zaGVldE9wdGlvbnMsXG4gICAgICAgICAgLi4uc3R5bGVzQ3JlYXRvclNhdmVkLm9wdGlvbnMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5zdHlsZVNoZWV0T3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2hlZXRNYW5hZ2VyVGhlbWUuc2hlZXQgPSBzaGVldDtcbiAgICAgICAgc2hlZXQuYXR0YWNoKCk7XG5cbiAgICAgICAgY29uc3Qgc2hlZXRzUmVnaXN0cnkgPSB0aGlzLmNvbnRleHRbbnMuc2hlZXRzUmVnaXN0cnldO1xuICAgICAgICBpZiAoc2hlZXRzUmVnaXN0cnkpIHtcbiAgICAgICAgICBzaGVldHNSZWdpc3RyeS5hZGQoc2hlZXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgKz0gMTtcbiAgICB9XG5cbiAgICBkZXRhY2godGhlbWU6IE9iamVjdCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZXNDcmVhdG9yU2F2ZWQgPSB0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZDtcbiAgICAgIGNvbnN0IHNoZWV0TWFuYWdlciA9IHRoaXMuc2hlZXRzTWFuYWdlci5nZXQoc3R5bGVzQ3JlYXRvclNhdmVkKTtcbiAgICAgIGNvbnN0IHNoZWV0TWFuYWdlclRoZW1lID0gc2hlZXRNYW5hZ2VyLmdldCh0aGVtZSk7XG5cbiAgICAgIHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgLT0gMTtcblxuICAgICAgaWYgKHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgPT09IDApIHtcbiAgICAgICAgc2hlZXRNYW5hZ2VyLmRlbGV0ZSh0aGVtZSk7XG4gICAgICAgIHRoaXMuanNzLnJlbW92ZVN0eWxlU2hlZXQoc2hlZXRNYW5hZ2VyVGhlbWUuc2hlZXQpO1xuICAgICAgICBjb25zdCBzaGVldHNSZWdpc3RyeSA9IHRoaXMuY29udGV4dFtucy5zaGVldHNSZWdpc3RyeV07XG4gICAgICAgIGlmIChzaGVldHNSZWdpc3RyeSkge1xuICAgICAgICAgIHNoZWV0c1JlZ2lzdHJ5LnJlbW92ZShzaGVldE1hbmFnZXJUaGVtZS5zaGVldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZUlkID0gbnVsbDtcbiAgICBqc3MgPSBudWxsO1xuICAgIHNoZWV0c01hbmFnZXIgPSBzaGVldHNNYW5hZ2VyO1xuICAgIGRpc2FibGVTdHlsZXNHZW5lcmF0aW9uID0gZmFsc2U7XG4gICAgc3R5bGVzQ3JlYXRvclNhdmVkID0gbnVsbDtcbiAgICB0aGVtZSA9IG51bGw7XG4gICAgc2hlZXRPcHRpb25zID0gbnVsbDtcbiAgICB0aGVtZSA9IG51bGw7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzZXM6IGNsYXNzZXNQcm9wLCBpbm5lclJlZiwgLi4ub3RoZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGxldCBjbGFzc2VzO1xuICAgICAgbGV0IHJlbmRlcmVkQ2xhc3NlcyA9IHt9O1xuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2hlZXRNYW5hZ2VyID0gdGhpcy5zaGVldHNNYW5hZ2VyLmdldCh0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZCk7XG4gICAgICAgIGNvbnN0IHNoZWV0c01hbmFnZXJUaGVtZSA9IHNoZWV0TWFuYWdlci5nZXQodGhpcy50aGVtZSk7XG4gICAgICAgIHJlbmRlcmVkQ2xhc3NlcyA9IHNoZWV0c01hbmFnZXJUaGVtZS5zaGVldC5jbGFzc2VzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xhc3Nlc1Byb3ApIHtcbiAgICAgICAgY2xhc3NlcyA9IHtcbiAgICAgICAgICAuLi5yZW5kZXJlZENsYXNzZXMsXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoY2xhc3Nlc1Byb3ApLnJlZHVjZSgoYWNjdW11bGF0b3IsIGtleSkgPT4ge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgcmVuZGVyZWRDbGFzc2VzW2tleV0gfHwgdGhpcy5kaXNhYmxlU3R5bGVzR2VuZXJhdGlvbixcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIGBNYXRlcmlhbC1VSTogdGhlIGtleSBcXGAke2tleX1cXGAgYCArXG4gICAgICAgICAgICAgICAgICBgcHJvdmlkZWQgdG8gdGhlIGNsYXNzZXMgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIGluICR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICl9LmAsXG4gICAgICAgICAgICAgICAgYFlvdSBjYW4gb25seSBvdmVycmlkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJHtPYmplY3Qua2V5cyhyZW5kZXJlZENsYXNzZXMpLmpvaW4oXG4gICAgICAgICAgICAgICAgICAnLCcsXG4gICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgIWNsYXNzZXNQcm9wW2tleV0gfHwgdHlwZW9mIGNsYXNzZXNQcm9wW2tleV0gPT09ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgYE1hdGVyaWFsLVVJOiB0aGUga2V5IFxcYCR7a2V5fVxcYCBgICtcbiAgICAgICAgICAgICAgICAgIGBwcm92aWRlZCB0byB0aGUgY2xhc3NlcyBwcm9wZXJ0eSBpcyBub3QgdmFsaWQgZm9yICR7Z2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KX0uYCxcbiAgICAgICAgICAgICAgICBgWW91IG5lZWQgdG8gcHJvdmlkZSBhIG5vbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZjogJHtjbGFzc2VzUHJvcFtrZXldfS5gLFxuICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNsYXNzZXNQcm9wW2tleV0pIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0b3Jba2V5XSA9IGAke3JlbmRlcmVkQ2xhc3Nlc1trZXldfSAke2NsYXNzZXNQcm9wW2tleV19YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzZXMgPSByZW5kZXJlZENsYXNzZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vcmUgPSB7fTtcblxuICAgICAgLy8gUHJvdmlkZSB0aGUgdGhlbWUgdG8gdGhlIHdyYXBwZWQgY29tcG9uZW50LlxuICAgICAgLy8gU28gd2UgZG9uJ3QgaGF2ZSB0byB1c2UgdGhlIGB3aXRoVGhlbWUoKWAgSGlnaGVyLW9yZGVyIENvbXBvbmVudC5cbiAgICAgIGlmICh3aXRoVGhlbWUpIHtcbiAgICAgICAgbW9yZS50aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8Q29tcG9uZW50IGNsYXNzZXM9e2NsYXNzZXN9IHsuLi5tb3JlfSB7Li4ub3RoZXJ9IHJlZj17aW5uZXJSZWZ9IC8+O1xuICAgIH1cbiAgfVxuXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFN0eWxlLCBDb21wb25lbnQpO1xuXG4gIC8vIEhpZ2hlciBzcGVjaWZpY2l0eVxuICBTdHlsZS5vcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIFN0eWxlLmRpc3BsYXlOYW1lID0gd3JhcERpc3BsYXlOYW1lKENvbXBvbmVudCwgJ3dpdGhTdHlsZXMnKTtcbiAgfVxuXG4gIHJldHVybiBTdHlsZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXM7XG4iXX0= /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5))) /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /* global define */ (function () { 'use strict'; var hasOwn = {}.hasOwnProperty; function classNames () { var classes = []; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; if (!arg) continue; var argType = typeof arg; if (argType === 'string' || argType === 'number') { classes.push(arg); } else if (Array.isArray(arg)) { classes.push(classNames.apply(null, arg)); } else if (argType === 'object') { for (var key in arg) { if (hasOwn.call(arg, key) && arg[key]) { classes.push(key); } } } } return classes.join(' '); } if (typeof module !== 'undefined' && module.exports) { module.exports = classNames; } else if (true) { // register as 'classnames', consistent with npm package name !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { return classNames; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else { window.classNames = classNames; } }()); /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Similar to invariant but only logs a warning if the condition is not met. * This can be used to log issues in development environments in critical * paths. Removing the logging code for production environments will keep the * same logic and follow the same code paths. */ var warning = function() {}; if (process.env.NODE_ENV !== 'production') { warning = function(condition, format, args) { var len = arguments.length; args = new Array(len > 2 ? len - 2 : 0); for (var key = 2; key < len; key++) { args[key - 2] = arguments[key]; } if (format === undefined) { throw new Error( '`warning(condition, format, ...args)` requires a warning ' + 'message argument' ); } if (format.length < 10 || (/^[s\W]*$/).test(format)) { throw new Err