{ "version": 3, "sources": ["../../../../../../owl-nest/ulule/features/project/src/index.tsx", "../../../../../../owl-nest/ulule/features/project/src/store.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/index.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/channel.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/comments.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/events.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/fandom.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/faq.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/followModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/impact.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/paymentDisturbanceModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/postCampaignModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/rewardModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/shareOverlay.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/submitModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/supporter.ts", "../../../../../../owl-nest/ulule/features/project/src/actions/supporter.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/modals/variantModal.ts", "../../../../../../owl-nest/ulule/features/project/src/reducers/project.ts", "../../../../../../owl-nest/ulule/features/project/src/public/utils/message.tsx", "../../../../../../owl-nest/ulule/features/project/src/MainRouter.tsx", "../../../../../../owl-nest/ulule/features/project/src/public/models/project.ts"], "sourcesContent": ["import * as React from 'react'\n\nimport * as ReactDOM from 'react-dom/client'\nimport * as Redux from 'react-redux'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Store, AnyAction } from 'redux'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as consent from '@owl-nest/consent'\nimport * as error from '@owl-nest/error'\nimport * as fb from '@owl-nest/facebook-sdk-init'\nimport { initializeLocalization, t } from '@owl-nest/localize'\nimport * as logger from '@owl-nest/logger'\nimport * as model from '@owl-nest/models'\nimport { State } from '@owl-nest/redux-wrapper'\nimport * as services from '@owl-nest/services'\nimport * as shadow from '@owl-nest/shadow'\nimport * as messages from '@owl-nest/messages'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\n\nimport * as projectModel from './public/models/project'\nimport { AppState, RootState } from './reducers'\nimport { createApplicationStore } from './store'\nimport * as UFE from './UFE'\n\nimport { MainRouter } from './MainRouter'\nimport { ProjectStatus } from '@owl-nest/api-client/latest'\n\ninit()\n\nasync function init(): Promise {\n await env.initUserConfig()\n const userConfig = env.getUserConfig()\n\n logger.init({\n dsn: env.SENTRY_PUBLIC_DSN,\n environment: env.ENVIRONMENT,\n user: {\n country: env.USER_COUNTRY,\n currency: userConfig.currency,\n email: UFE.CURRENT_USER.email,\n id: UFE.CURRENT_USER.id,\n isActive: UFE.CURRENT_USER.is_active,\n isGuest: UFE.CURRENT_USER.is_guest,\n locale: userConfig.lang,\n },\n })\n logger.setTag('feature', 'project-page')\n logger.setTag('project', UFE.PROJECT.id)\n\n fb.init({ appId: env.FACEBOOK_APP_ID ?? '', locale: api.EXTENDED_LOCALES[userConfig.lang] })\n\n // get project page \"access token\" from search params, and rewrite the url to remove it\n const urlSearchParams = new URLSearchParams(window.location.search)\n let token = urlSearchParams.get('token') || undefined\n if (token !== undefined) {\n const url = new URL(window.location.href)\n urlSearchParams.delete('token')\n url.search = urlSearchParams.toString()\n history.replaceState(null, document.title, url.toString())\n }\n\n await initializeLocalization(userConfig.lang, env.LOCALE_FILES[userConfig.lang])\n\n consent.whenGivenFor(consent.Vendor.ZENDESK, {\n do: () => window.zE && window.zE('webWidget', 'updateSettings', { analytics: true, cookies: true }),\n otherwise: () => window.zE && window.zE('webWidget', 'updateSettings', { analytics: false, cookies: false }),\n })\n\n let initialError\n const response = await services.project\n .load(UFE.PROJECT.slug || String(UFE.PROJECT.id), {\n withToken: UFE.CURRENT_USER.is_authenticated,\n projectToken: token,\n extraFields: model.project.OWNER_EXTRA_FIELDS,\n identifier: UFE.PROJECT.slug ? 'slug' : undefined,\n })\n .catch((error) => {\n initialError = error\n })\n\n const project = response && response.isRight() ? response.unwrap() : undefined\n if (!project) {\n return handleGlobalError(initialError, response)\n }\n\n // if project fetched with the \"access token\" is not online and has no read\n // permission, then the access token is invalid and should be discarded.\n if (\n project.status !== ProjectStatus.ONLINE &&\n !model.project.hasSelfPermission(project, api.ProjectSelfPermission.READ)\n ) {\n token = undefined\n }\n\n if (UFE.REQUEST.path?.indexOf('impact') === -1) {\n if (\n model.project.video(project)?.provider_name?.toLowerCase() === 'youtube' ||\n UFE.CURRENT_USER?.id === project.owner.id\n ) {\n // FIXME: This needs to be moved upper on the workflow AND be subject to consent\n // NOTE: Load `iframe_api` to control YouTube players when needed\n const script = document.createElement('script')\n script.src = 'https://www.youtube.com/iframe_api'\n document.body.appendChild(script)\n }\n }\n\n const store = createApplicationStore(project, token)\n\n // reactive bind page title to project name. Reactivity needed because project if re-fetched during the application lifetime (on login in the comment section/comming soon like)\n store.subscribe(() => {\n const state = store.getState()\n const project = state.application.project.data\n document.title = !model.project.isCancelled(project)\n ? (model.project.name(project) ?? t('Untitled Project'))\n : t('Archived project')\n })\n\n renderApp(store)\n}\n\nfunction renderApp(store: Store, AnyAction>): void {\n const appContainer = document.querySelector('#js-project-detail')\n if (appContainer) {\n const root = ReactDOM.createRoot(appContainer)\n root.render(\n \n \n ,\n )\n } else {\n logger.err('[project] App container is missing')\n }\n}\n\nfunction App(): React.ReactElement {\n const auth = services.user.useAuth()\n const project = Redux.useSelector((state) => state.application.project.data)\n\n const slug = UFE.PROJECT.slug || UFE.PROJECT.id\n const basename = UFE.REQUEST.path?.startsWith(`/projects/${slug}`) ? `/projects/${slug}/` : `/${slug}/`\n\n React.useEffect(() => {\n if (auth.type === 'loggedin' && project.user_role === api.UserRole.Owner) {\n if (window.zE) {\n window.zE('webWidget', 'hide')\n }\n }\n }, [auth.type, project])\n\n return (\n (auth.type === 'loggedin' ? auth.user.id : undefined)}\n gtmContainerId={UFE.GTM_KEY}\n pageCategory=\"project\"\n siteCategory={shadow.SITE.ULULE}\n project={project as api.Project<'analytics'>}\n >\n \n \n \n \n \n \n \n )\n}\n\n// TODO: Move somewhere it can be easily visible and reused\ndeclare global {\n interface Window {\n zE?: {\n (type: 'webWidget:on' | 'webWidget' | 'webWidget:get', command: string, payload?: unknown): void\n (type: 'webWidget', command: 'updateSettings', payload: Record): void\n }\n }\n}\n\nfunction handleGlobalError(\n initialError: any,\n response: api.HttpResult> | void,\n) {\n let unwrappedResponse\n if (response) {\n unwrappedResponse = response.isLeft() ? response.unwrapLeft() : undefined\n }\n const message = Array.isArray(unwrappedResponse?.body)\n ? unwrappedResponse.body[0].message\n : unwrappedResponse?.body?.message\n const reason = (initialError ? initialError : message) ?? 'Could not determine reason'\n error.renderCrashToast('project', reason, {\n response,\n })\n}\n", "import { Store, AnyAction } from 'redux'\nimport * as jotai from 'jotai'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport { createStore } from '@owl-nest/redux-wrapper'\n\nimport { Project } from './public/models/project'\nimport { AppState, RootState, makeReducer } from './reducers'\nimport { getMessages } from './public/utils/message'\nimport * as UFE from './UFE'\nimport * as fan from './reducers/fandom'\nimport { Level, SYNC } from '@owl-nest/redux-wrapper/src/messages/actions'\nimport { Message } from '@owl-nest/redux-wrapper/src/messages/reducer'\nimport * as services from '@owl-nest/services'\n\nconst store = jotai.getDefaultStore()\n\nexport function createApplicationStore(project: Project, token?: string): Store {\n initSharedMessages(project)\n initSharedAuth()\n\n const defaultFollowers = [\n api.UserRole.Editor,\n api.UserRole.Fan,\n api.UserRole.Moderator,\n api.UserRole.Owner,\n api.UserRole.Supporter,\n ]\n const userIsAFollower = !!project.user_role && defaultFollowers.includes(project.user_role)\n\n return createStore(makeReducer(project) as any, [], {\n application: {\n fandom: {\n ...fan.initialState,\n userIsAFollower,\n },\n project: { data: project, token },\n },\n messages: store.get(services.message.MESSAGES_ATOM),\n user: {\n identity: store.get(services.user.AUTH_ATOM),\n },\n })\n}\n\nfunction initSharedMessages(project: Project) {\n const notifications = UFE.NOTIFICATIONS || []\n const initialMessages = notifications.map(\n (notification) =>\n ({\n message: notification.children,\n level: notification.tags as Level,\n }) as Message,\n )\n const messages = [...getMessages(project), ...initialMessages]\n\n store.set(services.message.MESSAGES_ATOM, { type: SYNC, state: messages })\n}\n\nfunction initSharedAuth() {\n const user = UFE.CURRENT_USER\n\n store.set(\n services.user.AUTH_ATOM,\n services.user.actions.sync(\n user.is_authenticated\n ? {\n type: 'loggedin',\n authenticatedUser: user,\n extraFields: [],\n isLoggingOut: false,\n isRefreshing: false,\n }\n : {\n type: 'unknown',\n isIdentifying: false,\n },\n ),\n )\n}\n", "import { combineReducers, Reducer, AnyAction, UnknownAction, Action } from 'redux'\n\nimport { State } from '@owl-nest/redux-wrapper'\n\nimport { Project } from '../public/models/project'\n\nimport * as channel from './channel'\nimport * as comments from './comments'\nimport * as events from './events'\nimport * as fandom from './fandom'\nimport * as faq from './faq'\nimport * as followModal from './modals/followModal'\nimport * as impact from './impact'\nimport * as paymentDisturbanceModal from './modals/paymentDisturbanceModal'\nimport * as postCampaignModal from './modals/postCampaignModal'\nimport * as rewardModal from './modals/rewardModal'\nimport * as shareOverlay from './modals/shareOverlay'\nimport * as submitModal from './modals/submitModal'\nimport * as supporter from './supporter'\nimport * as variantModal from './modals/variantModal'\nimport { State as ProjectState, reducerMaker } from './project'\n\nexport type AppState = {\n channel: channel.State\n comments: comments.State\n events: events.State\n fandom: fandom.State\n faq: faq.State\n followModal: followModal.State\n impact: impact.State\n paymentDisturbanceModal: paymentDisturbanceModal.State\n postCampaingModal: postCampaignModal.State\n project: ProjectState\n rewardModal: rewardModal.State\n shareOverlay: shareOverlay.State\n submitModal: submitModal.State\n supporter: supporter.State\n variantModal: variantModal.State\n}\n\nexport type RootState = State\n\nexport const makeReducer = (project: Project) => {\n return combineReducers({\n channel: channel.reducer,\n comments: comments.reducer,\n events: events.reducer,\n fandom: fandom.reducer,\n faq: faq.reducer,\n followModal: followModal.reducer,\n impact: impact.reducer,\n paymentDisturbanceModal: paymentDisturbanceModal.reducer,\n postCampaingModal: postCampaignModal.reducer,\n project: reducerMaker(project),\n rewardModal: rewardModal.reducer,\n shareOverlay: shareOverlay.reducer,\n submitModal: submitModal.reducer,\n supporter: supporter.reducer,\n variantModal: variantModal.reducer,\n })\n}\n", "import * as api from '@owl-nest/api-client/latest'\nimport { ACTION_TYPE, ChannelAction } from '../actions/channel'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nexport type State = {\n channels: api.Channel[]\n next: string | null\n status: {\n load: Status\n }\n}\n\nexport const initialState: State = {\n channels: [],\n next: null,\n status: {\n load: Status.PRISTINE,\n },\n}\n\nexport function reducer(state = initialState, action: ChannelAction): State {\n switch (action.type) {\n case ACTION_TYPE.LOAD_CHANNELS_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.LOAD_CHANNELS_FAILURE: {\n return {\n ...state,\n channels: [],\n next: null,\n status: {\n ...state.status,\n load: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.LOAD_CHANNELS_SUCCESS: {\n if (action.success.forceClean) {\n return {\n ...state,\n channels: action.success.channels,\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n return {\n ...state,\n channels: state.channels.concat(action.success.channels),\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n default:\n return state\n }\n}\n", "import { RequestFailure } from '@owl-nest/api-client'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nimport * as api from '@owl-nest/api-client/latest'\n\nimport { TYPE, Action } from '../actions/comments'\n\nexport type CommentList = {\n parentId: number\n comments: api.Comment[]\n newComments: api.Comment[]\n size: number\n next: string | null\n}\n\nexport type State = {\n cacheId?: string\n list: {\n [s in number]?: CommentList\n } & {\n root?: {\n parentId: 'root'\n comments: api.Comment[]\n newComments: api.Comment[]\n size: number\n next: string | null\n }\n }\n status: {\n loadRoot:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n createRoot:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n loadReply:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n createReply:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n delete:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n }\n}\n\nconst initialState: State = {\n cacheId: undefined,\n list: {},\n status: {\n loadRoot: { status: Status.PRISTINE },\n createRoot: { status: Status.PRISTINE },\n createReply: { status: Status.PRISTINE },\n loadReply: { status: Status.PRISTINE },\n delete: { status: Status.PRISTINE },\n },\n}\n\nexport function reducer(state = initialState, action: Action): State {\n switch (action.type) {\n case TYPE.LOAD_ROOT_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n loadRoot: { status: Status.PENDING },\n },\n }\n }\n case TYPE.LOAD_ROOT_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n loadRoot: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.LOAD_ROOT_SUCCESS: {\n const rootList = state.list.root\n if (rootList === undefined || action.success.cacheId !== state.cacheId || action.success.forceClean) {\n const list: State['list'] = {\n root: {\n parentId: 'root',\n comments: action.success.comments,\n newComments: [],\n next: action.success.meta.next,\n size: action.success.size,\n },\n }\n for (const comment of action.success.comments) {\n const lastReply = comment.replies?.[comment.replies?.length - 1]\n const cursor = lastReply ? new Date(lastReply?.submit_date).getTime() : Date.now()\n list[comment.id] = {\n parentId: comment.id,\n comments: comment.replies || [],\n newComments: [],\n // when computing the cursor for the replies we use ceil instead of floor\n // because the order is reversed (older to newer).\n // If we have the last comment at x.300s, using floor would put the cursor at\n // x, and we would reload this last comment (since x.300 comes before the cursor in older to newer order).\n // using ceil put the cusor at x+1, wich comes after x.300, so we wont have double load.\n next: `?limit=${10}&since=${Math.ceil(cursor / 1000)}`,\n size: comment.replies_count,\n }\n }\n\n return {\n ...state,\n cacheId: action.success.cacheId,\n list,\n status: {\n ...state.status,\n loadRoot: { status: Status.SUCCESS },\n },\n }\n } else {\n const list: State['list'] = {\n ...state.list,\n root: {\n ...rootList,\n comments: [...rootList.comments, ...action.success.comments],\n next: action.success.meta.next,\n },\n }\n for (const comment of action.success.comments) {\n const lastReply = comment.replies?.[comment.replies?.length - 1]\n const cursor = lastReply ? new Date(lastReply?.submit_date).getTime() : Date.now()\n list[comment.id] = {\n parentId: comment.id,\n comments: comment.replies || [],\n newComments: [],\n // when computing the cursor for the replies we use ceil instead of floor\n // because the order is reversed (older to newer).\n // If we have the last comment at x.300s, using floor would put the cursor at\n // x, and we would reload this last comment (since x.300 comes before the cursor in older to newer order).\n // using ceil put the cusor at x+1, wich comes after x.300, so we wont have double load.\n next: `?limit=${10}&since=${Math.ceil(cursor / 1000)}`,\n size: comment.replies_count,\n }\n }\n\n return {\n ...state,\n list,\n status: {\n ...state.status,\n loadRoot: { status: Status.SUCCESS },\n },\n }\n }\n }\n\n case TYPE.CREATE_ROOT_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n createRoot: { status: Status.PENDING },\n },\n }\n }\n case TYPE.CREATE_ROOT_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n createRoot: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.CREATE_ROOT_SUCCESS: {\n const rootList = state.list.root\n if (rootList === undefined) {\n throw Error(\"You can't create root comments if root list was not loaded first\")\n }\n\n return {\n ...state,\n list: {\n ...state.list,\n root: {\n ...rootList,\n newComments: [action.success, ...rootList.newComments],\n },\n [action.success.id]: {\n parentId: action.success.id,\n comments: [],\n newComments: [],\n // when computing the cursor for the replies we use ceil instead of floor\n // because the order is reversed (older to newer).\n // If we have the last comment at x.300s, using floor would put the cursor at\n // x, and we would reload this last comment (since x.300 comes before the cursor in older to newer order).\n // using ceil put the cusor at x+1, wich comes after x.300, so we wont have double load.\n next: `?limit=${10}&since=${Math.ceil(new Date(action.success.submit_date).getTime() / 1000)}`,\n size: 0,\n },\n },\n status: {\n ...state.status,\n createRoot: { status: Status.SUCCESS },\n },\n }\n }\n\n case TYPE.LOAD_REPLY_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n loadReply: { status: Status.PENDING },\n },\n }\n }\n case TYPE.LOAD_REPLY_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n loadReply: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.LOAD_REPLY_SUCCESS: {\n const commentList = state.list[action.success.parentId]\n if (commentList === undefined) {\n throw Error(\"You can't load replies for a comment that was not loaded first\")\n }\n\n return {\n ...state,\n list: {\n ...state.list,\n [action.success.parentId]: {\n ...commentList,\n comments: [...commentList.comments, ...action.success.comments],\n // when we load new replies, we are bound to load newly created comments\n // (because replies are ordered older to newer). When this happens, we\n // need to remove them from the `newComments` list.\n newComments: commentList.newComments.filter(comment => {\n return action.success.comments.every(loadedComment => loadedComment.id !== comment.id)\n }),\n next: action.success.meta.next,\n },\n },\n status: {\n ...state.status,\n createReply: { status: Status.SUCCESS },\n },\n }\n }\n\n case TYPE.CREATE_REPLY_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n createReply: { status: Status.PRISTINE },\n },\n }\n }\n case TYPE.CREATE_REPLY_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n createReply: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.CREATE_REPLY_SUCCESS: {\n const commentList = state.list[action.success.parentId]\n if (commentList === undefined) {\n throw Error(\"You can't create replies for a comment that was not loaded first\")\n }\n\n return {\n ...state,\n list: {\n ...state.list,\n [action.success.parentId]: {\n ...commentList,\n newComments: [...commentList.newComments, action.success],\n },\n },\n status: {\n ...state.status,\n createReply: { status: Status.SUCCESS },\n },\n }\n }\n\n case TYPE.DELETE_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n delete: { status: Status.PENDING },\n },\n }\n }\n case TYPE.DELETE_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n delete: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.DELETE_SUCCESS: {\n let nextState = state\n\n const parentCommentList = state.list[action.success.parentId]\n if (parentCommentList !== undefined) {\n nextState = {\n ...nextState,\n list: {\n ...nextState.list,\n [action.success.parentId]: {\n ...parentCommentList,\n comments: (parentCommentList.comments as api.Comment[]).filter(\n comment => comment.id !== action.success.id,\n ),\n newComments: (parentCommentList.newComments as api.Comment[]).filter(\n comment => comment.id !== action.success.id,\n ),\n },\n },\n }\n }\n\n delete nextState.list[action.success.id]\n\n return {\n ...nextState,\n status: {\n ...state.status,\n delete: { status: Status.SUCCESS },\n },\n }\n }\n }\n\n return state\n}\n", "import { RequestFailure } from '@owl-nest/api-client'\nimport { Status } from '@owl-nest/redux-wrapper'\nimport * as api from '@owl-nest/api-client/latest'\n\nimport { TYPE, Action } from '../actions/events'\n\nexport type State = {\n cacheId?: number\n draftNews: api.News[]\n list?: {\n next: string | null\n events: api.Event[]\n }\n\n status: {\n load:\n | { status: Status.PRISTINE | Status.PENDING | Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n }\n}\n\nconst initialState: State = {\n draftNews: [],\n status: { load: { status: Status.PRISTINE } },\n}\n\nexport function reducer(state = initialState, action: Action): State {\n switch (action.type) {\n case TYPE.LOAD_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: { status: Status.PENDING },\n },\n }\n }\n case TYPE.LOAD_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n load: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n case TYPE.LOAD_SUCCESS: {\n if (action.success.cacheId !== state.cacheId || state.list === undefined || action.success.forceClean) {\n return {\n ...state,\n draftNews: action.success.draft_news || [],\n cacheId: action.success.cacheId,\n list: {\n events: [...(action.success.events || [])],\n next: action.success.meta.next,\n },\n status: {\n ...state.status,\n load: { status: Status.SUCCESS },\n },\n }\n } else {\n return {\n ...state,\n draftNews: action.success.draft_news || state.draftNews,\n list: {\n events: [...state.list.events, ...(action.success.events || [])],\n next: action.success.meta.next,\n },\n status: {\n ...state.status,\n load: { status: Status.SUCCESS },\n },\n }\n }\n }\n case TYPE.RESET: {\n return initialState\n }\n }\n\n return state\n}\n", "import { ACTION_TYPE, FanAction } from '../actions/fandom'\nimport { Fan } from '../public/models/fan'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nexport type State = {\n userIsAFollower: boolean\n fans: Fan[]\n next: string | null\n count: number\n status: {\n load: Status\n }\n}\n\nexport const initialState: State = {\n userIsAFollower: false,\n fans: [],\n next: null,\n count: 0,\n status: {\n load: Status.PRISTINE,\n },\n}\n\nexport function reducer(state = initialState, action: FanAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_USER_STATUS:\n return {\n ...state,\n userIsAFollower: action.isFollowing,\n }\n case ACTION_TYPE.LOAD_FANS_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.LOAD_FANS_FAILURE: {\n return {\n ...state,\n fans: [],\n next: null,\n status: {\n ...state.status,\n load: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.LOAD_FANS_SUCCESS: {\n if (action.success.forceClean) {\n return {\n ...state,\n fans: action.success.fans ?? [],\n next: action.success.meta.next,\n count: action.success.meta.total_count,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n return {\n ...state,\n fans: state.fans.concat(action.success.fans ?? []),\n next: action.success.meta.next,\n count: action.success.meta.total_count,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n default:\n return state\n }\n}\n", "import { Faq } from '@owl-nest/api-client/latest'\nimport { ACTION_TYPE, FaqAction } from '../actions/faq'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nexport type State = {\n faq: Faq[]\n next: string | null\n status: {\n load: Status\n creation: Status\n }\n}\n\nexport const initialState: State = {\n faq: [],\n next: null,\n status: {\n load: Status.PRISTINE,\n creation: Status.PRISTINE,\n },\n}\n\nexport function reducer(state = initialState, action: FaqAction): State {\n switch (action.type) {\n case ACTION_TYPE.LOAD_FAQ_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.LOAD_FAQ_FAILURE: {\n return {\n ...state,\n faq: [],\n next: null,\n status: {\n ...state.status,\n load: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.LOAD_FAQ_SUCCESS: {\n if (action.success.forceClean) {\n return {\n ...state,\n faq: action.success.faq,\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n return {\n ...state,\n faq: state.faq.concat(action.success.faq),\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n case ACTION_TYPE.CREATE_FAQ_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n creation: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.CREATE_FAQ_SUCCESS: {\n return {\n ...state,\n status: {\n ...state.status,\n creation: Status.SUCCESS,\n },\n }\n }\n case ACTION_TYPE.CREATE_FAQ_FAILURE: {\n return {\n ...state,\n status: {\n ...state.status,\n creation: Status.FAILURE,\n },\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n}\n\nexport const initialState: State = {\n open: false,\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_FOLLOW: {\n return {\n ...state,\n open: action.isOpen,\n }\n }\n default:\n return state\n }\n}\n", "import { RequestFailure } from '@owl-nest/api-client'\nimport * as model from '@owl-nest/models'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nimport { TYPE, Action } from '../actions/impact'\n\nexport type State = {\n data?: model.impact.Impact\n status: {\n load:\n | { status: Status.PENDING; projectId: number }\n | { status: Status.PRISTINE }\n | { status: Status.SUCCESS }\n | { status: Status.FAILURE; failure: RequestFailure }\n }\n}\n\nexport const initialState: State = {\n status: {\n load: { status: Status.PRISTINE },\n },\n}\n\nexport function reducer(state = initialState, action: Action): State {\n switch (action.type) {\n case TYPE.LOAD_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: { status: Status.PENDING, projectId: action.projectId },\n },\n }\n }\n\n case TYPE.LOAD_FAILURE: {\n return {\n ...state,\n data: undefined,\n status: {\n ...state.status,\n load: { status: Status.FAILURE, failure: action.failure },\n },\n }\n }\n\n case TYPE.LOAD_SUCCESS: {\n return {\n ...state,\n data: action.success,\n status: {\n ...state.status,\n load: { status: Status.SUCCESS },\n },\n }\n }\n\n case TYPE.SET: {\n return {\n ...state,\n data: action.impact,\n status: {\n ...state.status,\n load: { status: Status.SUCCESS },\n },\n }\n }\n\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n}\n\nexport const initialState: State = {\n open: false,\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_PAYMENT_DISTURBANCE: {\n return {\n ...state,\n open: action.isOpen,\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n}\n\nexport const initialState: State = {\n open: false,\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_POSTCAMPAIGN: {\n return {\n ...state,\n open: action.isOpen,\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n rewardId: string\n}\n\nexport const initialState: State = {\n open: false,\n rewardId: '',\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_REWARD: {\n return {\n ...state,\n open: action.isOpen,\n ...(action?.extra?.id && { rewardId: action.extra.id }),\n }\n }\n case ACTION_TYPE.SET_REWARD_ID: {\n return {\n ...state,\n rewardId: action.id,\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n}\n\nexport const initialState: State = {\n open: false,\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_SHARE_OVERLAY: {\n return {\n ...state,\n open: action.isOpen,\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n handleClose: () => void\n handleSubmit: () => void\n}\n\nexport const initialState: State = {\n open: false,\n handleClose: () => {},\n handleSubmit: () => {},\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_SUBMIT_FOR_REVIEW: {\n return {\n ...state,\n open: action.isOpen,\n }\n }\n case ACTION_TYPE.STORE_SUBMIT_CONFIRMATION_HANDLER: {\n return {\n ...state,\n handleClose: action.handleClose,\n handleSubmit: action.handleSubmit,\n }\n }\n default:\n return state\n }\n}\n", "import { ACTION_TYPE, SupporterAction } from '../actions/supporter'\nimport { Supporter } from '../public/models/supporter'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nexport type State = {\n supporters: Supporter[]\n next: string | null\n status: {\n load: Status\n }\n}\n\nexport const initialState: State = {\n supporters: [],\n next: null,\n status: {\n load: Status.PRISTINE,\n },\n}\n\nexport function reducer(state = initialState, action: SupporterAction): State {\n switch (action.type) {\n case ACTION_TYPE.LOAD_SUPPORTERS_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.LOAD_SUPPORTERS_FAILURE: {\n return {\n ...state,\n supporters: [],\n next: null,\n status: {\n ...state.status,\n load: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.LOAD_SUPPORTERS_SUCCESS: {\n if (action.success.forceClean) {\n return {\n ...state,\n supporters: action.success.supporters,\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n return {\n ...state,\n supporters: state.supporters.concat(action.success.supporters),\n next: action.success.meta.next,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n default:\n return state\n }\n}\n", "import { ApiResponse, RequestFailure } from '@owl-nest/api-client'\nimport * as api from '@owl-nest/api-client/latest'\nimport { PromiseAction } from '@owl-nest/redux-wrapper'\nimport { RootState } from '../reducers'\nimport { ExtraFields } from '../public/models/supporter'\n\nexport enum ACTION_TYPE {\n LOAD_SUPPORTERS_REQUEST = 'LOAD_SUPPORTERS_REQUEST',\n LOAD_SUPPORTERS_SUCCESS = 'LOAD_SUPPORTERS_SUCCESS',\n LOAD_SUPPORTERS_FAILURE = 'LOAD_SUPPORTERS_FAILURE',\n}\n\ntype LoadSupporterFailure = { type: ACTION_TYPE.LOAD_SUPPORTERS_FAILURE; failure: RequestFailure }\ntype LoadSupporterRequest = { type: ACTION_TYPE.LOAD_SUPPORTERS_REQUEST }\ntype LoadSupporterSuccess = {\n type: ACTION_TYPE.LOAD_SUPPORTERS_SUCCESS\n success: api.Pageable> & { forceClean: boolean }\n}\n\ntype LoadConfig = {\n pagination?: string\n extraFields?: EXTRA_FIELDS[]\n forceClean?: boolean\n}\n\nexport function loadProjectSupporters(\n projectId: number,\n { pagination, extraFields = [], forceClean = false }: LoadConfig = {},\n): PromiseAction> & { forceClean: boolean }>> {\n const search = pagination !== undefined ? new URLSearchParams(pagination.slice(1)) : new URLSearchParams()\n search.set('extra_fields', extraFields.join(','))\n\n return {\n types: [\n ACTION_TYPE.LOAD_SUPPORTERS_REQUEST,\n ACTION_TYPE.LOAD_SUPPORTERS_SUCCESS,\n ACTION_TYPE.LOAD_SUPPORTERS_FAILURE,\n ],\n promise: async (_, state) => {\n const response = await api.api.get.projectSupporter({\n urlParams: { projectId: projectId.toString() },\n getParams: search,\n withToken: state.user.identity.type === 'loggedin',\n })\n return response.next(\n (success) =>\n ({ ...success.body, forceClean } as api.Pageable> & { forceClean: boolean }),\n )\n },\n }\n}\n\nexport type SupporterAction = LoadSupporterRequest | LoadSupporterSuccess | LoadSupporterFailure\n", "import { ACTION_TYPE, ModalAction } from '../../actions/modal'\n\nexport type State = {\n open: boolean\n rewardId: string\n}\n\nexport const initialState: State = {\n open: false,\n rewardId: '',\n}\n\nexport function reducer(state = initialState, action: ModalAction): State {\n switch (action.type) {\n case ACTION_TYPE.TOGGLE_MODAL_VARIANT: {\n return {\n ...state,\n open: action.isOpen,\n ...(action?.extra?.id && { rewardId: action.extra.id }),\n }\n }\n case ACTION_TYPE.SET_SELECTED_REWARD_ID: {\n return {\n ...state,\n rewardId: action.id,\n }\n }\n default:\n return state\n }\n}\n", "import * as Redux from 'redux'\nimport { Project } from '../public/models/project'\nimport { ACTION_TYPE, ProjectAction } from '../actions/project'\nimport { RequestFailure } from '@owl-nest/api-client'\nimport { Status } from '@owl-nest/redux-wrapper'\n\nexport type State = {\n token?: string\n data: Project\n failure?: RequestFailure\n status: {\n load: Status\n update: Status\n computeExamples: Status\n submit: Status\n }\n}\n\nexport function reducerMaker(project: Project): Redux.Reducer {\n const initialState: State = {\n data: project,\n status: {\n load: Status.PRISTINE,\n update: Status.PRISTINE,\n computeExamples: Status.PRISTINE,\n submit: Status.PRISTINE,\n },\n }\n\n return function (state = initialState, action: ProjectAction): State {\n switch (action.type) {\n case ACTION_TYPE.UPDATE_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n update: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.UPDATE_FAILURE: {\n return {\n ...state,\n failure: action.failure,\n status: {\n ...state.status,\n update: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.UPDATE_SUCCESS: {\n return {\n ...state,\n failure: undefined,\n data: action.success,\n status: {\n ...state.status,\n update: Status.SUCCESS,\n },\n }\n }\n case ACTION_TYPE.COMPUTE_EXAMPLES_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n computeExamples: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.COMPUTE_EXAMPLES_FAILURE: {\n return {\n ...state,\n failure: action.failure,\n status: {\n ...state.status,\n computeExamples: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.COMPUTE_EXAMPLES_SUCCESS: {\n return {\n ...state,\n failure: undefined,\n data: {\n ...state.data,\n // any is needed because examples is undefined given the extra_fields\n // defined\n examples: action.success as any,\n },\n status: {\n ...state.status,\n computeExamples: Status.SUCCESS,\n },\n }\n }\n case ACTION_TYPE.SUBMIT_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n submit: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.SUBMIT_FAILURE: {\n return {\n ...state,\n failure: action.failure,\n status: {\n ...state.status,\n submit: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.SUBMIT_SUCCESS: {\n return {\n ...state,\n failure: undefined,\n data: action.success,\n status: {\n ...state.status,\n submit: Status.SUCCESS,\n },\n }\n }\n case ACTION_TYPE.LOAD_REQUEST: {\n return {\n ...state,\n status: {\n ...state.status,\n load: Status.PENDING,\n },\n }\n }\n case ACTION_TYPE.LOAD_FAILURE: {\n return {\n ...state,\n failure: action.failure,\n status: {\n ...state.status,\n load: Status.FAILURE,\n },\n }\n }\n case ACTION_TYPE.LOAD_SUCCESS: {\n return {\n ...state,\n data: action.success,\n status: {\n ...state.status,\n load: Status.SUCCESS,\n },\n }\n }\n default:\n return state\n }\n }\n}\n", "import * as React from 'react'\nimport styled from 'styled-components'\n\nimport { t, tc } from '@owl-nest/localize'\nimport { Messages } from '@owl-nest/redux-wrapper/src/messages/reducer'\nimport * as model from '@owl-nest/models'\nimport { Project, ProjectSelfPermission } from '@owl-nest/api-client/latest'\nimport { BREAKPOINTS, COLORS, glyphs, Link, styles as S } from '@ulule/owl-kit-components/next'\n\nconst Content = styled.div`\n ${S.copy.S} {\n text-align: center;\n }\n\n ${Link} {\n margin-left: 3px;\n font-weight: inherit;\n }\n`\nconst Info = styled.div`\n align-items: center;\n display: flex;\n justify-content: center;\n margin-bottom: 4px;\n\n ${S.heading.XXXXS} {\n color: ${COLORS.PRIMARY_GREY_900};\n }\n\n ${glyphs.Icon} {\n margin-right: 7px;\n }\n\n @media screen and ${BREAKPOINTS.LAPTOP} {\n margin-bottom: 0px;\n }\n`\n\nconst Mobile = styled.div`\n display: block;\n\n ${S.copy.S} {\n text-align: center;\n }\n\n @media screen and ${BREAKPOINTS.LAPTOP} {\n display: none;\n }\n`\n\nexport function getMessages(project: Project): Messages {\n // USER & CLIENT STATE\n const userPermissions = project.permissions.self\n const userCanEdit = userPermissions?.includes(ProjectSelfPermission.UPDATE)\n const isMobile = !window.matchMedia(BREAKPOINTS.LAPTOP).matches\n\n // PROJECT STATE\n const isPendingUser = project.status === 'pending-owner'\n const isFinished = model.project.isFinished(project)\n const isExtraTime = project.is_in_extra_time\n const isFunded = project.goal_raised && isFinished\n const userCanAccessBilling = project.billing !== undefined\n const projectHadExtraTime = model.project.hadExtraTime(project)\n\n const messages = {\n ['pending-changes']: {\n context: 'pending-changes',\n level: 'info',\n message: [\n
\n \n {t('Awaiting modifications')}\n \n
,\n
\n \n \n {tc(\n 'Your project is awaiting your modifications if you need help or if your project is ready [link: contact the team]',\n {\n link: ,\n },\n )}\n \n \n
,\n ],\n },\n ['extratime']: {\n context: 'extratime',\n level: 'success',\n message: [\n
\n \n {t('Extended')}\n \n
,\n
\n \n \n {t(\n 'Congratulations, your project is funded and extended! You will receive your first funds in the next few days and people can continue to back your project.',\n )}\n \n \n
,\n ],\n },\n ['extratime_billing']: {\n context: 'extratime_billing',\n level: 'success',\n message: [\n
\n \n {t('Extended')}\n \n
,\n
\n \n \n {t(\n 'Congratulations, your project is funded and extended! You will receive your first funds in the next few days and people can continue to back your project.',\n )}\n {userCanAccessBilling && project.billing?.invoice && (\n \n {t('Download first invoice.')}\n \n )}\n \n \n
,\n ],\n },\n ['extratime_ended']: {\n context: 'extratime_ended',\n level: 'success',\n message: [\n
\n \n {t('Successfully funded')}\n \n
,\n
\n \n \n {t(\n 'Congratulations, your project is successfully funded, you will receive the funds of your extension period in the next few days, stay in touch with our team.',\n )}\n \n \n
,\n ],\n },\n ['funded']: {\n context: 'funded',\n level: 'success',\n message: [\n
\n \n {t('Successfully funded')}\n \n
,\n
\n \n \n {t(\n 'Congratulations, your project is successfully funded, you will receive your funds in the next few days, stay in touch with our team.',\n )}\n \n \n
,\n ],\n },\n ['funded_billing']: {\n context: 'funded_billing',\n level: 'success',\n message: [\n
\n \n {t('Successfully funded')}\n \n
,\n
\n \n \n {t(\n 'Congratulations, your project is successfully funded, you will receive your funds in the next few days, stay in touch with our team.',\n )}\n {userCanAccessBilling && project.billing?.invoice && (\n \n {t('Download your invoice.')}\n \n )}\n \n \n
,\n ],\n },\n ['mobile']: {\n context: 'mobile',\n level: 'info',\n message: (\n \n \n {t(\n 'To enjoy all our features to create a great project page, we strongly suggest you to do it on a computer!',\n )}\n \n \n ),\n },\n }\n\n type keys =\n | 'pending-changes'\n | 'extratime'\n | 'extratime_billing'\n | 'extratime_ended'\n | 'funded'\n | 'funded_billing'\n | 'mobile'\n let keysArray: keys[] = []\n\n if (userCanEdit) {\n // Mobile : presale isn't finished\n if (isMobile && !isFinished) {\n keysArray = [...keysArray, 'mobile']\n }\n\n // Project is finished and funded\n if (isFinished && isFunded) {\n if (projectHadExtraTime) {\n //Project had extratime\n keysArray = [...keysArray, 'extratime_ended']\n } else if (userCanAccessBilling) {\n // No extratime and funding with billing\n keysArray = [...keysArray, 'funded_billing']\n } else {\n // No extratime and funded without billing\n keysArray = [...keysArray, 'funded']\n }\n }\n\n // Extra-time and first billing done\n if (isExtraTime && userCanAccessBilling) {\n keysArray = [...keysArray, 'extratime_billing']\n } else if (isExtraTime) {\n // Extra-time and first billing not done yet\n keysArray = [...keysArray, 'extratime']\n }\n\n // Pending user update\n if (isPendingUser) {\n keysArray = [...keysArray, 'pending-changes']\n }\n }\n\n const filteredMessages = keysArray.reduce((filteredMessages, message) => {\n filteredMessages = { ...filteredMessages, [message]: messages[message] }\n return filteredMessages\n }, {})\n\n return Object.values(filteredMessages)\n}\n", "import * as React from 'react'\nimport { Navigate, Route, Routes } from 'react-router-dom'\nimport * as Redux from 'react-redux'\n\nimport * as model from '@owl-nest/models'\nimport * as env from '@owl-nest/config'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport { useNavigation } from './public/hooks/useNavigation'\nimport { DetailLayout } from './public/layout/DetailLayout'\nimport * as projectModel from './public/models/project'\nimport { PATHS } from './public/paths'\nimport { ComingSoon } from './public/views/coming-soon'\nimport { RootState } from './reducers'\n\nexport function MainRouter(): React.ReactElement {\n const { project, token } = Redux.useSelector(\n (state) => ({\n project: state.application.project.data,\n token: state.application.project.token,\n }),\n )\n\n const navigation = useNavigation()\n\n const isComingSoonEnabled = model.project.isComingSoonEnabled(project)\n const isForbidden = projectModel.redirectToForbidden(project) && token === undefined\n const redirectToComingSoon = projectModel.redirectToComingSoon(project) && token === undefined\n\n return (\n }>\n \n {isComingSoonEnabled && } />}\n {redirectToComingSoon && (\n } />\n )}\n {isForbidden && } />}\n } />\n \n \n )\n}\n\nfunction Forbidden(): React.ReactElement {\n window.location.href = env.FORBIDDEN_URL\n return <>\n}\n", "import * as api from '@owl-nest/api-client/latest'\nimport * as model from '@owl-nest/models'\n\nexport const extraFields = [\n 'account',\n 'analytics',\n 'answer_code',\n 'billing',\n 'default_manager',\n 'examples',\n 'fields_needed',\n 'fieldsets',\n 'latest_news',\n 'latest_supporter',\n 'links',\n 'manager',\n 'onboarding_steps',\n 'owner.stats',\n 'partnerships',\n 'proposal',\n 'rewards',\n 'sponsorships.channel',\n 'sponsorships',\n 'shippings',\n 'tags',\n 'tax_receipts_available',\n 'thread',\n 'unread_count',\n 'user_orders',\n 'user_role',\n 'user_subscriptions',\n] as const\n\nexport type ExtraFields = (typeof extraFields)[number]\n\nexport type Project = api.Project\n\nexport type UpdateProject = api.UpdateProject\n\nexport function redirectToComingSoon(project: Project): boolean {\n const userPermissions = project.permissions.self\n\n return !userPermissions?.includes(api.ProjectSelfPermission.READ) && model.project.isComingSoonEnabled(project)\n}\n\nexport function redirectToForbidden(project: Project): boolean {\n if (project.status === api.ProjectStatus.ONLINE) {\n return false\n }\n\n const userPermissions = project.permissions.self\n return !userPermissions?.includes(api.ProjectSelfPermission.READ)\n}\n"], "mappings": "0kCAAAA,IAAAC,IAAA,IAAAC,EAAuB,OAEvBC,GAA0B,QCF1BC,IAAAC,ICAAC,IAAAC,ICAAC,IAAAC,IAYO,IAAMC,GAAsB,CACjC,SAAU,CAAC,EACX,KAAM,KACN,OAAQ,CACN,MACF,CACF,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA8B,CAC1E,OAAQA,EAAO,KAAM,CACnB,4BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,4BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,SAAU,CAAC,EACX,KAAM,KACN,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,4BACE,OAAIC,EAAO,QAAQ,WACVC,EAAAC,EAAA,GACFH,GADE,CAEL,SAAUC,EAAO,QAAQ,SACzB,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEKE,EAAAC,EAAA,GACFH,GADE,CAEL,SAAUA,EAAM,SAAS,OAAOC,EAAO,QAAQ,QAAQ,EACvD,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,QACE,OAAOA,CACX,CACF,CCnEAI,IAAAC,IA+CA,IAAMC,GAAsB,CAC1B,QAAS,OACT,KAAM,CAAC,EACP,OAAQ,CACN,SAAU,CAAE,QAAwB,EACpC,WAAY,CAAE,QAAwB,EACtC,YAAa,CAAE,QAAwB,EACvC,UAAW,CAAE,QAAwB,EACrC,OAAQ,CAAE,QAAwB,CACpC,CACF,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAAuB,CA3DrE,IAAAC,EAAAC,EAAAC,EAAAC,EA4DE,OAAQJ,EAAO,KAAM,CACnB,iCACE,OAAOK,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,SAAU,CAAE,QAAuB,CACrC,EACF,GAEF,iCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,SAAU,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAC9D,EACF,GAEF,iCAA6B,CAC3B,IAAMO,EAAWR,EAAM,KAAK,KAC5B,GAAIQ,IAAa,QAAaP,EAAO,QAAQ,UAAYD,EAAM,SAAWC,EAAO,QAAQ,WAAY,CACnG,IAAMQ,EAAsB,CAC1B,KAAM,CACJ,SAAU,OACV,SAAUR,EAAO,QAAQ,SACzB,YAAa,CAAC,EACd,KAAMA,EAAO,QAAQ,KAAK,KAC1B,KAAMA,EAAO,QAAQ,IACvB,CACF,EACA,QAAWS,KAAWT,EAAO,QAAQ,SAAU,CAC7C,IAAMU,GAAYR,EAAAO,EAAQ,UAAR,YAAAP,IAAkBD,EAAAQ,EAAQ,UAAR,YAAAR,EAAiB,QAAS,GACxDU,EAASD,EAAY,IAAI,KAAKA,GAAA,YAAAA,EAAW,WAAW,EAAE,QAAQ,EAAI,KAAK,IAAI,EACjFF,EAAKC,EAAQ,EAAE,EAAI,CACjB,SAAUA,EAAQ,GAClB,SAAUA,EAAQ,SAAW,CAAC,EAC9B,YAAa,CAAC,EAMd,KAAM,mBAAsB,YAAK,KAAKE,EAAS,GAAI,GACnD,KAAMF,EAAQ,aAChB,CACF,CAEA,OAAOJ,EAAAC,EAAA,GACFP,GADE,CAEL,QAASC,EAAO,QAAQ,QACxB,KAAAQ,EACA,OAAQH,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,SAAU,CAAE,QAAuB,CACrC,EACF,EACF,KAAO,CACL,IAAMS,EAAsBH,EAAAC,EAAA,GACvBP,EAAM,MADiB,CAE1B,KAAMM,EAAAC,EAAA,GACDC,GADC,CAEJ,SAAU,CAAC,GAAGA,EAAS,SAAU,GAAGP,EAAO,QAAQ,QAAQ,EAC3D,KAAMA,EAAO,QAAQ,KAAK,IAC5B,EACF,GACA,QAAWS,KAAWT,EAAO,QAAQ,SAAU,CAC7C,IAAMU,GAAYN,EAAAK,EAAQ,UAAR,YAAAL,IAAkBD,EAAAM,EAAQ,UAAR,YAAAN,EAAiB,QAAS,GACxDQ,EAASD,EAAY,IAAI,KAAKA,GAAA,YAAAA,EAAW,WAAW,EAAE,QAAQ,EAAI,KAAK,IAAI,EACjFF,EAAKC,EAAQ,EAAE,EAAI,CACjB,SAAUA,EAAQ,GAClB,SAAUA,EAAQ,SAAW,CAAC,EAC9B,YAAa,CAAC,EAMd,KAAM,mBAAsB,YAAK,KAAKE,EAAS,GAAI,GACnD,KAAMF,EAAQ,aAChB,CACF,CAEA,OAAOJ,EAAAC,EAAA,GACFP,GADE,CAEL,KAAAS,EACA,OAAQH,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,SAAU,CAAE,QAAuB,CACrC,EACF,EACF,CACF,CAEA,mCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,WAAY,CAAE,QAAuB,CACvC,EACF,GAEF,mCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,WAAY,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAChE,EACF,GAEF,mCAA+B,CAC7B,IAAMO,EAAWR,EAAM,KAAK,KAC5B,GAAIQ,IAAa,OACf,MAAM,MAAM,kEAAkE,EAGhF,OAAOF,EAAAC,EAAA,GACFP,GADE,CAEL,KAAMM,EAAAC,EAAA,GACDP,EAAM,MADL,CAEJ,KAAMM,EAAAC,EAAA,GACDC,GADC,CAEJ,YAAa,CAACP,EAAO,QAAS,GAAGO,EAAS,WAAW,CACvD,GACA,CAACP,EAAO,QAAQ,EAAE,EAAG,CACnB,SAAUA,EAAO,QAAQ,GACzB,SAAU,CAAC,EACX,YAAa,CAAC,EAMd,KAAM,mBAAsB,YAAK,KAAK,IAAI,KAAKA,EAAO,QAAQ,WAAW,EAAE,QAAQ,EAAI,GAAI,GAC3F,KAAM,CACR,CACF,GACA,OAAQK,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,WAAY,CAAE,QAAuB,CACvC,EACF,EACF,CAEA,kCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,UAAW,CAAE,QAAuB,CACtC,EACF,GAEF,kCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,UAAW,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAC/D,EACF,GAEF,kCAA8B,CAC5B,IAAMY,EAAcb,EAAM,KAAKC,EAAO,QAAQ,QAAQ,EACtD,GAAIY,IAAgB,OAClB,MAAM,MAAM,gEAAgE,EAG9E,OAAOP,EAAAC,EAAA,GACFP,GADE,CAEL,KAAMM,EAAAC,EAAA,GACDP,EAAM,MADL,CAEJ,CAACC,EAAO,QAAQ,QAAQ,EAAGK,EAAAC,EAAA,GACtBM,GADsB,CAEzB,SAAU,CAAC,GAAGA,EAAY,SAAU,GAAGZ,EAAO,QAAQ,QAAQ,EAI9D,YAAaY,EAAY,YAAY,OAAOH,GACnCT,EAAO,QAAQ,SAAS,MAAMa,GAAiBA,EAAc,KAAOJ,EAAQ,EAAE,CACtF,EACD,KAAMT,EAAO,QAAQ,KAAK,IAC5B,EACF,GACA,OAAQK,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,YAAa,CAAE,QAAuB,CACxC,EACF,EACF,CAEA,oCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,YAAa,CAAE,QAAwB,CACzC,EACF,GAEF,oCACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,YAAa,CAAE,SAAwB,QAASC,EAAO,OAAQ,CACjE,EACF,GAEF,oCAAgC,CAC9B,IAAMY,EAAcb,EAAM,KAAKC,EAAO,QAAQ,QAAQ,EACtD,GAAIY,IAAgB,OAClB,MAAM,MAAM,kEAAkE,EAGhF,OAAOP,EAAAC,EAAA,GACFP,GADE,CAEL,KAAMM,EAAAC,EAAA,GACDP,EAAM,MADL,CAEJ,CAACC,EAAO,QAAQ,QAAQ,EAAGK,EAAAC,EAAA,GACtBM,GADsB,CAEzB,YAAa,CAAC,GAAGA,EAAY,YAAaZ,EAAO,OAAO,CAC1D,EACF,GACA,OAAQK,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,YAAa,CAAE,QAAuB,CACxC,EACF,EACF,CAEA,8BACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,OAAQ,CAAE,QAAuB,CACnC,EACF,GAEF,8BACE,OAAOM,EAAAC,EAAA,GACFP,GADE,CAEL,OAAQM,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,OAAQ,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAC5D,EACF,GAEF,8BAA0B,CACxB,IAAIc,EAAYf,EAEVgB,EAAoBhB,EAAM,KAAKC,EAAO,QAAQ,QAAQ,EAC5D,OAAIe,IAAsB,SACxBD,EAAYT,EAAAC,EAAA,GACPQ,GADO,CAEV,KAAMT,EAAAC,EAAA,GACDQ,EAAU,MADT,CAEJ,CAACd,EAAO,QAAQ,QAAQ,EAAGK,EAAAC,EAAA,GACtBS,GADsB,CAEzB,SAAWA,EAAkB,SAA2B,OACtDN,GAAWA,EAAQ,KAAOT,EAAO,QAAQ,EAC3C,EACA,YAAce,EAAkB,YAA8B,OAC5DN,GAAWA,EAAQ,KAAOT,EAAO,QAAQ,EAC3C,CACF,EACF,EACF,IAGF,OAAOc,EAAU,KAAKd,EAAO,QAAQ,EAAE,EAEhCK,EAAAC,EAAA,GACFQ,GADE,CAEL,OAAQT,EAAAC,EAAA,GACHP,EAAM,QADH,CAEN,OAAQ,CAAE,QAAuB,CACnC,EACF,EACF,CACF,CAEA,OAAOA,CACT,CC1VAiB,IAAAC,IAqBA,IAAMC,GAAsB,CAC1B,UAAW,CAAC,EACZ,OAAQ,CAAE,KAAM,CAAE,QAAwB,CAAE,CAC9C,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAAuB,CACnE,OAAQA,EAAO,KAAM,CACnB,0BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,QAAuB,CACjC,EACF,GAEF,0BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAC1D,EACF,GAEF,0BACE,OAAIA,EAAO,QAAQ,UAAYD,EAAM,SAAWA,EAAM,OAAS,QAAaC,EAAO,QAAQ,WAClFC,EAAAC,EAAA,GACFH,GADE,CAEL,UAAWC,EAAO,QAAQ,YAAc,CAAC,EACzC,QAASA,EAAO,QAAQ,QACxB,KAAM,CACJ,OAAQ,CAAC,GAAIA,EAAO,QAAQ,QAAU,CAAC,CAAE,EACzC,KAAMA,EAAO,QAAQ,KAAK,IAC5B,EACA,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,QAAuB,CACjC,EACF,GAEOE,EAAAC,EAAA,GACFH,GADE,CAEL,UAAWC,EAAO,QAAQ,YAAcD,EAAM,UAC9C,KAAM,CACJ,OAAQ,CAAC,GAAGA,EAAM,KAAK,OAAQ,GAAIC,EAAO,QAAQ,QAAU,CAAC,CAAE,EAC/D,KAAMA,EAAO,QAAQ,KAAK,IAC5B,EACA,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,QAAuB,CACjC,EACF,GAGJ,mBACE,OAAOF,EAEX,CAEA,OAAOE,CACT,CClFAI,IAAAC,IAcO,IAAMC,EAAsB,CACjC,gBAAiB,GACjB,KAAM,CAAC,EACP,KAAM,KACN,MAAO,EACP,OAAQ,CACN,MACF,CACF,EAEO,SAASC,GAAQC,EAAQF,EAAcG,EAA0B,CAxBxE,IAAAC,EAAAC,EAyBE,OAAQF,EAAO,KAAM,CACnB,gCACE,OAAOG,EAAAC,EAAA,GACFL,GADE,CAEL,gBAAiBC,EAAO,WAC1B,GACF,wBACE,OAAOG,EAAAC,EAAA,GACFL,GADE,CAEL,OAAQI,EAAAC,EAAA,GACHL,EAAM,QADH,CAEN,MACF,EACF,GAEF,wBACE,OAAOI,EAAAC,EAAA,GACFL,GADE,CAEL,KAAM,CAAC,EACP,KAAM,KACN,OAAQI,EAAAC,EAAA,GACHL,EAAM,QADH,CAEN,MACF,EACF,GAEF,wBACE,OAAIC,EAAO,QAAQ,WACVG,EAAAC,EAAA,GACFL,GADE,CAEL,MAAME,EAAAD,EAAO,QAAQ,OAAf,KAAAC,EAAuB,CAAC,EAC9B,KAAMD,EAAO,QAAQ,KAAK,KAC1B,MAAOA,EAAO,QAAQ,KAAK,YAC3B,OAAQG,EAAAC,EAAA,GACHL,EAAM,QADH,CAEN,MACF,EACF,GAEKI,EAAAC,EAAA,GACFL,GADE,CAEL,KAAMA,EAAM,KAAK,QAAOG,EAAAF,EAAO,QAAQ,OAAf,KAAAE,EAAuB,CAAC,CAAC,EACjD,KAAMF,EAAO,QAAQ,KAAK,KAC1B,MAAOA,EAAO,QAAQ,KAAK,YAC3B,OAAQG,EAAAC,EAAA,GACHL,EAAM,QADH,CAEN,MACF,EACF,GAEF,QACE,OAAOA,CACX,CACF,CC9EAM,IAAAC,IAaO,IAAMC,GAAsB,CACjC,IAAK,CAAC,EACN,KAAM,KACN,OAAQ,CACN,OACA,UACF,CACF,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA0B,CACtE,OAAQA,EAAO,KAAM,CACnB,uBACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,uBACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,IAAK,CAAC,EACN,KAAM,KACN,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,uBACE,OAAIC,EAAO,QAAQ,WACVC,EAAAC,EAAA,GACFH,GADE,CAEL,IAAKC,EAAO,QAAQ,IACpB,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEKE,EAAAC,EAAA,GACFH,GADE,CAEL,IAAKA,EAAM,IAAI,OAAOC,EAAO,QAAQ,GAAG,EACxC,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,yBACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,UACF,EACF,GAEF,yBACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,UACF,EACF,GAEF,yBACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,UACF,EACF,GAEF,QACE,OAAOA,CACX,CACF,CChGAI,IAAAC,IAMO,IAAMC,GAAsB,CACjC,KAAM,EACR,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CACxE,OAAQA,EAAO,KAAM,CACnB,gCACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,MACf,GAEF,QACE,OAAOD,CACX,CACF,CCrBAI,IAAAC,IAiBO,IAAMC,GAAsB,CACjC,OAAQ,CACN,KAAM,CAAE,QAAwB,CAClC,CACF,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAAuB,CACnE,OAAQA,EAAO,KAAM,CACnB,0BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,SAAwB,UAAWC,EAAO,SAAU,CAC9D,EACF,GAGF,0BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAM,OACN,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,SAAwB,QAASC,EAAO,OAAQ,CAC1D,EACF,GAGF,0BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,QACb,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,QAAuB,CACjC,EACF,GAGF,iBACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,OACb,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,KAAM,CAAE,QAAuB,CACjC,EACF,GAGF,QACE,OAAOA,CACX,CACF,CCvEAI,IAAAC,IAMO,IAAMC,GAAsB,CACjC,KAAM,EACR,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CACxE,OAAQA,EAAO,KAAM,CACnB,uCACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,MACf,GAEF,QACE,OAAOD,CACX,CACF,CCrBAI,IAAAC,IAMO,IAAMC,GAAsB,CACjC,KAAM,EACR,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CACxE,OAAQA,EAAO,KAAM,CACnB,sCACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,MACf,GAEF,QACE,OAAOD,CACX,CACF,CCrBAI,IAAAC,IAOO,IAAMC,GAAsB,CACjC,KAAM,GACN,SAAU,EACZ,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CAZ1E,IAAAC,EAaE,OAAQD,EAAO,KAAM,CACnB,gCACE,OAAOE,EAAAC,EAAAD,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,WACTC,EAAAD,GAAA,YAAAA,EAAQ,QAAR,YAAAC,EAAe,KAAM,CAAE,SAAUD,EAAO,MAAM,EAAG,GAGzD,0BACE,OAAOG,EAAAD,EAAA,GACFH,GADE,CAEL,SAAUC,EAAO,EACnB,GAEF,QACE,OAAOD,CACX,CACF,CC9BAK,IAAAC,IAMO,IAAMC,GAAsB,CACjC,KAAM,EACR,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CACxE,OAAQA,EAAO,KAAM,CACnB,iCACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,MACf,GAEF,QACE,OAAOD,CACX,CACF,CCrBAI,IAAAC,IAQO,IAAMC,GAAsB,CACjC,KAAM,GACN,YAAa,IAAM,CAAC,EACpB,aAAc,IAAM,CAAC,CACvB,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CACxE,OAAQA,EAAO,KAAM,CACnB,2CACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,MACf,GAEF,8CACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,YAAaC,EAAO,YACpB,aAAcA,EAAO,YACvB,GAEF,QACE,OAAOD,CACX,CACF,CChCAI,IAAAC,ICAAC,IAAAC,IDYO,IAAMC,GAAsB,CACjC,WAAY,CAAC,EACb,KAAM,KACN,OAAQ,CACN,MACF,CACF,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAAgC,CAC5E,OAAQA,EAAO,KAAM,CACnB,8BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,8BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,WAAY,CAAC,EACb,KAAM,KACN,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,8BACE,OAAIC,EAAO,QAAQ,WACVC,EAAAC,EAAA,GACFH,GADE,CAEL,WAAYC,EAAO,QAAQ,WAC3B,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEKE,EAAAC,EAAA,GACFH,GADE,CAEL,WAAYA,EAAM,WAAW,OAAOC,EAAO,QAAQ,UAAU,EAC7D,KAAMA,EAAO,QAAQ,KAAK,KAC1B,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,QACE,OAAOA,CACX,CACF,CEnEAI,IAAAC,IAOO,IAAMC,GAAsB,CACjC,KAAM,GACN,SAAU,EACZ,EAEO,SAASC,GAAQC,EAAQF,GAAcG,EAA4B,CAZ1E,IAAAC,EAaE,OAAQD,EAAO,KAAM,CACnB,iCACE,OAAOE,EAAAC,EAAAD,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,WACTC,EAAAD,GAAA,YAAAA,EAAQ,QAAR,YAAAC,EAAe,KAAM,CAAE,SAAUD,EAAO,MAAM,EAAG,GAGzD,mCACE,OAAOG,EAAAD,EAAA,GACFH,GADE,CAEL,SAAUC,EAAO,EACnB,GAEF,QACE,OAAOD,CACX,CACF,CC9BAK,IAAAC,IAkBO,SAASC,GAAaC,EAAuD,CAClF,IAAMC,EAAsB,CAC1B,KAAMD,EACN,OAAQ,CACN,OACA,SACA,kBACA,QACF,CACF,EAEA,OAAO,SAAUE,EAAQD,EAAcE,EAA8B,CACnE,OAAQA,EAAO,KAAM,CACnB,6BACE,OAAOC,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,6BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAASC,EAAO,QAChB,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,6BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAAS,OACT,KAAMC,EAAO,QACb,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,uCACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,iBACF,EACF,GAEF,uCACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAASC,EAAO,QAChB,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,iBACF,EACF,GAEF,uCACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAAS,OACT,KAAME,EAAAC,EAAA,GACDH,EAAM,MADL,CAIJ,SAAUC,EAAO,OACnB,GACA,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,iBACF,EACF,GAEF,6BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,6BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAASC,EAAO,QAChB,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,6BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAAS,OACT,KAAMC,EAAO,QACb,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,QACF,EACF,GAEF,2BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,OAAQE,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,2BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,QAASC,EAAO,QAChB,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,2BACE,OAAOE,EAAAC,EAAA,GACFH,GADE,CAEL,KAAMC,EAAO,QACb,OAAQC,EAAAC,EAAA,GACHH,EAAM,QADH,CAEN,MACF,EACF,GAEF,QACE,OAAOA,CACX,CACF,CACF,ChBrHO,IAAMI,GAAeC,GACnBC,GAAgB,CACrB,QAAiBC,GACjB,SAAmBA,GACnB,OAAeA,GACf,OAAeA,GACf,IAASA,GACT,YAAyBA,GACzB,OAAeA,GACf,wBAAiDA,GACjD,kBAAqCA,GACrC,QAASC,GAAaH,CAAO,EAC7B,YAAyBE,GACzB,aAA2BA,GAC3B,YAAyBA,GACzB,UAAqBA,GACrB,aAA2BA,EAC7B,CAAC,EiB3DHE,IAAAC,IAAA,IAAAC,EAAuB,OAAvB,IAAAC,GASMC,EAAUC,EAAO,IAAPF,QAAUG,EAAA,QACd,yCAIJ,iEAJJC,EAAE,KAAK,EAIPC,GAdJC,GAmBMC,EAAOL,EAAO,IAAPI,QAAUH,EAAA,uGAMJ,kBACiB,eAGrB,0DAIyB,wCARpCC,EAAE,QAAQ,MACDI,EAAO,iBAGhBC,EAAO,KAIWC,EAAY,QAjClCC,GAsCMC,GAASV,EAAO,IAAPS,QAAUR,EAAA,6BAGb,2DAI4B,mCAJpCC,EAAE,KAAK,EAIWM,EAAY,QAK3B,SAASG,GAAYC,EAA4B,CAlDxD,IAAAd,EAAAM,EAAAK,EAAAI,EAoDE,IAAMC,EAAkBF,EAAQ,YAAY,KACtCG,EAAcD,GAAA,YAAAA,EAAiB,mBAC/BE,EAAW,CAAC,OAAO,WAAWR,EAAY,MAAM,EAAE,QAGlDS,EAAgBL,EAAQ,SAAW,gBACnCM,EAAmBC,EAAQ,WAAWP,CAAO,EAC7CQ,EAAcR,EAAQ,iBACtBS,EAAWT,EAAQ,aAAeM,EAClCI,EAAuBV,EAAQ,UAAY,OAC3CW,EAA4BJ,EAAQ,aAAaP,CAAO,EAExDY,EAAW,CACd,kBAAoB,CACnB,QAAS,kBACT,MAAO,OACP,QAAS,CACP,gBAAC,OAAI,IAAK,6BACR,gBAACnB,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,wBAAwB,CAAE,CAChD,CACF,EACA,gBAAC,OAAI,IAAK,+BACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,MACC,oHACA,CACE,KAAM,gBAACC,EAAA,CAAK,KAAK,UAAU,WAAU,GAAC,KAAM,aAAa,OAAAS,EAAQ,GAAE,gBAAgB,CACrF,CACF,CACF,CACF,CACF,CACF,CACF,EACC,UAAc,CACb,QAAS,YACT,MAAO,UACP,QAAS,CACP,gBAAC,OAAI,IAAK,uBACR,gBAACP,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,UAAU,CAAE,CAClC,CACF,EACA,gBAAC,OAAI,IAAK,yBACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,KACC,4JACF,CACF,CACF,CACF,CACF,CACF,EACC,kBAAsB,CACrB,QAAS,oBACT,MAAO,UACP,QAAS,CACP,gBAAC,OAAI,IAAK,+BACR,gBAACG,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,UAAU,CAAE,CAClC,CACF,EACA,gBAAC,OAAI,IAAK,iCACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,KACC,4JACF,EACCoB,KAAwBxB,EAAAc,EAAQ,UAAR,YAAAd,EAAiB,UACxC,gBAACK,EAAA,CAAK,MAAMC,EAAAQ,GAAA,YAAAA,EAAS,UAAT,YAAAR,EAAkB,QAAQ,IAAK,KAAK,UAAU,WAAU,OACjE,KAAE,yBAAyB,CAC9B,CAEJ,CACF,CACF,CACF,CACF,EACC,gBAAoB,CACnB,QAAS,kBACT,MAAO,UACP,QAAS,CACP,gBAAC,OAAI,IAAK,6BACR,gBAACC,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,qBAAqB,CAAE,CAC7C,CACF,EACA,gBAAC,OAAI,IAAK,+BACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,KACC,8JACF,CACF,CACF,CACF,CACF,CACF,EACC,OAAW,CACV,QAAS,SACT,MAAO,UACP,QAAS,CACP,gBAAC,OAAI,IAAK,oBACR,gBAACG,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,qBAAqB,CAAE,CAC7C,CACF,EACA,gBAAC,OAAI,IAAK,sBACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,KACC,sIACF,CACF,CACF,CACF,CACF,CACF,EACC,eAAmB,CAClB,QAAS,iBACT,MAAO,UACP,QAAS,CACP,gBAAC,OAAI,IAAK,4BACR,gBAACG,EAAA,KACC,gBAACH,EAAE,QAAQ,MAAV,QAAiB,KAAE,qBAAqB,CAAE,CAC7C,CACF,EACA,gBAAC,OAAI,IAAK,8BACR,gBAACH,EAAA,KACC,gBAACG,EAAE,KAAK,EAAP,QACE,KACC,sIACF,EACCoB,KAAwBb,EAAAG,EAAQ,UAAR,YAAAH,EAAiB,UACxC,gBAACN,EAAA,CAAK,MAAMU,EAAAD,GAAA,YAAAA,EAAS,UAAT,YAAAC,EAAkB,QAAQ,IAAK,KAAK,UAAU,WAAU,OACjE,KAAE,wBAAwB,CAC7B,CAEJ,CACF,CACF,CACF,CACF,EACC,OAAW,CACV,QAAS,SACT,MAAO,OACP,QACE,gBAACH,GAAA,KACC,gBAACR,EAAE,KAAK,EAAP,QACE,KACC,2GACF,CACF,CACF,CAEJ,CACF,EAUIuB,EAAoB,CAAC,EAErBV,IAEEC,GAAY,CAACE,IACfO,EAAY,CAAC,GAAGA,EAAW,QAAQ,GAIjCP,GAAcG,IACZE,EAEFE,EAAY,CAAC,GAAGA,EAAW,iBAAiB,EACnCH,EAETG,EAAY,CAAC,GAAGA,EAAW,gBAAgB,EAG3CA,EAAY,CAAC,GAAGA,EAAW,QAAQ,GAKnCL,GAAeE,EACjBG,EAAY,CAAC,GAAGA,EAAW,mBAAmB,EACrCL,IAETK,EAAY,CAAC,GAAGA,EAAW,WAAW,GAIpCR,IACFQ,EAAY,CAAC,GAAGA,EAAW,iBAAiB,IAIhD,IAAMC,EAAmBD,EAAU,OAAO,CAACC,EAAkBC,KAC3DD,EAAmBE,EAAAC,EAAA,GAAKH,GAAL,CAAuB,CAACC,CAAO,EAAGH,EAASG,CAAO,CAAE,GAChED,GACN,CAAC,CAAC,EAEL,OAAO,OAAO,OAAOA,CAAgB,CACvC,ClBxPA,IAAMI,EAAcC,GAAgB,EAE7B,SAASC,GAAuBC,EAAkBC,EAA6C,CACpGC,GAAmBF,CAAO,EAC1BG,GAAe,EAEf,IAAMC,EAAmB,+CAMzB,EACMC,EAAkB,CAAC,CAACL,EAAQ,WAAaI,EAAiB,SAASJ,EAAQ,SAAS,EAE1F,OAAOM,GAAsBC,GAAYP,CAAO,EAAU,CAAC,EAAG,CAC5D,YAAa,CACX,OAAQQ,EAAAC,EAAA,GACCC,GADD,CAEN,gBAAAL,CACF,GACA,QAAS,CAAE,KAAML,EAAS,MAAAC,CAAM,CAClC,EACA,SAAUJ,EAAM,IAAac,EAAQ,aAAa,EAClD,KAAM,CACJ,SAAUd,EAAM,IAAae,EAAK,SAAS,CAC7C,CACF,CAAC,CACH,CAEA,SAASV,GAAmBF,EAAkB,CAE5C,IAAMa,GADoBC,IAAiB,CAAC,GACN,IACnCC,IACE,CACC,QAASA,EAAa,SACtB,MAAOA,EAAa,IACtB,EACJ,EACMC,EAAW,CAAC,GAAGC,GAAYjB,CAAO,EAAG,GAAGa,CAAe,EAE7DhB,EAAM,IAAac,EAAQ,cAAe,CAAE,KAAMO,GAAM,MAAOF,CAAS,CAAC,CAC3E,CAEA,SAASb,IAAiB,CACxB,IAAMgB,EAAWC,EAEjBvB,EAAM,IACKe,EAAK,UACLA,EAAK,QAAQ,KACpBO,EAAK,iBACD,CACE,KAAM,WACN,kBAAmBA,EACnB,YAAa,CAAC,EACd,aAAc,GACd,aAAc,EAChB,EACA,CACE,KAAM,UACN,cAAe,EACjB,CACN,CACF,CACF,CmB/EAE,IAAAC,IAAA,IAAAC,EAAuB,OCAvBC,IAAAC,IAuCO,SAASC,GAAqBC,EAA2B,CAC9D,IAAMC,EAAkBD,EAAQ,YAAY,KAE5C,MAAO,EAACC,GAAA,MAAAA,EAAiB,mBAAkDC,EAAQ,oBAAoBF,CAAO,CAChH,CAEO,SAASG,GAAoBH,EAA2B,CAC7D,GAAIA,EAAQ,kBACV,MAAO,GAGT,IAAMC,EAAkBD,EAAQ,YAAY,KAC5C,MAAO,EAACC,GAAA,MAAAA,EAAiB,iBAC3B,CDrCO,SAASG,IAA0C,CACxD,GAAM,CAAE,QAAAC,EAAS,MAAAC,CAAM,EAAUC,EAC9BC,IAAW,CACV,QAASA,EAAM,YAAY,QAAQ,KACnC,MAAOA,EAAM,YAAY,QAAQ,KACnC,EACF,EAEMC,EAAaC,GAAc,EAE3BC,EAA4BC,EAAQ,oBAAoBP,CAAO,EAC/DQ,EAA2BC,GAAoBT,CAAO,GAAKC,IAAU,OACrES,EAAoCA,GAAqBV,CAAO,GAAKC,IAAU,OAErF,OACE,gBAAO,WAAN,CAAe,SAAU,gBAAOU,GAAN,IAAc,GACvC,gBAACC,GAAA,KACEN,GAAuB,gBAACO,EAAA,CAAM,KAAMT,EAAW,OAAOU,EAAM,WAAW,EAAE,SAAU,QAAS,gBAACC,GAAA,IAAW,EAAI,EAC5GL,GACC,gBAACG,EAAA,CAAM,KAAK,IAAI,QAAS,gBAACG,GAAA,CAAS,GAAIZ,EAAW,OAAOU,EAAM,WAAW,EAAE,SAAU,EAAI,EAE3FN,GAAe,gBAACK,EAAA,CAAM,KAAK,IAAI,QAAS,gBAACI,GAAA,IAAU,EAAI,EACxD,gBAACJ,EAAA,CAAM,KAAK,IAAI,QAAS,gBAACK,GAAA,IAAa,EAAI,CAC7C,CACF,CAEJ,CAEA,SAASD,IAAyC,CAChD,cAAO,SAAS,KAAWE,GACpB,+BAAE,CACX,CpBjBAC,GAAK,EAEL,eAAeA,IAAsB,CA/BrC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAgCE,MAAUC,GAAe,EACzB,IAAMC,EAAiBC,GAAc,EAE9BR,GAAK,CACV,IAASS,GACT,YAAiBC,GACjB,KAAM,CACJ,QAAaC,GACb,SAAUJ,EAAW,SACrB,MAAWK,EAAa,MACxB,GAAQA,EAAa,GACrB,SAAcA,EAAa,UAC3B,QAAaA,EAAa,SAC1B,OAAQL,EAAW,IACrB,CACF,CAAC,EACMM,EAAO,UAAW,cAAc,EAChCA,EAAO,UAAeC,EAAQ,EAAE,EAEpCd,GAAK,CAAE,OAAOC,EAAIc,KAAJ,KAAAd,EAAuB,GAAI,OAAYe,GAAiBT,EAAW,IAAI,CAAE,CAAC,EAG3F,IAAMU,EAAkB,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAC9DC,EAAQD,EAAgB,IAAI,OAAO,GAAK,OAC5C,GAAIC,IAAU,OAAW,CACvB,IAAMC,EAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EACxCF,EAAgB,OAAO,OAAO,EAC9BE,EAAI,OAASF,EAAgB,SAAS,EACtC,QAAQ,aAAa,KAAM,SAAS,MAAOE,EAAI,SAAS,CAAC,CAC3D,CAEA,MAAMC,GAAuBb,EAAW,KAAUc,GAAad,EAAW,IAAI,CAAC,EAEvEe,YAAqC,CAC3C,GAAI,IAAM,OAAO,IAAM,OAAO,GAAG,YAAa,iBAAkB,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,EAClG,UAAW,IAAM,OAAO,IAAM,OAAO,GAAG,YAAa,iBAAkB,CAAE,UAAW,GAAO,QAAS,EAAM,CAAC,CAC7G,CAAC,EAED,IAAIC,EACEC,EAAW,MAAeC,GAC7B,KAASX,EAAQ,MAAQ,OAAWA,EAAQ,EAAE,EAAG,CAChD,UAAeF,EAAa,iBAC5B,aAAcM,EACd,YAAmBO,EAAQ,mBAC3B,WAAgBX,EAAQ,KAAO,OAAS,MAC1C,CAAC,EACA,MAAOY,GAAU,CAChBH,EAAeG,CACjB,CAAC,EAEGC,EAAUH,GAAYA,EAAS,QAAQ,EAAIA,EAAS,OAAO,EAAI,OACrE,GAAI,CAACG,EACH,OAAOC,GAAkBL,EAAcC,CAAQ,EAYjD,GANEG,EAAQ,mBACR,CAAOF,EAAQ,kBAA4CE,QAAuC,IAElGT,EAAQ,UAGNhB,EAAI2B,EAAQ,OAAZ,YAAA3B,EAAkB,QAAQ,aAAc,OAExCE,GAAAD,EAAMsB,EAAQ,MAAgCE,CAAO,IAArD,YAAAxB,EAAwD,gBAAxD,YAAAC,EAAuE,iBAAkB,aACzFC,EAAIO,IAAJ,YAAAP,EAAkB,MAAOsB,EAAQ,MAAM,IACvC,CAGA,IAAMG,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAM,qCACb,SAAS,KAAK,YAAYA,CAAM,CAClC,CAGF,IAAMC,EAAQC,GAAuBL,EAAST,CAAK,EAGnDa,EAAM,UAAU,IAAM,CAhHxB,IAAA9B,EAkHI,IAAM0B,EADQI,EAAM,SAAS,EACP,YAAY,QAAQ,KAC1C,SAAS,MAAeN,EAAQ,YAAYE,CAAO,KAE/C,KAAE,kBAAkB,GADnB1B,EAAMwB,EAAQ,KAA+BE,CAAO,IAApD,KAAA1B,KAAyD,KAAE,kBAAkB,CAEpF,CAAC,EAEDgC,GAAUF,CAAK,CACjB,CAEA,SAASE,GAAUF,EAAgD,CACjE,IAAMG,EAAe,SAAS,cAAc,oBAAoB,EAC5DA,EACoB,cAAWA,CAAY,EACxC,OACH,gBAAOC,GAAN,CAAe,MAAOJ,GACrB,gBAACK,GAAA,IAAI,CACP,CACF,EAEOC,GAAI,oCAAoC,CAEnD,CAEA,SAASD,IAAmC,CAzI5C,IAAAnC,EA0IE,IAAMqC,EAAgBC,EAAK,QAAQ,EAC7BZ,EAAgBa,EAA8CC,GAAUA,EAAM,YAAY,QAAQ,IAAI,EAEtGC,EAAW5B,EAAQ,MAAYA,EAAQ,GACvC6B,GAAW1C,EAAI4B,EAAQ,OAAZ,MAAA5B,EAAkB,WAAW,aAAa,OAAAyC,IAAU,aAAa,OAAAA,EAAI,KAAM,IAAI,OAAAA,EAAI,KAEpG,OAAM,YAAU,IAAM,CAChBJ,EAAK,OAAS,YAAcX,EAAQ,qBAClC,OAAO,IACT,OAAO,GAAG,YAAa,MAAM,CAGnC,EAAG,CAACW,EAAK,KAAMX,CAAO,CAAC,EAGrB,gBAAQiB,GAAP,CACC,UAAW,IAAON,EAAK,OAAS,WAAaA,EAAK,KAAK,GAAK,OAC5D,eAAoBO,GACpB,aAAa,UACb,qBACA,QAASlB,GAET,gBAAUmB,GAAT,KACC,gBAAOC,GAAN,IAA4B,EAC7B,gBAACC,GAAA,CAAc,SAAUL,GACvB,gBAACM,GAAA,IAAW,CACd,CACF,CACF,CAEJ,CAYA,SAASrB,GACPL,EACAC,EACA,CAvLF,IAAAvB,EAAAC,EAwLE,IAAIgD,EACA1B,IACF0B,EAAoB1B,EAAS,OAAO,EAAIA,EAAS,WAAW,EAAI,QAElE,IAAM2B,EAAU,MAAM,QAAQD,GAAA,YAAAA,EAAmB,IAAI,EACjDA,EAAkB,KAAK,CAAC,EAAE,SAC1BjD,EAAAiD,GAAA,YAAAA,EAAmB,OAAnB,YAAAjD,EAAyB,QACvBmD,GAAUlD,EAAAqB,GAA8B4B,IAA9B,KAAAjD,EAA0C,6BACpDmD,GAAiB,UAAWD,EAAQ,CACxC,SAAA5B,CACF,CAAC,CACH", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "React", "ReactDOM", "init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "_a", "_b", "_c", "_d", "__spreadProps", "__spreadValues", "rootList", "list", "comment", "lastReply", "cursor", "commentList", "loadedComment", "nextState", "parentCommentList", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "_a", "_b", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "_a", "__spreadValues", "__spreadProps", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "__spreadProps", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub", "initialState", "reducer", "state", "action", "_a", "__spreadValues", "__spreadProps", "init_define_process_env", "init_sentry_release_injection_stub", "reducerMaker", "project", "initialState", "state", "action", "__spreadProps", "__spreadValues", "makeReducer", "project", "combineReducers", "reducer", "reducerMaker", "init_define_process_env", "init_sentry_release_injection_stub", "React", "_a", "Content", "src_default", "__template", "styles_exports", "Link", "_b", "Info", "colors_exports", "glyphs_exports", "breakpoints_exports", "_c", "Mobile", "getMessages", "project", "_d", "userPermissions", "userCanEdit", "isMobile", "isPendingUser", "isFinished", "project_exports", "isExtraTime", "isFunded", "userCanAccessBilling", "projectHadExtraTime", "messages", "keysArray", "filteredMessages", "message", "__spreadProps", "__spreadValues", "store", "getDefaultStore", "createApplicationStore", "project", "token", "initSharedMessages", "initSharedAuth", "defaultFollowers", "userIsAFollower", "createStore", "makeReducer", "__spreadProps", "__spreadValues", "initialState", "message_exports", "user_exports", "initialMessages", "NOTIFICATIONS", "notification", "messages", "getMessages", "SYNC", "user", "CURRENT_USER", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "redirectToComingSoon", "project", "userPermissions", "project_exports", "redirectToForbidden", "MainRouter", "project", "token", "useSelector", "state", "navigation", "useNavigation", "isComingSoonEnabled", "project_exports", "isForbidden", "redirectToForbidden", "redirectToComingSoon", "Spinner", "Routes", "Route", "PATHS", "ComingSoon", "Navigate", "Forbidden", "DetailLayout", "FORBIDDEN_URL", "init", "_a", "_b", "_c", "_d", "_e", "initUserConfig", "userConfig", "getUserConfig", "SENTRY_PUBLIC_DSN", "ENVIRONMENT", "USER_COUNTRY", "CURRENT_USER", "setTag", "PROJECT", "FACEBOOK_APP_ID", "EXTENDED_LOCALES", "urlSearchParams", "token", "url", "initializeLocalization", "LOCALE_FILES", "whenGivenFor", "initialError", "response", "project_exports", "error", "project", "handleGlobalError", "REQUEST", "script", "store", "createApplicationStore", "renderApp", "appContainer", "Provider_default", "App", "err", "auth", "user_exports", "useSelector", "state", "slug", "basename", "TrackingProvider", "GTM_KEY", "MessagesProvider", "LockScrollGlobalStyle", "BrowserRouter", "MainRouter", "unwrappedResponse", "message", "reason", "renderCrashToast"] }