text: import React from 'react'
  import ReactDOM from 'react-dom'
  import createBrowserHistory from 'history/lib/createBrowserHistory'
  import { Router, useRouterHistory } from 'react-router'
  import { syncHistoryWithStore } from 'react-router-redux'
  import createStore from './store/createStore'
  import { Provider } from 'react-redux'
  import { getNotificationPermission } from 'utils/notifications'
  
  const MOUNT_ELEMENT = document.getElementById('root')
  
  // Configure history for react-router
  const browserHistory = useRouterHistory(createBrowserHistory)({
    basename: __BASENAME__
  })
  
  getNotificationPermission()
  
  // Create redux store and sync with react-router-redux. We have installed the
  // react-router-redux reducer under the key "router" in src/routes/index.js,
  // so we need to provide a custom `selectLocationState` to inform
  // react-router-redux of its location.
  const store = createStore(window.__INITIAL_STATE__, browserHistory)
  const history = syncHistoryWithStore(browserHistory, store, {
    selectLocationState: (state) => state.router
  })
  
  let render = (key = null) => {
    const routes = require('./routes/index').default(store)
    const App = (
      <Provider store={store}>
        <div style={{ height: '100%' }}>
          <Router history={history} children={routes} key={key} />
        </div>
      </Provider>
    )
    ReactDOM.render(App, MOUNT_ELEMENT)
  }
  
  // Enable HMR and catch runtime errors in RedBox
  // This code is excluded from production bundle
  if (__DEV__ && module.hot) {
    const renderApp = render
    const renderError = (error) => {
      const RedBox = require('redbox-react')
  
      ReactDOM.render(<RedBox error={error} />, MOUNT_ELEMENT)
    }
    render = () => {
      try {
        renderApp(Math.random())
      } catch (error) {
        renderError(error)
      }
    }
    module.hot.accept(['./routes/index'], () => render())
  }
  
  // Use Redux DevTools chrome extension
  if (__DEBUG__) {
    if (window.devToolsExtension) window.devToolsExtension.open()
  }
  
  render()
  