UNPKG

styledot

Version:
183 lines (149 loc) 20.3 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 _uid = _interopRequireDefault(require("./utilities/uid")); 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, _uid["default"])('modal'); 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsImVycm9yIiwiY29uc29sZSIsIk1vZGFsIiwicHJvcHMiLCJzdGF0ZSIsImhhc1Njcm9sbGVkIiwiaGFuZGxlU2Nyb2xsIiwiYmluZCIsImNsb3NlTW9kYWwiLCJjdGFQb3NpdGlvbiIsInVpZCIsImRlZmF1bHRDbGFzc2VzIiwiYWx0ZXJuYXRlTW9kYWwiLCJ1c2VXaGl0ZURpc21pc3NCdXR0b24iLCJzaXplQ2xhc3MiLCJtb2RhbFNpemUiLCJvdmVybGF5RGVmYXVsdENsYXNzZXMiLCJ3cmFwcGVyIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2Nyb2xsVG9wIiwic2V0U3RhdGUiLCJpc1Zpc2libGUiLCJjbGFzc1N0cmluZyIsIm1vZGFsU2l6ZUNsYXNzU3RyaW5nIiwib3ZlcmxheUNsYXNzU3RyaW5nIiwiY29udGVudExhYmVsIiwiZGVzY3JpYmVkYnkiLCJtb2RhbCIsImNvbnRlbnRzIiwiX19odG1sIiwiY2hpbGRyZW4iLCJpbmNsdWRlRGlzbWlzc0N0YSIsImV4dHJhQ2xhc3NlcyIsImRpc21pc3NUZXh0IiwiUmVhY3QiLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJib29sIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJzdHJpbmciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL21vZGFsLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGlzIHRoZSBsYXllciB0aGF0IGV4ZWN1dGVzIG9uIHRoZSBvZmZpY2lhbCByZWFjdC1tb2RhbCBjb21wb25lbnRcbi8vIFRoaXMgaXMgYWNjZXNzZWQgYnlcbi8vIC0gbW9kYWwtaW5zdGFuY2UuanN4IChmb3IgUmVhY3QgdXNhZ2UpXG4vLyAtIG1vZGFsLWluaXQuanMgKGZvciB2YW5pbGxhIHVzYWdlKVxuLy8gaHR0cHM6Ly9zdHlsZS4yM2FuZG1lLmNvbS9jb21wb25lbnRzLyNtb2RhbHMtc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcblxuaW1wb3J0IHVpZCBmcm9tICcuL3V0aWxpdGllcy91aWQnO1xuXG50cnkge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudCgnLnNkLW1vZGFsLWFwcC1lbGVtZW50Jyk7XG59IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdBcHAgZWxlbWVudCBtaXNzaW5nIGZvciBTdHlsZURvdCBNb2RhbC4gU2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vc3R5bGUuMjNhbmRtZS5jb20vY29tcG9uZW50cyNtb2RhbHMtc2VjdGlvbidcbiAgICApO1xufVxuXG5jbGFzcyBNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaGFzU2Nyb2xsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbCA9IHRoaXMuaGFuZGxlU2Nyb2xsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCA9IHRoaXMucHJvcHMuY2xvc2VNb2RhbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmN0YVBvc2l0aW9uID0gcHJvcHMuY3RhUG9zaXRpb24gPyBgZGlzbWlzcy1jdGEtJHtwcm9wcy5jdGFQb3NpdGlvbn1gIDogJyc7XG4gICAgICAgIHRoaXMudWlkID0gdWlkKCdtb2RhbCcpO1xuICAgIH1cblxuICAgIGNsYXNzU3RyaW5nKCkge1xuICAgICAgICBsZXQgZGVmYXVsdENsYXNzZXMgPSAnc2QtbW9kYWwgc2QtZWxldmF0aW9uLTInO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbCkge1xuICAgICAgICAgICAgZGVmYXVsdENsYXNzZXMgKz0gYCBzZC1tb2RhbC0ke3RoaXMucHJvcHMuYWx0ZXJuYXRlTW9kYWx9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLnVzZVdoaXRlRGlzbWlzc0J1dHRvbikge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDbGFzc2VzICs9IGAgbW9kLW1vZGFsLXdoaXRlLWRpc21pc3NgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0Q2xhc3NlcztcbiAgICB9XG4gICAgbW9kYWxTaXplQ2xhc3NTdHJpbmcoKSB7XG4gICAgICAgIGxldCBzaXplQ2xhc3MgPSAnJztcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubW9kYWxTaXplKSB7XG4gICAgICAgICAgICBzaXplQ2xhc3MgPSBgbW9kLW1vZGFsLSR7dGhpcy5wcm9wcy5tb2RhbFNpemV9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2l6ZUNsYXNzO1xuICAgIH1cblxuICAgIG92ZXJsYXlDbGFzc1N0cmluZygpIHtcbiAgICAgICAgbGV0IG92ZXJsYXlEZWZhdWx0Q2xhc3NlcyA9ICdzZC1tb2RhbC1vdmVybGF5JztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbCA9PT0gJ2ludGVyc3RpdGlhbCcgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYWx0ZXJuYXRlTW9kYWwgPT09ICdpbnRlcnN0aXRpYWwtcHJvbW8nIHx8XG4gICAgICAgICAgICB0aGlzLnByb3BzLm1vZGFsU2l6ZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG92ZXJsYXlEZWZhdWx0Q2xhc3NlcyArPSBgIG1vZC1vdmVybGF5LWRhcmtgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdmVybGF5RGVmYXVsdENsYXNzZXM7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNkLW1vZGFsLXdyYXBwZXInKTtcbiAgICAgICAgaWYgKHdyYXBwZXIuc2Nyb2xsVG9wID4gMCAmJiAhdGhpcy5zdGF0ZS5oYXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGhhc1Njcm9sbGVkOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHdyYXBwZXIuc2Nyb2xsVG9wID09PSAwICYmIHRoaXMuc3RhdGUuaGFzU2Nyb2xsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNTY3JvbGxlZDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmVhY3RNb2RhbFxuICAgICAgICAgICAgICAgIGlzT3Blbj17dGhpcy5wcm9wcy5pc1Zpc2libGV9XG4gICAgICAgICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e3RoaXMucHJvcHMuY2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3RoaXMuY2xhc3NTdHJpbmcoKX0gJHt0aGlzLm1vZGFsU2l6ZUNsYXNzU3RyaW5nKCl9YH1cbiAgICAgICAgICAgICAgICBvdmVybGF5Q2xhc3NOYW1lPXt0aGlzLm92ZXJsYXlDbGFzc1N0cmluZygpfVxuICAgICAgICAgICAgICAgIGJvZHlPcGVuQ2xhc3NOYW1lPVwic2QtbW9kYWwtYm9keVwiXG4gICAgICAgICAgICAgICAgY29udGVudExhYmVsPXt0aGlzLnByb3BzLmNvbnRlbnRMYWJlbH1cbiAgICAgICAgICAgICAgICBhcmlhPXt7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZGJ5OiBgbW9kYWwtY29udGVudHMtJHt0aGlzLnVpZH1gLFxuICAgICAgICAgICAgICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgc2QtdW5idXR0b24gc2QtbW9kYWwtZGlzbWlzcy10b3AgJHt0aGlzLnN0YXRlLmhhc1Njcm9sbGVkID8gJ21vZC1zY3JvbGxlZCcgOiAnJ31gfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmNsb3NlTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPXtgbW9kYWwtY29udGVudHMtJHt0aGlzLnVpZH1gfSBjbGFzc05hbWU9XCJzZC1tb2RhbC13cmFwcGVyXCIgb25TY3JvbGw9e3RoaXMuaGFuZGxlU2Nyb2xsfT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY29udGVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhcmVmdWwgaGVyZSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IHRoaXMucHJvcHMuY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVuICYmIHRoaXMucHJvcHMuY2hpbGRyZW59XG5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuaW5jbHVkZURpc21pc3NDdGEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BzZC1tb2RhbC1kaXNtaXNzLWN0YS1jb250YWluZXIgJHt0aGlzLmN0YVBvc2l0aW9ufWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgc2QtYnV0dG9uIHNkLW1vZGFsLWRpc21pc3MtY3RhICR7dGhpcy5wcm9wcy5leHRyYUNsYXNzZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5jbG9zZU1vZGFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZGlzbWlzc1RleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvUmVhY3RNb2RhbD5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbk1vZGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBjb250ZW50czogJycsXG4gICAgZGlzbWlzc1RleHQ6ICdDbG9zZScsXG4gICAgY3RhUG9zaXRpb246ICcnLFxuICAgIGV4dHJhQ2xhc3NlczogJycsXG4gICAgaW5jbHVkZURpc21pc3NDdGE6IHRydWUsXG4gICAgYWx0ZXJuYXRlTW9kYWw6ICcnLFxuICAgIHVzZVdoaXRlRGlzbWlzc0J1dHRvbjogZmFsc2UsXG4gICAgY29udGVudExhYmVsOiAnTW9kYWwnLFxufTtcblxuTW9kYWwucHJvcFR5cGVzID0ge1xuICAgIGlzVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbG9zZU1vZGFsOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnRzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc21pc3NUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGN0YVBvc2l0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4dHJhQ2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpbmNsdWRlRGlzbWlzc0N0YTogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWx0ZXJuYXRlTW9kYWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kYWxTaXplOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHVzZVdoaXRlRGlzbWlzc0J1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29udGVudExhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFJO0VBQ0FBLHNCQUFBLENBQVdDLGFBQVgsQ0FBeUIsdUJBQXpCO0FBQ0gsQ0FGRCxDQUVFLE9BQU9DLEtBQVAsRUFBYztFQUNaQyxPQUFPLENBQUNELEtBQVIsQ0FDSSxnSEFESjtBQUdIOztJQUVLRSxLOzs7OztFQUNGLGVBQVlDLEtBQVosRUFBbUI7SUFBQTs7SUFBQTs7SUFDZiwwQkFBTUEsS0FBTjtJQUNBLE1BQUtDLEtBQUwsR0FBYTtNQUNUQyxXQUFXLEVBQUU7SUFESixDQUFiO0lBR0EsTUFBS0MsWUFBTCxHQUFvQixNQUFLQSxZQUFMLENBQWtCQyxJQUFsQiwrQkFBcEI7SUFDQSxNQUFLQyxVQUFMLEdBQWtCLE1BQUtMLEtBQUwsQ0FBV0ssVUFBWCxDQUFzQkQsSUFBdEIsK0JBQWxCO0lBQ0EsTUFBS0UsV0FBTCxHQUFtQk4sS0FBSyxDQUFDTSxXQUFOLHlCQUFtQ04sS0FBSyxDQUFDTSxXQUF6QyxJQUF5RCxFQUE1RTtJQUNBLE1BQUtDLEdBQUwsR0FBVyxJQUFBQSxlQUFBLEVBQUksT0FBSixDQUFYO0lBUmU7RUFTbEI7Ozs7V0FFRCx1QkFBYztNQUNWLElBQUlDLGNBQWMsR0FBRyx5QkFBckI7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