UNPKG

styledot

Version:
183 lines (149 loc) 20.2 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactModal = _interopRequireDefault(require("react-modal")); var _uuid = require("uuid"); 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 _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); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } try { _reactModal["default"].setAppElement('.sd-modal-app-element'); } catch (error) { console.error('App element missing for StyleDot Modal. See documentation: https://style.23andme.com/components#modals-section'); } var Modal = /*#__PURE__*/function (_React$Component) { _inherits(Modal, _React$Component); var _super = _createSuper(Modal); function Modal(props) { var _this; _classCallCheck(this, Modal); _this = _super.call(this, props); _this.state = { hasScrolled: false }; _this.handleScroll = _this.handleScroll.bind(_assertThisInitialized(_this)); _this.closeModal = _this.props.closeModal.bind(_assertThisInitialized(_this)); _this.ctaPosition = props.ctaPosition ? "dismiss-cta-".concat(props.ctaPosition) : ''; _this.uid = (0, _uuid.v4)(); return _this; } _createClass(Modal, [{ key: "classString", value: function classString() { var defaultClasses = 'sd-modal sd-elevation-2'; if (this.props.alternateModal) { defaultClasses += " sd-modal-".concat(this.props.alternateModal); if (this.props.useWhiteDismissButton) { defaultClasses += " mod-modal-white-dismiss"; } } return defaultClasses; } }, { key: "modalSizeClassString", value: function modalSizeClassString() { var sizeClass = ''; if (this.props.modalSize) { sizeClass = "mod-modal-".concat(this.props.modalSize); } return sizeClass; } }, { key: "overlayClassString", value: function overlayClassString() { var overlayDefaultClasses = 'sd-modal-overlay'; if (this.props.alternateModal === 'interstitial' || this.props.alternateModal === 'interstitial-promo' || this.props.modalSize) { overlayDefaultClasses += " mod-overlay-dark"; } return overlayDefaultClasses; } }, { key: "handleScroll", value: function handleScroll() { var wrapper = document.querySelector('.sd-modal-wrapper'); if (wrapper.scrollTop > 0 && !this.state.hasScrolled) { this.setState({ hasScrolled: true }); } else if (wrapper.scrollTop === 0 && this.state.hasScrolled) { this.setState({ hasScrolled: false }); } } }, { key: "render", value: function render() { return /*#__PURE__*/_react["default"].createElement(_reactModal["default"], { isOpen: this.props.isVisible, onRequestClose: this.props.closeModal, className: "".concat(this.classString(), " ").concat(this.modalSizeClassString()), overlayClassName: this.overlayClassString(), bodyOpenClassName: "sd-modal-body", contentLabel: this.props.contentLabel, aria: { describedby: "modal-contents-".concat(this.uid), modal: true } }, /*#__PURE__*/_react["default"].createElement("button", { className: "sd-unbutton sd-modal-dismiss-top ".concat(this.state.hasScrolled ? 'mod-scrolled' : ''), onClick: this.props.closeModal, "aria-label": "Close" }), /*#__PURE__*/_react["default"].createElement("div", { id: "modal-contents-".concat(this.uid), className: "sd-modal-wrapper", onScroll: this.handleScroll }, this.props.contents && /*#__PURE__*/_react["default"].createElement("div", { // Careful here! dangerouslySetInnerHTML: { __html: this.props.contents } }), this.props.children && this.props.children, this.props.includeDismissCta && /*#__PURE__*/_react["default"].createElement("div", { className: "sd-modal-dismiss-cta-container ".concat(this.ctaPosition) }, /*#__PURE__*/_react["default"].createElement("button", { className: "sd-button sd-modal-dismiss-cta ".concat(this.props.extraClasses), onClick: this.props.closeModal }, this.props.dismissText)))); } }]); return Modal; }(_react["default"].Component); Modal.defaultProps = { contents: '', dismissText: 'Close', ctaPosition: '', extraClasses: '', includeDismissCta: true, alternateModal: '', useWhiteDismissButton: false, contentLabel: 'Modal' }; Modal.propTypes = { isVisible: _propTypes["default"].bool.isRequired, closeModal: _propTypes["default"].func.isRequired, contents: _propTypes["default"].string, dismissText: _propTypes["default"].string, ctaPosition: _propTypes["default"].string, extraClasses: _propTypes["default"].string, includeDismissCta: _propTypes["default"].bool, alternateModal: _propTypes["default"].string, modalSize: _propTypes["default"].string, useWhiteDismissButton: _propTypes["default"].bool, contentLabel: _propTypes["default"].string }; var _default = Modal; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsImVycm9yIiwiY29uc29sZSIsIk1vZGFsIiwicHJvcHMiLCJzdGF0ZSIsImhhc1Njcm9sbGVkIiwiaGFuZGxlU2Nyb2xsIiwiYmluZCIsImNsb3NlTW9kYWwiLCJjdGFQb3NpdGlvbiIsInVpZCIsInV1aWQiLCJkZWZhdWx0Q2xhc3NlcyIsImFsdGVybmF0ZU1vZGFsIiwidXNlV2hpdGVEaXNtaXNzQnV0dG9uIiwic2l6ZUNsYXNzIiwibW9kYWxTaXplIiwib3ZlcmxheURlZmF1bHRDbGFzc2VzIiwid3JhcHBlciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbFRvcCIsInNldFN0YXRlIiwiaXNWaXNpYmxlIiwiY2xhc3NTdHJpbmciLCJtb2RhbFNpemVDbGFzc1N0cmluZyIsIm92ZXJsYXlDbGFzc1N0cmluZyIsImNvbnRlbnRMYWJlbCIsImRlc2NyaWJlZGJ5IiwibW9kYWwiLCJjb250ZW50cyIsIl9faHRtbCIsImNoaWxkcmVuIiwiaW5jbHVkZURpc21pc3NDdGEiLCJleHRyYUNsYXNzZXMiLCJkaXNtaXNzVGV4dCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsImlzUmVxdWlyZWQiLCJmdW5jIiwic3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9tb2RhbC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBpcyB0aGUgbGF5ZXIgdGhhdCBleGVjdXRlcyBvbiB0aGUgb2ZmaWNpYWwgcmVhY3QtbW9kYWwgY29tcG9uZW50XG4vLyBUaGlzIGlzIGFjY2Vzc2VkIGJ5XG4vLyAtIG1vZGFsLWluc3RhbmNlLmpzeCAoZm9yIFJlYWN0IHVzYWdlKVxuLy8gLSBtb2RhbC1pbml0LmpzIChmb3IgdmFuaWxsYSB1c2FnZSlcbi8vIGh0dHBzOi8vc3R5bGUuMjNhbmRtZS5jb20vY29tcG9uZW50cy8jbW9kYWxzLXNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbnRyeSB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KCcuc2QtbW9kYWwtYXBwLWVsZW1lbnQnKTtcbn0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0FwcCBlbGVtZW50IG1pc3NpbmcgZm9yIFN0eWxlRG90IE1vZGFsLiBTZWUgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9zdHlsZS4yM2FuZG1lLmNvbS9jb21wb25lbnRzI21vZGFscy1zZWN0aW9uJ1xuICAgICk7XG59XG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBoYXNTY3JvbGxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlU2Nyb2xsID0gdGhpcy5oYW5kbGVTY3JvbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsID0gdGhpcy5wcm9wcy5jbG9zZU1vZGFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY3RhUG9zaXRpb24gPSBwcm9wcy5jdGFQb3NpdGlvbiA/IGBkaXNtaXNzLWN0YS0ke3Byb3BzLmN0YVBvc2l0aW9ufWAgOiAnJztcbiAgICAgICAgdGhpcy51aWQgPSB1dWlkKCk7XG4gICAgfVxuXG4gICAgY2xhc3NTdHJpbmcoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3NlcyA9ICdzZC1tb2RhbCBzZC1lbGV2YXRpb24tMic7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmFsdGVybmF0ZU1vZGFsKSB7XG4gICAgICAgICAgICBkZWZhdWx0Q2xhc3NlcyArPSBgIHNkLW1vZGFsLSR7dGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMudXNlV2hpdGVEaXNtaXNzQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENsYXNzZXMgKz0gYCBtb2QtbW9kYWwtd2hpdGUtZGlzbWlzc2A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDbGFzc2VzO1xuICAgIH1cbiAgICBtb2RhbFNpemVDbGFzc1N0cmluZygpIHtcbiAgICAgICAgbGV0IHNpemVDbGFzcyA9ICcnO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tb2RhbFNpemUpIHtcbiAgICAgICAgICAgIHNpemVDbGFzcyA9IGBtb2QtbW9kYWwtJHt0aGlzLnByb3BzLm1vZGFsU2l6ZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaXplQ2xhc3M7XG4gICAgfVxuXG4gICAgb3ZlcmxheUNsYXNzU3RyaW5nKCkge1xuICAgICAgICBsZXQgb3ZlcmxheURlZmF1bHRDbGFzc2VzID0gJ3NkLW1vZGFsLW92ZXJsYXknO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmFsdGVybmF0ZU1vZGFsID09PSAnaW50ZXJzdGl0aWFsJyB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbCA9PT0gJ2ludGVyc3RpdGlhbC1wcm9tbycgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMubW9kYWxTaXplXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3ZlcmxheURlZmF1bHRDbGFzc2VzICs9IGAgbW9kLW92ZXJsYXktZGFya2A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlEZWZhdWx0Q2xhc3NlcztcbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGwoKSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2QtbW9kYWwtd3JhcHBlcicpO1xuICAgICAgICBpZiAod3JhcHBlci5zY3JvbGxUb3AgPiAwICYmICF0aGlzLnN0YXRlLmhhc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzU2Nyb2xsZWQ6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAod3JhcHBlci5zY3JvbGxUb3AgPT09IDAgJiYgdGhpcy5zdGF0ZS5oYXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGhhc1Njcm9sbGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxSZWFjdE1vZGFsXG4gICAgICAgICAgICAgICAgaXNPcGVuPXt0aGlzLnByb3BzLmlzVmlzaWJsZX1cbiAgICAgICAgICAgICAgICBvblJlcXVlc3RDbG9zZT17dGhpcy5wcm9wcy5jbG9zZU1vZGFsfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7dGhpcy5jbGFzc1N0cmluZygpfSAke3RoaXMubW9kYWxTaXplQ2xhc3NTdHJpbmcoKX1gfVxuICAgICAgICAgICAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3RoaXMub3ZlcmxheUNsYXNzU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgYm9keU9wZW5DbGFzc05hbWU9XCJzZC1tb2RhbC1ib2R5XCJcbiAgICAgICAgICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMucHJvcHMuY29udGVudExhYmVsfVxuICAgICAgICAgICAgICAgIGFyaWE9e3tcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkYnk6IGBtb2RhbC1jb250ZW50cy0ke3RoaXMudWlkfWAsXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BzZC11bmJ1dHRvbiBzZC1tb2RhbC1kaXNtaXNzLXRvcCAke3RoaXMuc3RhdGUuaGFzU2Nyb2xsZWQgPyAnbW9kLXNjcm9sbGVkJyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuY2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9e2Btb2RhbC1jb250ZW50cy0ke3RoaXMudWlkfWB9IGNsYXNzTmFtZT1cInNkLW1vZGFsLXdyYXBwZXJcIiBvblNjcm9sbD17dGhpcy5oYW5kbGVTY3JvbGx9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jb250ZW50cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FyZWZ1bCBoZXJlIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faHRtbDogdGhpcy5wcm9wcy5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW4gJiYgdGhpcy5wcm9wcy5jaGlsZHJlbn1cblxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5pbmNsdWRlRGlzbWlzc0N0YSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHNkLW1vZGFsLWRpc21pc3MtY3RhLWNvbnRhaW5lciAke3RoaXMuY3RhUG9zaXRpb259YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BzZC1idXR0b24gc2QtbW9kYWwtZGlzbWlzcy1jdGEgJHt0aGlzLnByb3BzLmV4dHJhQ2xhc3Nlc31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmNsb3NlTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kaXNtaXNzVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9SZWFjdE1vZGFsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICAgIGNvbnRlbnRzOiAnJyxcbiAgICBkaXNtaXNzVGV4dDogJ0Nsb3NlJyxcbiAgICBjdGFQb3NpdGlvbjogJycsXG4gICAgZXh0cmFDbGFzc2VzOiAnJyxcbiAgICBpbmNsdWRlRGlzbWlzc0N0YTogdHJ1ZSxcbiAgICBhbHRlcm5hdGVNb2RhbDogJycsXG4gICAgdXNlV2hpdGVEaXNtaXNzQnV0dG9uOiBmYWxzZSxcbiAgICBjb250ZW50TGFiZWw6ICdNb2RhbCcsXG59O1xuXG5Nb2RhbC5wcm9wVHlwZXMgPSB7XG4gICAgaXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNsb3NlTW9kYWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY29udGVudHM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGlzbWlzc1RleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3RhUG9zaXRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXh0cmFDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGluY2x1ZGVEaXNtaXNzQ3RhOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhbHRlcm5hdGVNb2RhbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RhbFNpemU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdXNlV2hpdGVEaXNtaXNzQnV0dG9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb250ZW50TGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUk7RUFDQUEsc0JBQUEsQ0FBV0MsYUFBWCxDQUF5Qix1QkFBekI7QUFDSCxDQUZELENBRUUsT0FBT0MsS0FBUCxFQUFjO0VBQ1pDLE9BQU8sQ0FBQ0QsS0FBUixDQUNJLGdIQURKO0FBR0g7O0lBRUtFLEs7Ozs7O0VBQ0YsZUFBWUMsS0FBWixFQUFtQjtJQUFBOztJQUFBOztJQUNmLDBCQUFNQSxLQUFOO0lBQ0EsTUFBS0MsS0FBTCxHQUFhO01BQ1RDLFdBQVcsRUFBRTtJQURKLENBQWI7SUFHQSxNQUFLQyxZQUFMLEdBQW9CLE1BQUtBLFlBQUwsQ0FBa0JDLElBQWxCLCtCQUFwQjtJQUNBLE1BQUtDLFVBQUwsR0FBa0IsTUFBS0wsS0FBTCxDQUFXSyxVQUFYLENBQXNCRCxJQUF0QiwrQkFBbEI7SUFDQSxNQUFLRSxXQUFMLEdBQW1CTixLQUFLLENBQUNNLFdBQU4seUJBQW1DTixLQUFLLENBQUNNLFdBQXpDLElBQXlELEVBQTVFO0lBQ0EsTUFBS0MsR0FBTCxHQUFXLElBQUFDLFFBQUEsR0FBWDtJQVJlO0VBU2xCOzs7O1dBRUQsdUJBQWM7TUFDVixJQUFJQyxjQUFjLEdBQUcseUJBQXJCOztNQUNBLElBQUksS0FBS1QsS0FBTCxDQUFXVSxjQUFmLEVBQStCO1FBQzNCRCxjQUFjLHdCQUFpQixLQUFLVCxLQUFMLENBQVdVLGNBQTVCLENBQWQ7O1FBQ0EsSUFBSSxLQUFLVixLQUFMLENBQVdXLHFCQUFmLEVBQXNDO1VBQ2xDRixjQUFjLDhCQUFkO1FBQ0g7TUFDSjs7TUFDRCxPQUFPQSxjQUFQO0lBQ0g7OztXQUNELGdDQUF1QjtNQUNuQixJQUFJRyxTQUFTLEdBQUcsRUFBaEI7O01BQ0EsSUFBSSxLQUFLWixLQUFMLENBQVdhLFNBQWYsRUFBMEI7UUFDdEJELFNBQVMsdUJBQWdCLEtBQUtaLEtBQUwsQ0FBV2EsU0FBM0IsQ0FBVDtNQUNIOztNQUNELE9BQU9ELFNBQVA7SUFDSDs7O1dBRUQsOEJBQXFCO01BQ2pCLElBQUlFLHFCQUFxQixHQUFHLGtCQUE1Qjs7TUFDQSxJQUNJLEtBQUtkLEtBQUwsQ0FBV1UsY0FBWCxLQUE4QixjQUE5QixJQUNBLEtBQUtWLEtBQUwsQ0FBV1UsY0FBWCxLQUE4QixvQkFEOUIsSUFFQSxLQUFLVixLQUFMLENBQVdhLFNBSGYsRUFJRTtRQUNFQyxxQkFBcUIsdUJBQXJCO01BQ0g7O01BQ0QsT0FBT0EscUJBQVA7SUFDSDs7O1dBRUQsd0JBQWU7TUFDWCxJQUFNQyxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixtQkFBdkIsQ0FBaEI7O01BQ0EsSUFBSUYsT0FBTyxDQUFDRyxTQUFSLEdBQW9CLENBQXBCLElBQXlCLENBQUMsS0FBS2pCLEtBQUwsQ0FBV0MsV0FBekMsRUFBc0Q7UUFDbEQsS0FBS2lCLFFBQUwsQ0FBYztVQUFFakIsV0FBVyxFQUFFO1FBQWYsQ0FBZDtNQUNILENBRkQsTUFFTyxJQUFJYSxPQUFPLENBQUNHLFNBQVIsS0FBc0IsQ0FBdEIsSUFBMkIsS0FBS2pCLEtBQUwsQ0FBV0MsV0FBMUMsRUFBdUQ7UUFDMUQsS0FBS2lCLFFBQUwsQ0FBYztVQUFFakIsV0FBVyxFQUFFO1FBQWYsQ0FBZDtNQUNIO0lBQ0o7OztXQUVELGtCQUFTO01BQ0wsb0JBQ0ksZ0NBQUMsc0JBQUQ7UUFDSSxNQUFNLEVBQUUsS0FBS0YsS0FBTCxDQUFXb0IsU0FEdkI7UUFFSSxjQUFjLEVBQUUsS0FBS3BCLEtBQUwsQ0FBV0ssVUFGL0I7UUFHSSxTQUFTLFlBQUssS0FBS2dCLFdBQUwsRUFBTCxjQUEyQixLQUFLQyxvQkFBTCxFQUEzQixDQUhiO1FBSUksZ0JBQWdCLEVBQUUsS0FBS0Msa0JBQUwsRUFKdEI7UUFLSSxpQkFBaUIsRUFBQyxlQUx0QjtRQU1JLFlBQVksRUFBRSxLQUFLdkIsS0FBTCxDQUFXd0IsWUFON0I7UUFPSSxJQUFJLEVBQUU7VUFDRkMsV0FBVywyQkFBb0IsS0FBS2xCLEdBQXpCLENBRFQ7VUFFRm1CLEtBQUssRUFBRTtRQUZMO01BUFYsZ0JBWUk7UUFDSSxTQUFTLDZDQUFzQyxLQUFLekIsS0FBTCxDQUFXQyxXQUFYLEdBQXlCLGNBQXpCLEdBQTBDLEVBQWhGLENBRGI7UUFFSSxPQUFPLEVBQUUsS0FBS0YsS0FBTCxDQUFXSyxVQUZ4QjtRQUdJLGNBQVc7TUFIZixFQVpKLGVBaUJJO1FBQUssRUFBRSwyQkFBb0IsS0FBS0UsR0FBekIsQ0FBUDtRQUF1QyxTQUFTLEVBQUMsa0JBQWpEO1FBQW9FLFFBQVEsRUFBRSxLQUFLSjtNQUFuRixHQUNLLEtBQUtILEtBQUwsQ0FBVzJCLFFBQVgsaUJBQ0c7UUFDSTtRQUNBLHVCQUF1QixFQUFFO1VBQ3JCQyxNQUFNLEVBQUUsS0FBSzVCLEtBQUwsQ0FBVzJCO1FBREU7TUFGN0IsRUFGUixFQVNLLEtBQUszQixLQUFMLENBQVc2QixRQUFYLElBQXVCLEtBQUs3QixLQUFMLENBQVc2QixRQVR2QyxFQVdLLEtBQUs3QixLQUFMLENBQVc4QixpQkFBWCxpQkFDRztRQUFLLFNBQVMsMkNBQW9DLEtBQUt4QixXQUF6QztNQUFkLGdCQUNJO1FBQ0ksU0FBUywyQ0FBb0MsS0FBS04sS0FBTCxDQUFXK0IsWUFBL0MsQ0FEYjtRQUVJLE9BQU8sRUFBRSxLQUFLL0IsS0FBTCxDQUFXSztNQUZ4QixHQUlLLEtBQUtMLEtBQUwsQ0FBV2dDLFdBSmhCLENBREosQ0FaUixDQWpCSixDQURKO0lBMENIOzs7O0VBOUZlQyxpQkFBQSxDQUFNQyxTOztBQWlHMUJuQyxLQUFLLENBQUNvQyxZQUFOLEdBQXFCO0VBQ2pCUixRQUFRLEVBQUUsRUFETztFQUVqQkssV0FBVyxFQUFFLE9BRkk7RUFHakIxQixXQUFXLEVBQUUsRUFISTtFQUlqQnlCLFlBQVksRUFBRSxFQUpHO0VBS2pCRCxpQkFBaUIsRUFBRSxJQUxGO0VBTWpCcEIsY0FBYyxFQUFFLEVBTkM7RUFPakJDLHFCQUFxQixFQUFFLEtBUE47RUFRakJhLFlBQVksRUFBRTtBQVJHLENBQXJCO0FBV0F6QixLQUFLLENBQUNxQyxTQUFOLEdBQWtCO0VBQ2RoQixTQUFTLEVBQUVpQixxQkFBQSxDQUFVQyxJQUFWLENBQWVDLFVBRFo7RUFFZGxDLFVBQVUsRUFBRWdDLHFCQUFBLENBQVVHLElBQVYsQ0FBZUQsVUFGYjtFQUdkWixRQUFRLEVBQUVVLHFCQUFBLENBQVVJLE1BSE47RUFJZFQsV0FBVyxFQUFFSyxxQkFBQSxDQUFVSSxNQUpUO0VBS2RuQyxXQUFXLEVBQUUrQixxQkFBQSxDQUFVSSxNQUxUO0VBTWRWLFlBQVksRUFBRU0scUJBQUEsQ0FBVUksTUFOVjtFQU9kWCxpQkFBaUIsRUFBRU8scUJBQUEsQ0FBVUMsSUFQZjtFQVFkNUIsY0FBYyxFQUFFMkIscUJBQUEsQ0FBVUksTUFSWjtFQVNkNUIsU0FBUyxFQUFFd0IscUJBQUEsQ0FBVUksTUFUUDtFQVVkOUIscUJBQXFCLEVBQUUwQixxQkFBQSxDQUFVQyxJQVZuQjtFQVdkZCxZQUFZLEVBQUVhLHFCQUFBLENBQVVJO0FBWFYsQ0FBbEI7ZUFjZTFDLEsifQ==