gitextract_o9t9gx4q/ ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── .travis.yml ├── LICENSE ├── README.md ├── build/ │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.dll.conf.js │ └── webpack.prod.conf.js ├── config/ │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── deploy/ │ ├── Dockerfile │ ├── nginx.conf │ ├── run.sh │ └── sentry_release.sh ├── package.json ├── src/ │ ├── i18n/ │ │ ├── admin/ │ │ │ ├── en-US.js │ │ │ ├── zh-CN.js │ │ │ └── zh-TW.js │ │ ├── index.js │ │ └── oj/ │ │ ├── en-US.js │ │ ├── zh-CN.js │ │ └── zh-TW.js │ ├── pages/ │ │ ├── admin/ │ │ │ ├── App.vue │ │ │ ├── api.js │ │ │ ├── components/ │ │ │ │ ├── Accordion.vue │ │ │ │ ├── CodeMirror.vue │ │ │ │ ├── KatexEditor.vue │ │ │ │ ├── Panel.vue │ │ │ │ ├── ScreenFull.vue │ │ │ │ ├── SideMenu.vue │ │ │ │ ├── Simditor.vue │ │ │ │ ├── TopNav.vue │ │ │ │ ├── btn/ │ │ │ │ │ ├── Cancel.vue │ │ │ │ │ ├── IconBtn.vue │ │ │ │ │ └── Save.vue │ │ │ │ ├── infoCard.vue │ │ │ │ └── simditor-file-upload.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── router.js │ │ │ ├── style.less │ │ │ └── views/ │ │ │ ├── Home.vue │ │ │ ├── contest/ │ │ │ │ ├── Contest.vue │ │ │ │ └── ContestList.vue │ │ │ ├── general/ │ │ │ │ ├── Announcement.vue │ │ │ │ ├── Conf.vue │ │ │ │ ├── Dashboard.vue │ │ │ │ ├── JudgeServer.vue │ │ │ │ ├── Login.vue │ │ │ │ ├── PruneTestCase.vue │ │ │ │ └── User.vue │ │ │ ├── index.js │ │ │ └── problem/ │ │ │ ├── AddPublicProblem.vue │ │ │ ├── ImportAndExport.vue │ │ │ ├── Problem.vue │ │ │ └── ProblemList.vue │ │ └── oj/ │ │ ├── App.vue │ │ ├── api.js │ │ ├── components/ │ │ │ ├── CodeMirror.vue │ │ │ ├── Highlight.vue │ │ │ ├── NavBar.vue │ │ │ ├── Pagination.vue │ │ │ ├── Panel.vue │ │ │ ├── mixins/ │ │ │ │ ├── emitter.js │ │ │ │ ├── form.js │ │ │ │ ├── index.js │ │ │ │ └── problem.js │ │ │ └── verticalMenu/ │ │ │ ├── verticalMenu-item.vue │ │ │ └── verticalMenu.vue │ │ ├── index.html │ │ ├── index.js │ │ ├── router/ │ │ │ ├── index.js │ │ │ └── routes.js │ │ └── views/ │ │ ├── contest/ │ │ │ ├── ContestDetail.vue │ │ │ ├── ContestList.vue │ │ │ ├── children/ │ │ │ │ ├── ACMContestRank.vue │ │ │ │ ├── ACMHelper.vue │ │ │ │ ├── ContestProblemList.vue │ │ │ │ ├── ContestRank.vue │ │ │ │ ├── OIContestRank.vue │ │ │ │ └── contestRankMixin.js │ │ │ └── index.js │ │ ├── general/ │ │ │ ├── 404.vue │ │ │ ├── Announcements.vue │ │ │ └── Home.vue │ │ ├── help/ │ │ │ ├── About.vue │ │ │ └── FAQ.vue │ │ ├── index.js │ │ ├── problem/ │ │ │ ├── Problem.vue │ │ │ ├── ProblemList.vue │ │ │ └── chartData.js │ │ ├── rank/ │ │ │ ├── ACMRank.vue │ │ │ └── OIRank.vue │ │ ├── setting/ │ │ │ ├── Settings.vue │ │ │ ├── children/ │ │ │ │ ├── AccountSetting.vue │ │ │ │ ├── ProfileSetting.vue │ │ │ │ └── SecuritySetting.vue │ │ │ └── index.js │ │ ├── submission/ │ │ │ ├── SubmissionDetails.vue │ │ │ └── SubmissionList.vue │ │ └── user/ │ │ ├── ApplyResetPassword.vue │ │ ├── Login.vue │ │ ├── Logout.vue │ │ ├── Register.vue │ │ ├── ResetPassword.vue │ │ └── UserHome.vue │ ├── plugins/ │ │ ├── highlight.js │ │ └── katex.js │ ├── store/ │ │ ├── index.js │ │ ├── modules/ │ │ │ ├── contest.js │ │ │ └── user.js │ │ └── types.js │ ├── styles/ │ │ ├── common.less │ │ ├── index.less │ │ ├── iview-custom.less │ │ └── markdown.less │ └── utils/ │ ├── constants.js │ ├── filters.js │ ├── sentry.js │ ├── storage.js │ ├── time.js │ └── utils.js └── static/ └── css/ └── loader.css