├── .gitignore ├── Docs ├── Hikari-FAQ.md ├── Hikari-Usage.md └── Hikari用户协议.md ├── Hikari_Server ├── index.js ├── module │ ├── login.js │ ├── ojconfig.js │ ├── problem.js │ ├── queue.js │ ├── record.js │ └── sensorship.js ├── package-lock.json └── package.json ├── Hikari_VSCode └── Hikari-vscode │ ├── CHANGELOG.md │ ├── README.md │ ├── extension.js │ ├── icon.png │ ├── jsconfig.json │ ├── judge.js │ ├── package-lock.json │ ├── package.json │ ├── queue.js │ ├── submissions │ └── _gitkeep │ └── test │ ├── runTest.js │ └── suite │ ├── extension.test.js │ └── index.js ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /Docs/Hikari-FAQ.md: -------------------------------------------------------------------------------- 1 | ### Q:会不会伪造结果? 2 | 3 | A:不会。每个评测点都是在不同机器上评测两遍的。如果差异过大会测第三遍。 4 | 5 | ### Q:会不会因为机器性能不同造成不公? 6 | 7 | A:不会。我们通过基准测试的方式动态控制每次评测的时限,因此每个测试相对公平。 8 | 9 | ### Q:会不会有恶意程序破坏电脑? 10 | 11 | A:不太可能。我们对上交的代码进行关键字比对来阻止恶意程序的上交。另外,在Milestone3时我们将引入沙箱。 12 | 13 | -------------------------------------------------------------------------------- /Docs/Hikari-Usage.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | ### 方法1: 4 | 5 | 1. 安装[VSCode]([Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)) 6 | 2. 在VSCode插件市场搜索hikari-VSCode并安装 7 | 8 | ### 方法2: 9 | 10 | 1. 安装[VSCode]([Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)) 11 | 2. 下载[插件安装包](安装[VSCode]([Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)) 12 | 3. VSCode->扩展->从VSIX安装![sample](https://i.loli.net/2021/09/03/pyPRHkbnGs38KFQ.png) 13 | 14 | 15 | 16 | # Configuration 17 | 18 | 1.![sample2](https://i.loli.net/2021/09/03/Wv5hM6Vn8jNOulX.png) 19 | 20 | 21 | 22 | 2.OJ网址(OJ_URL)请填``1.116.217.97``,密码请填OJ上的密码,用户名请填OJ上的用户名。 23 | 24 | # Usage 25 | 26 | 在代码编写界面右键选中“将代码提交至Hikari”或按Ctrl+F11提交代码,在上方弹出的对话框中输入题目编号,然后回车并耐心等待,一段时间后右下角将弹出评测结果。 -------------------------------------------------------------------------------- /Docs/Hikari用户协议.md: -------------------------------------------------------------------------------- 1 | 在使用本网站之前,请仔细阅读本协议并同意。 2 | 3 | # 1. Hikari使用协议的接受 4 | 5 | 通过访问和/或使用本网站,你表示同意接受本协议的所有条件和条款。如果你不愿接受本协议的全部条件和条款,请你不要访问或使用本网站。 6 | 7 | # 2. 本协议的变更和修改 8 | 9 | Hikari有权随时对本协议进行修改,并且一旦发生协议条款的变动,Hikari将在相关页面上提示修改的内容;用户如果不同意本协议的修改,可以放弃使用或访问本网站或取消已经获得的服务;如果用户选择在本协议变更后继续访问或使用本网站,则视为用户已经接受本协议的修改。 10 | 11 | # 3. 服务说明 12 | 13 | (1)Hikari运用自己的系统通过互联网向用户提供服务,除非另有明确规定,增强或强化目前服务的任何新功能,包括新产品以及新增加的服务,均无条件地适用本协议。 14 | 15 | (2)Hikari对网站服务不承担任何责任,我们不保证服务一定会满足用户的使用要求,也不保证服务不会被中断,对服务的及时性、安全性、准确性也不作担保。 16 | 17 | # 4. 用户行为 18 | 19 | ## 4.1用户帐号、密码和安全 20 | 21 | 用户一旦注册成功,便成为Hikari的合法用户,将得到一个密码和帐号。用户应采取合理措施维护其密码和帐号的安全。用户对利用该密码和帐号所进行的一切活动负全部责任;由该等活动所导致的任何损失或损害由用户承担,Hikari不承担任何责任。 22 | 23 | 用户的密码和帐号遭到未授权的使用或发生其他任何安全问题,用户可以立即通知Hikari,并且用户在每次连线结束,应结束帐号使用,否则用户可能得不到Hikari的安全保护。 24 | 25 | 对于用户长时间未使用的帐号,Hikari有权予以关闭。 26 | 27 | ## 4.2用户应遵守以下法律及法规 28 | 29 | 用户同意遵守《中华人民共和国保守国家秘密法》、《中华人民共和国著作权法》、《中华人民共和国计算机信息系统安全保护条例》、《计算机软件保护条例》、《互联网电子公告服务管理规定》、《信息网络传播权保护条例》等有关计算机及互联网规定的法律、法规、实施办法。在任何情况下,Hikari合理地认为用户的行为可能违反上述法律、法规,Hikari可以在任何时候,不经事先通知终止向该用户提供服务。 30 | 31 | Hikari欢迎用户举报任何违反上述法律或侵犯他人权利的上传内容,一经发现违法或侵权的上传内容,Hikari将无条件删除。 32 | 33 | ## 4.3禁止用户从事以下行为: 34 | 35 | (1)上载、张贴、发送电子邮件或传送包含任何反对宪法所确定的基本原则、危害国家安全、泄露国家秘密、颠覆国家政权、破坏国家统一、破坏民族团结、损害国家荣誉和利益、煽动民族仇恨、民族歧视、破坏民族团结、破坏国家宗教政策、宣扬邪教和封建迷信、淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪、侮辱或者诽谤他人,侵害他人合法权益的等法律、行政法规禁止的内容或其他另人反感的包括但不限于资讯、资料、文字、软件、音乐、照片、图形、信息或其他资料(以下简称内容)。 36 | 37 | (2)以任何方式危害未成年人。 38 | 39 | (3)冒充任何人或机构,或以虚伪不实的方式谎称或使人误认为与任何人或任何机构有关。 40 | 41 | (4)伪造标题或以其他方式操控识别资料,使人误认为该内容为Hikari所传送。 42 | 43 | (5)将无权传送的内容(例如内部资料、机密资料)进行上载、张贴、发送电子邮件或以其他方式传送。 44 | 45 | (6)将侵犯任何人的专利、商标、著作权、商业秘密或其他专属权利之内容加以上载、张贴、发送电子邮件或以其他方式传送。 46 | 47 | (7)将广告函件、促销资料、"垃圾邮件"等,加以上载、张贴、发送电子邮件或以其他方式传送。供前述目的使用的专用区域除外。 48 | 49 | (8)将有关干扰、破坏或限制任何计算机软件、硬件或通讯设备功能的软件病毒或其他计算机代码、档案和程序之资料,加以上载、张贴、发送电子邮件或以其他方式传送。 50 | 51 | (9)干扰或破坏本网站服务或与本网站服务相连的服务器和网络,或不遵守本网站使用之规定。 52 | 53 | (10)故意或非故意违反任何相关的中国法律、法规、规章、条例等其他具有法律效力的规范。 54 | 55 | (11)进行任何不利于Hikari、或Hikari用户利益的行为,包括但不限于在Hikari站内和公众社区。 56 | 57 | ## 4.4用户对经由本网站上载、张贴、发送电子邮件或传送的内容承担全部责任 58 | 59 | 对于经由本网站而传送的内容,Hikari不保证前述其合法性、正当性、准确性、完整性或品质。用户在接受本网站服务时,有可能会接触到令人不快、不适当或令人厌恶的内容。在任何情况下,Hikari均不对任何内容承担任何责任,包括但不限于任何内容发生任何错误或纰漏以及衍生的任何损失或损害。Hikari有权(但无义务)自行拒绝或删除经由本网站提供的任何内容。用户使用上述内容,应自行承担风险。Hikari有权利在下述情况下,对内容进行保存或披露: 60 | 61 | (1)法律程序所规定; 62 | 63 | (2)本服使用协议规定; 64 | 65 | (3)被侵害的第三人提出权利主张; 66 | 67 | (4)为保护Hikari、其使用者及社会公众的权利、财产或人身安全; 68 | 69 | (5)其他Hikari认为有必要的情况。 70 | 71 | ## 4.5对用户信息的存储和限制 72 | 73 | Hikari不对用户所发布信息的删除或储存失败承担责任。Hikari有权判断用户的行为是否符合本网站使用协议条款之规定,如果Hikari认为用户违背了协议条款的规定,Hikari有终止向其提供网站服务的权利。 74 | 75 | ## 4.6用户需要准守Hikari指定的各项制度,包括但不限于 76 | 77 | (1)Hikari社区规则、团队规则、题目规则、图床规则、比赛规则等 78 | 79 | # 5. 用户隐私权制度 80 | 81 | 当用户注册Hikari的服务时,用户须提供个人信息。Hikari收集个人信息的目的是为用户提供尽可能多的个人化网上服务。Hikari不会在未经合法用户授权时,公开、编辑或透露其个人信息及保存在Hikari中的非公开内容,除非有下列情况: 82 | 83 | (1)有关法律规定或Hikari合法服务程序规定; 84 | 85 | (2)在紧急情况下,为维护用户及公众的权益; 86 | 87 | (3)为维护Hikari的商标权、专利权及其他任何合法权益。 88 | 89 | (4)其他需要公开、编辑或透露个人信息的情况。 90 | 91 | 在以下(包括但不限于)几种情况下,Hikari有权使用用户的个人信息: 92 | 93 | (1)Hikari可以将用户信息与第三方数据匹配。 94 | 95 | (2)Hikari会通过透露合计用户统计数据,向未来的合作伙伴、广告商及其他第三方以及为了其他合法目的而描述Hikari的服务。 96 | 97 | Hikari会竭尽全力保护用户的信息,但Hikari不能确信或保证任何个人信息的安全性,用户须自己承担风险。 98 | 99 | # 6. 关于用户在Hikari上载或发布的内容: 100 | 101 | (1)用户上载的内容是指用户在本网站上载或发布的题目或其它任何形式的内容包括文字、图片、视频、音频等。 102 | 103 | (2)除非Hikari收到相反通知,Hikari将用户视为其在本网站上载或发布的内容的版权拥有人。用户在本网站上载或发布内容即视为其同意授予Hikari所有上述内容的在全球范围内的免费、且可转让的非独家使用权许可,Hikari有权展示、散布及推广前述内容。但包含如下例外:对于用户上传到个人、团队题库的私题,如不选择“允许公众查看”选项,则Hikari不会获得以上的权利。对于个人、团队题库中的公开题目,Hikari在行使以上权利时将会征取用户同意,如用户不愿意授予以上所有或部分使用权,需要及时对Hikari进行回应,否则默认为同意。对于用户主动提交到公有题库的题目,则默认用户授予以上所有权利。 104 | 105 | (3)因用户进行上述内容在本网站的上载或发布,而导致任何第三方提出索赔要求或衍生的任何损害或损失,由用户承担全部责任。 106 | 107 | # 7. 关于第三方链接 108 | 109 | 本网站服务可能会提供与其他国际互联网网站或资源进行链接。对于前述网站或资源是否可以利用,Hikari承担担保责任。但因使用或依赖上述网站或资源所生的损失或损害,Hikari也不负担责任。 110 | 111 | # 8. Hikari的知识产权及其他权利 112 | 113 | (1)Hikari对网站服务及本网站所使用的软件所包含的受知识产权或其他法律保护的资料享有相应的权利;除用户依法享有之版权之内容之外,本网站的整体内容版权归Hikari所有。 114 | 115 | (2)经由本网站传送的题目及其它内容,受到著作权法、商标法、专利法或其他法律的保护;除该题目及其它内容上载的用户所享有的版权,未经Hikari明示授权许可,其他用户不得进行修改、出租、散布或衍生其他作品。 116 | 117 | (3)用户对本网站所使用的软件有非专属性使用权,但不得自行或许可任何第三方复制、修改、出售或衍生产品。 118 | 119 | (4)本网站所有设计图样以及其他图样、产品及服务名称,均为Hikari所享有的商标、标识。任何人不得使用、复制或用作其他用途。 120 | 121 | (5)用户可以提交题目或者题解等内容到Hikari公开题库或者题解区。用户将这些内容提交到共有审核时即认为是向公众公开,Hikari及Hikari用户拥有对这些内容的使用权。在没有特殊说明的情况下,Hikari默认这些内容的著作权归上传者所有。 122 | 123 | (6)当已经公开的内容的上传者不具有这些内容的著作权,且著作权真正持有者要求这些内容不公开时,著作权持有人可以申请将题目下架。权利人需要提供: 124 | 125 | - 能够证明该题目是由该人的成果(比如正规比赛的命题人页面) 126 | - 如果是个人权利主张者,请提供身份证正反复印件。如果是是机构,请提供营业执照或者组织机构代表证的复印件。 127 | - 将材料发送到相关的管理员邮箱。如果缺少任一材料予以证实,我们视为没有提出该主张。 128 | 129 | # 9. 免责声明 130 | 131 | (1)Hikari对于任何自本网站而获得的他人的信息、内容或者广告宣传等任何资讯(以下统称"信息"),不保证真实、准确和完整性。如果任何单位或者个人通过上述"信息"而进行任何行为,须自行甄别真伪和谨慎预防风险,否则,无论何种原因,本网站不对任何非与本网站直接发生的交易和/或行为承担任何直接、间接、附带或衍生的损失和责任。 132 | 133 | (2)Hikari有权但无义务,改善或更正本网站任何部分之任何疏漏、错误。 134 | 135 | (3)Hikari不保证(包括但不限于): 136 | 137 | a. 本网站适合用户的使用要求; 138 | 139 | b. 本网站不受干扰,及时、安全、可靠或不出现错误; 140 | 141 | c. 用户经由本网站取得的任何产品、服务或其他材料符合用户的期望。 142 | 143 | (4)用户使用经由本网站下载的或取得的任何资料,其风险自行负担;因该等使用导致用户电脑系统损坏或资料流失,用户应负完全责任; 144 | 145 | (5)基于以下原因而造成的利润、商业信誉、资料损失或其他有形或无形损失,Hikari不承担任何直接、间接、附带、衍生或惩罚性的赔偿: 146 | 147 | a. 本网站使用或无法使用; 148 | 149 | b. 经由本网站取得的任何资料; 150 | 151 | c. 用户资料遭到未授权的使用或修改; 152 | 153 | d. 其他与本网站相关的事宜。 154 | 155 | (6)用户在浏览互联网时自行判断使用本网站的搜索或检索目录。该搜索或检索目录可能会引导用户进入到被认为具有攻击性或不适当的网站,Hikari没有义务查看检索目录所列网站的内容,因此,对其正确性、合法性、正当性不负任何责任。 156 | 157 | (7)除了Hikari官方QQ群以外,其他的一切网友群体,均由网站用户自发组织,其中用户成员以及用户言论、行为均与Hikari无关。 158 | 159 | (8)Hikari默认用户加入“代码公开计划”,用户提交的代码可能会被其他用户查看,但是用户可以随时取消该计划。因用户没有取消该计划而造成代码外泄及其他后果的,Hikari不承担责任。 160 | 161 | # 10. 第三方责任 162 | 163 | 由于用户经由本网站上载或发布内容、与本网站连线、违反本服务条款或侵害其他人的任何权利导致任何第三人提出权利主张,用户同意赔偿Hikari,并使其免受损害。 164 | 165 | # 11. 服务的终止 166 | 167 | Hikari有权在任何时候,暂时或永久地终止本网站服务(或任何一部分),无论是否通知。Hikari对本网站服务的终止对用户和任何第三人不承担任何责任。Hikari有权基于任何理由,终止用户的帐号、密码或使用本服务,或删除、转移用户存储、发布在本服务的内容,Hikari采取上述行为均不需通知,并且对用户和任何第三人不承担任何责任。 168 | 169 | # 12. 通知 170 | 171 | Hikari向用户发出的通知,采用电子邮件或页面公告的形式。本协议条款的修改或其他事项变更时,Hikari将会以上述某一形式进行通知。 172 | 173 | # 13. 法律的适用和管辖 174 | 175 | 本使用协议的生效、履行、解释及争议的解决均适用中华人民共和国法律,与本协议有关的争议提交由Hikari服务器所在地的法院管辖。本服务条款因与中华人民共和国现行法律相抵触而导致部分无效,不影响其他部分的效力。 176 | 177 | Hikari享有在法律允许的范围内对本协议的最终解释权 -------------------------------------------------------------------------------- /Hikari_Server/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hikari-Server 3 | * Powered by Clearwave of Hikari-Dev 4 | * 5 | * Folder Sturcture: 6 | * - module 7 | * - login.js : 登录验证相关 8 | * - ojconfig.js : 常量 9 | * - problem.js : 题目数据相关 10 | * - queue.js : 评测队列相关 11 | * - record.js : 评测记录相关 12 | */ 13 | 14 | process.on('uncaughtException', function (err) { 15 | console.error(err.stack); 16 | }); 17 | 18 | var ojcfg = require("./module/ojconfig"); 19 | const server = ojcfg.server; 20 | 21 | const io = ojcfg.io; 22 | const login = require("./module/login.js"); 23 | const Queue = require("./module/queue.js"); 24 | const problem = require("./module/problem"); 25 | const record = require("./module/record"); 26 | const sensorship = require("./module/sensorship"); 27 | 28 | var request = require("sync-request"); 29 | var md5 = require("md5-node"); 30 | 31 | //socket连接列表 32 | 33 | /* 34 | * socket主进程 35 | */ 36 | 37 | io.engine.on("connection_error", (err) => { 38 | console.log(err.req); // the request object 39 | console.log(err.code); // the error code, for example 1 40 | console.log(err.message); // the error message, for example "Session ID unknown" 41 | console.log(err.context); // some additional error context 42 | }); 43 | 44 | io.sockets.on("connection", function (socket) { 45 | //客户端连接时,保存socketId和用户名 46 | var socketId = socket.id; 47 | console.log("[index.js] " + socketId + " Connection Established."); 48 | ojcfg.connectionList[socketId] = { 49 | socket: socket, 50 | token: socketId, //十六位Token 51 | }; 52 | 53 | //用户登录事件 54 | socket.on("login", function (data) { 55 | ojcfg.connectionList[socketId].info = data.info; 56 | login.validate_user( 57 | socketId, 58 | data.username, 59 | data.password, 60 | function (uid, uname, passwd, grade) { 61 | ojcfg.userLoggedin += 1; 62 | ojcfg.connectionList[socketId].loggedin = true; 63 | ojcfg.connectionList[socketId].uid = uid; 64 | ojcfg.connectionList[socketId].username = uname; 65 | ojcfg.connectionList[socketId].password = passwd; 66 | ojcfg.connectionList[socketId].grade = grade; //用户等级 67 | console.log("[index.js] " + data.username + " of Grade " + grade + " logged in."); 68 | } 69 | ); 70 | }); 71 | 72 | //用户提交评测 73 | socket.on("submit", function (data) { 74 | problem.get_problem_data(socketId, data.pid, -1, function (tot_grp) { 75 | if (tot_grp == -1) { //题目不存在或为隐藏 76 | io.emit("judge_all_done", { 77 | uid: data.uid, 78 | pid: data.pid, 79 | pts: 0, 80 | datacnt: 1, 81 | stat: "Problem NOT FOUND", 82 | }); 83 | } 84 | }); 85 | 86 | data.code = sensorship.sensor(data.code); 87 | var cur_rid = Date.now(); //生成RID 88 | data.rid = cur_rid; 89 | 90 | //初始化评测记录 91 | ojcfg.result_list[cur_rid] = {}; 92 | ojcfg.result_list[cur_rid].all_done = false; 93 | ojcfg.result_list[cur_rid].socketId = socketId; 94 | ojcfg.result_list[data.rid].cnt = 0; 95 | ojcfg.result_list[data.rid].pts = 0; 96 | ojcfg.result_list[data.rid].rid = data.rid; 97 | ojcfg.result_list[data.rid].uid = data.uid; 98 | ojcfg.result_list[data.rid].pid = data.pid; 99 | ojcfg.result_list[data.rid].timestamp = Date.now(); 100 | ojcfg.result_list[data.rid].code = data.code; 101 | //ojcfg.result_list[data.rid].pid = data.pid; 102 | ojcfg.result_list[cur_rid].grp_rec = {}; 103 | 104 | Queue.push(data, function (uid, pid, code) { 105 | if (ojcfg.connectionList[socketId].uid == uid) { //提交者是本人 106 | ojcfg.cntInQueue += 1; 107 | problem.get_problem_data(socketId, pid, -1, function (tot_grp) { //获取数据组数 108 | ojcfg.result_list[data.rid].tot_grp = tot_grp; 109 | for (i = 1; i <= tot_grp; i++) { 110 | problem.get_problem_data(socketId, pid, i, function (c_data, grp_id) { //获取当前数据点输入输出文件 111 | problem.get_problem_limits(pid, function (lim_data) { //获取当前数据点时空限制 112 | ojcfg.result_list[cur_rid].grp_rec[grp_id] ={}; 113 | ojcfg.result_list[cur_rid].grp_rec[grp_id].timestamp = Date.now(); 114 | ojcfg.result_list[cur_rid].grp_rec[grp_id].exist = false; 115 | ojcfg.result_list[cur_rid].grp_rec[grp_id].time_limit = lim_data.time_limit; 116 | ojcfg.result_list[cur_rid].grp_rec[grp_id].mem_limit = lim_data.mem_limit; 117 | ojcfg.result_list[cur_rid].grp_rec[grp_id].db_out = md5(request('GET',c_data.output).getBody().toString().replace(/\s*/g, "").replace(/[\r\n]/g, "").replace(/[\n]/g, ""));//答案文件的MD5 118 | console.log("[index.js] Pulled Test " + grp_id + " of RID " + cur_rid); 119 | if (io.engine.clientsCount <= 5) { 120 | socket.emit("judge_pull", {//(临时性措施以避免BUG,待修改) 应向全部人发出评测申请,以防评测效率过低 121 | rid: cur_rid, 122 | uid: uid, 123 | pid: pid, 124 | grp: grp_id, 125 | code: code, 126 | input: c_data.input, 127 | time_limit: lim_data.time_limit, 128 | mem_limit: lim_data.mem_limit, 129 | }); 130 | } else { 131 | socket.broadcast.emit("judge_pull", {//向除了该人之外的其他人发出评测申请 132 | rid: cur_rid, 133 | uid: uid, 134 | pid: pid, 135 | grp: grp_id, 136 | code: code, 137 | input: c_data.input, 138 | time_limit: lim_data.time_limit, 139 | mem_limit: lim_data.mem_limit, 140 | }); 141 | } 142 | }); 143 | }); 144 | } 145 | }); 146 | } 147 | }); 148 | }); 149 | 150 | socket.on("judge_push_result", function (data) { 151 | record.tackle_pts_done(data); 152 | }); 153 | 154 | //用户离开 155 | socket.on("disconnect", function () { 156 | if (ojcfg.connectionList[socketId].loggedin == true) { 157 | ojcfg.userLoggedin -= 1; 158 | console.log("[index.js] " + ojcfg.connectionList[socketId].username + " logged out."); 159 | } 160 | 161 | delete ojcfg.connectionList[socketId]; 162 | }); 163 | }); 164 | 165 | /** 166 | 重发评测失败的数据点 (有锅) 167 | 168 | function grp_overtime_re_emit(){ 169 | for (var it_rid in ojcfg.result_list){ 170 | if (Date.now() - ojcfg.result_list[it_rid].timestamp > 1000*60*5){ //超时 171 | if (!ojcfg.result_list[it_rid].all_done){ //未完成 172 | for (var i = 1;i<=ojcfg.result_list[it_rid].tot_grp;i+=1){ 173 | if (i <= ojcfg.result_list[it_rid].tot_grp && ojcfg.result_list[it_rid].grp_rec.hasOwnProperty(i) && !ojcfg.result_list[it_rid].grp_rec[i].exist){ //未完成 174 | record.tackle_pts_done({ 175 | rid: ojcfg.result_list[it_rid].rid, 176 | uid: ojcfg.result_list[it_rid].uid, 177 | pid: ojcfg.result_list[it_rid].pid, 178 | grp: i, 179 | code: ojcfg.result_list[it_rid].code, 180 | compile_info : "Judge Failed.", 181 | status: "UKE", 182 | out: "Judge Failed.", 183 | }); 184 | } 185 | } 186 | }else{ 187 | delete ojcfg.result_list[it_rid]; //已完成则删除 188 | } 189 | } 190 | } 191 | } 192 | setInterval(grp_overtime_re_emit,1000*60*2); //2分钟轮询一次 193 | */ 194 | 195 | server.listen(1919); 196 | console.log("[index.js] Server listening on port 1919."); 197 | 198 | module.exports = { 199 | io, 200 | }; 201 | -------------------------------------------------------------------------------- /Hikari_Server/module/login.js: -------------------------------------------------------------------------------- 1 | /* 数据库 */ 2 | var ojcfg = require("./ojconfig"); 3 | var mysql = require('mysql'); 4 | /* md5加密 */ 5 | var md5 = require("md5-node"); 6 | var io = ojcfg.io; 7 | 8 | /* 数据表user 9 | CREATE TABLE `user` ( 10 | `id` int(11) NOT NULL AUTO_INCREMENT, 11 | `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 12 | `password` varchar(50) COLLATE utf8_unicode_ci NOT NULL, 13 | `Email` varchar(200) COLLATE utf8_unicode_ci NOT NULL, 14 | `luoguUID` int(11) NOT NULL DEFAULT '1', 15 | `tag` varchar(200) COLLATE utf8_unicode_ci NOT NULL, 16 | `grade` int(11) NOT NULL DEFAULT '1', 17 | `message` int(11) NOT NULL DEFAULT '0', 18 | PRIMARY KEY (`id`), 19 | UNIQUE KEY `id` (`id`), 20 | UNIQUE KEY `name` (`name`) 21 | ) ENGINE=MyISAM AUTO_INCREMENT=262 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 22 | */ 23 | 24 | function validate_userdata_mysql(uname, passwd, callback) { 25 | /* 返回数据JSON 数据见上 */ 26 | var con = mysql.createConnection({ 27 | host : ojcfg.host, 28 | user : ojcfg.user, 29 | password : ojcfg.password, 30 | database : ojcfg.database 31 | }); 32 | 33 | con.connect(); 34 | data = JSON.parse('{"code":"error","result":"用户不存在"}'); 35 | var sql = "SELECT * FROM `user` WHERE `name` in(" + con.escape(uname) + ")"; 36 | con.query(sql, function (err, result) { 37 | if (err) { 38 | throw err; 39 | } 40 | 41 | var len = result.length; 42 | if (len == 0){ 43 | con.end(); 44 | callback(data); 45 | } 46 | 47 | passwd = md5(md5(md5(passwd))); 48 | for (var i = 0; i < len; i++) { 49 | if (result[i]["name"].toLowerCase() == uname.toLowerCase()) { 50 | if (result[i]["password"] == passwd) { 51 | data["code"] = "success"; 52 | data["result"] = result[i]; 53 | break; 54 | } else { 55 | console.log("[login.js] Password Missmatch! (" + result[i]["password"] + ',' + passwd + ")"); 56 | data = JSON.parse('{"code":"error","result":"密码错误"}'); 57 | } 58 | } 59 | } 60 | 61 | callback(data); 62 | }); 63 | } 64 | 65 | /** 66 | * 验证用户信息时否正确。 67 | * @param {*} socket 68 | * @param {string} uname 69 | * @param {string} passwd 70 | * @param {Function} callback 71 | */ 72 | 73 | function validate_user(token, uname, passwd, callback) { 74 | validate_userdata_mysql(uname, passwd, function (data) { 75 | if (data["code"] == "success") { 76 | io.emit("LOGIN_SUCCESS", { 77 | uid: data["result"]["id"], 78 | uname: uname, 79 | token: token, 80 | }); 81 | callback(data["result"]["id"], uname, passwd,data["result"]["grade"]); 82 | } else { 83 | io.emit("LOGIN_FAILED", { 84 | uid: -1, 85 | uname: uname, 86 | token: token, 87 | }); 88 | console.log("[login.js] valid Failed."); 89 | } 90 | }); 91 | } 92 | 93 | module.exports = { 94 | validate_user, 95 | }; 96 | -------------------------------------------------------------------------------- /Hikari_Server/module/ojconfig.js: -------------------------------------------------------------------------------- 1 | var host = 'localhost'; 2 | var user = 'hikari'; 3 | var password = 'Z4E4zxFafyH6nJr4'; 4 | var database = 'hikari'; 5 | 6 | /* 数据表user 7 | CREATE TABLE `user` ( 8 | `id` int(11) NOT NULL AUTO_INCREMENT, 9 | `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 10 | `password` varchar(50) COLLATE utf8_unicode_ci NOT NULL, 11 | `Email` varchar(200) COLLATE utf8_unicode_ci NOT NULL, 12 | `luoguUID` int(11) NOT NULL DEFAULT '1', 13 | `tag` varchar(200) COLLATE utf8_unicode_ci NOT NULL, 14 | `grade` int(11) NOT NULL DEFAULT '1', 15 | `message` int(11) NOT NULL DEFAULT '0', 16 | PRIMARY KEY (`id`), 17 | UNIQUE KEY `id` (`id`), 18 | UNIQUE KEY `name` (`name`) 19 | ) ENGINE=MyISAM AUTO_INCREMENT=262 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 20 | */ 21 | 22 | /*数据表problem 23 | CREATE TABLE `problem` ( 24 | `id` int(11) NOT NULL AUTO_INCREMENT, 25 | `title` varchar(100) NOT NULL, 26 | `provider` int(11) NOT NULL, 27 | `time` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP, 28 | `tag` varchar(100) NOT NULL, 29 | `gescription` longtext NOT NULL, 30 | `input` longtext NOT NULL, 31 | `output` longtext NOT NULL, 32 | `sample` longtext NOT NULL, 33 | `hint` longtext NOT NULL, 34 | `data` longtext NOT NULL, 35 | `hidden` int(11) NOT NULL DEFAULT '0', 36 | `time_limit` int(11) NOT NULL, 37 | `mem_limit` int(11) NOT NULL, 38 | `type` int(11) NOT NULL, 39 | PRIMARY KEY (`id`) 40 | ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 41 | */ 42 | 43 | /*评测记录数据库record 44 | CREATE TABLE `hikari`.`record` ( 45 | `id` INT AUTO_INCREMENT NOT NULL , 46 | `rid` BIGINT NOT NULL , 47 | `pid` INT NOT NULL , 48 | `uid` INT NOT NULL , 49 | `code` LONGTEXT NOT NULL , 50 | `stat` VARCHAR(30) NOT NULL , 51 | `pts` INT NOT NULL , 52 | `detail` LONGTEXT NOT NULL , 53 | PRIMARY KEY (`id`) 54 | ) ENGINE = InnoDB; 55 | */ 56 | 57 | /*评测验证数据库reliable_judge 58 | CREATE TABLE `hikari`.`reliable_judge` ( 59 | `id` INT NOT NULL AUTO_INCREMENT, 60 | `rid` BIGINT(20) NOT NULL, 61 | `code` LONGTEXT NOT NULL, 62 | `input` LONGTEXT NOT NULL, 63 | `output` LONGTEXT NOT NULL, 64 | PRIMARY KEY (`id`), 65 | UNIQUE (`rid`) 66 | ) ENGINE = InnoDB; 67 | */ 68 | 69 | /*用户记录数据库 70 | CREATE TABLE `hikari`.`statistics` ( 71 | `id` INT NOT NULL , 72 | `tot_submit` INT NOT NULL DEFAULT '0' , 73 | `tot_ac` INT NOT NULL DEFAULT '0' , 74 | `ac_detail` LONGTEXT , 75 | `rank` INT NOT NULL DEFAULT '1000' , 76 | PRIMARY KEY (`id`)) ENGINE = InnoDB; 77 | */ 78 | 79 | //socket连接列表 80 | var connectionList = {}; 81 | var result_list = {}; 82 | 83 | //队列中的评测数 84 | var cntInQueue = 0; 85 | //登陆的用户数 86 | var userLoggedin = 0; 87 | 88 | const server = require("http").createServer(function (request, response) { 89 | response.writeHead(200, { "Content-Type": "text/json" }); 90 | var comma = false; 91 | if (request.url.startsWith('/judgers')){ 92 | resp = '['; 93 | for (var index in connectionList){ 94 | if (typeof(connectionList[index].info) != "undefined"){ 95 | if (!comma) comma = true; else resp += ','; 96 | resp += connectionList[index].info; 97 | } 98 | } 99 | resp += ']'; 100 | response.end(resp); 101 | }else{ 102 | response.end('{"status":"200","online":"' + io.engine.clientsCount + '","inqueue":"0"}\n'); 103 | } 104 | }); 105 | 106 | const io = require("socket.io")(server); 107 | const fs = require("fs"); 108 | var request = require('sync-request'); 109 | 110 | const data_servers = JSON.parse(fs.readFileSync("../../front-end/data-server.json")); 111 | function choose_data_server(){ 112 | for (i=0;i= datacnt && !ojcfg.result_list[data.rid].all_done) { //全部测试点完成 101 | console.log("[index.js] Judge All Done!" + data.rid); 102 | ojcfg.cntInQueue -= 1; 103 | 104 | //判断该评测的结果,取第一个非AC状态。 105 | ojcfg.result_list[data.rid].stat = "AC"; 106 | for (i = 1; i <= datacnt; i += 1) { 107 | if (ojcfg.result_list[data.rid].grp_rec[i].status != "AC") { 108 | ojcfg.result_list[data.rid].stat = 109 | ojcfg.result_list[data.rid].grp_rec[i].status; 110 | break; 111 | } 112 | } 113 | 114 | //打标记 115 | ojcfg.result_list[data.rid].all_done = true; 116 | 117 | //删除冗余项 118 | delete ojcfg.result_list[data.rid].rid; 119 | delete ojcfg.result_list[data.rid].uid; 120 | delete ojcfg.result_list[data.rid].pid; 121 | delete ojcfg.result_list[data.rid].socketId; 122 | delete ojcfg.result_list[data.rid].tot_grp; 123 | delete ojcfg.result_list[data.rid].timestamp; 124 | 125 | for (i = 1; i <= datacnt; i += 1) { 126 | delete ojcfg.result_list[data.rid].grp_rec[i].timestamp; 127 | delete ojcfg.result_list[data.rid].grp_rec[i].exist; 128 | delete ojcfg.result_list[data.rid].grp_rec[i].time_limit; 129 | delete ojcfg.result_list[data.rid].grp_rec[i].mem_limit; 130 | delete ojcfg.result_list[data.rid].grp_rec[i].db_out; 131 | } 132 | 133 | //保存至数据库 134 | save_result_to_db( 135 | data.rid, 136 | data.pid, 137 | data.uid, 138 | ojcfg.result_list[data.rid].code, 139 | ojcfg.result_list[data.rid].stat, 140 | ojcfg.result_list[data.rid].pts, 141 | JSON.stringify(ojcfg.result_list[data.rid].grp_rec) 142 | ); 143 | 144 | io.emit("judge_all_done", {//发送全部完成消息 145 | rid: data.rid, 146 | uid: data.uid, 147 | pid: data.pid, 148 | pts: ojcfg.result_list[data.rid].pts, 149 | datacnt: datacnt, 150 | stat: ojcfg.result_list[data.rid].stat, 151 | }); 152 | } else { 153 | console.log( 154 | "[index.js] Judge " + 155 | data.rid + 156 | ": " + 157 | ojcfg.result_list[data.rid].cnt + 158 | " Out of " + 159 | datacnt 160 | ); 161 | } 162 | }); 163 | } 164 | } else { 165 | //console.log("[index.js] " + ojcfg.result_list[data.rid].grp_rec[data.grp]); 166 | console.log("[index.js] User " + data.uid + "'s result has been rejected."); 167 | } 168 | } 169 | module.exports = { 170 | save_result_to_db, 171 | tackle_pts_done 172 | } -------------------------------------------------------------------------------- /Hikari_Server/module/sensorship.js: -------------------------------------------------------------------------------- 1 | function sensor(str){ 2 | return str.replace(/##/g,"--") 3 | .replace(/system/g,"printf") 4 | .replace(/freopen/g,"") 5 | .replace(/fstream/g,"") 6 | .replace(/windows.h/g,"") 7 | .replace(/CON/g,"") 8 | } 9 | 10 | module.exports = { 11 | sensor 12 | }; -------------------------------------------------------------------------------- /Hikari_Server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hikari_server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/component-emitter": { 8 | "version": "1.2.10", 9 | "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", 10 | "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" 11 | }, 12 | "@types/concat-stream": { 13 | "version": "1.6.1", 14 | "resolved": "https://registry.nlark.com/@types/concat-stream/download/@types/concat-stream-1.6.1.tgz?cache=0&sync_timestamp=1629707352697&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fconcat-stream%2Fdownload%2F%40types%2Fconcat-stream-1.6.1.tgz", 15 | "integrity": "sha1-JLz8EB7PaOiGqu3OYN/XS2MqG3Q=", 16 | "requires": { 17 | "@types/node": "*" 18 | } 19 | }, 20 | "@types/cookie": { 21 | "version": "0.4.1", 22 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 23 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" 24 | }, 25 | "@types/cors": { 26 | "version": "2.8.12", 27 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", 28 | "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" 29 | }, 30 | "@types/form-data": { 31 | "version": "0.0.33", 32 | "resolved": "https://registry.npm.taobao.org/@types/form-data/download/@types/form-data-0.0.33.tgz", 33 | "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", 34 | "requires": { 35 | "@types/node": "*" 36 | } 37 | }, 38 | "@types/node": { 39 | "version": "16.7.4", 40 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.4.tgz", 41 | "integrity": "sha512-25QXpDsTiDnl2rZGUenagVMwO46way8dOUdvoC3R3p+6TrbpxeJBo/v87BEG1IHI31Jhaa8lPeSHcqwxsVBeYQ==" 42 | }, 43 | "@types/qs": { 44 | "version": "6.9.7", 45 | "resolved": "https://registry.npmmirror.com/@types/qs/download/@types/qs-6.9.7.tgz", 46 | "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=" 47 | }, 48 | "accepts": { 49 | "version": "1.3.7", 50 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 51 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 52 | "requires": { 53 | "mime-types": "~2.1.24", 54 | "negotiator": "0.6.2" 55 | } 56 | }, 57 | "asap": { 58 | "version": "2.0.6", 59 | "resolved": "https://registry.nlark.com/asap/download/asap-2.0.6.tgz", 60 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 61 | }, 62 | "async": { 63 | "version": "3.2.1", 64 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", 65 | "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" 66 | }, 67 | "asynckit": { 68 | "version": "0.4.0", 69 | "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", 70 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 71 | }, 72 | "base64-arraybuffer": { 73 | "version": "0.1.4", 74 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", 75 | "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" 76 | }, 77 | "base64id": { 78 | "version": "2.0.0", 79 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 80 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" 81 | }, 82 | "bignumber.js": { 83 | "version": "9.0.0", 84 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 85 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" 86 | }, 87 | "buffer-from": { 88 | "version": "1.1.2", 89 | "resolved": "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz", 90 | "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=" 91 | }, 92 | "bufferutil": { 93 | "version": "4.0.3", 94 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", 95 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", 96 | "requires": { 97 | "node-gyp-build": "^4.2.0" 98 | } 99 | }, 100 | "call-bind": { 101 | "version": "1.0.2", 102 | "resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz", 103 | "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", 104 | "requires": { 105 | "function-bind": "^1.1.1", 106 | "get-intrinsic": "^1.0.2" 107 | } 108 | }, 109 | "caseless": { 110 | "version": "0.12.0", 111 | "resolved": "https://registry.nlark.com/caseless/download/caseless-0.12.0.tgz", 112 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 113 | }, 114 | "combined-stream": { 115 | "version": "1.0.8", 116 | "resolved": "https://registry.nlark.com/combined-stream/download/combined-stream-1.0.8.tgz", 117 | "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", 118 | "requires": { 119 | "delayed-stream": "~1.0.0" 120 | } 121 | }, 122 | "component-bind": { 123 | "version": "1.0.0", 124 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 125 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 126 | }, 127 | "component-emitter": { 128 | "version": "1.3.0", 129 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 130 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 131 | }, 132 | "concat-stream": { 133 | "version": "1.6.2", 134 | "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", 135 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", 136 | "requires": { 137 | "buffer-from": "^1.0.0", 138 | "inherits": "^2.0.3", 139 | "readable-stream": "^2.2.2", 140 | "typedarray": "^0.0.6" 141 | } 142 | }, 143 | "cookie": { 144 | "version": "0.4.1", 145 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 146 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 147 | }, 148 | "core-util-is": { 149 | "version": "1.0.2", 150 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 151 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 152 | }, 153 | "cors": { 154 | "version": "2.8.5", 155 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 156 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 157 | "requires": { 158 | "object-assign": "^4", 159 | "vary": "^1" 160 | } 161 | }, 162 | "d": { 163 | "version": "1.0.1", 164 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 165 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 166 | "requires": { 167 | "es5-ext": "^0.10.50", 168 | "type": "^1.0.1" 169 | } 170 | }, 171 | "debug": { 172 | "version": "2.6.9", 173 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 174 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 175 | "requires": { 176 | "ms": "2.0.0" 177 | } 178 | }, 179 | "delayed-stream": { 180 | "version": "1.0.0", 181 | "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", 182 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 183 | }, 184 | "engine.io": { 185 | "version": "5.1.1", 186 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", 187 | "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", 188 | "requires": { 189 | "accepts": "~1.3.4", 190 | "base64id": "2.0.0", 191 | "cookie": "~0.4.1", 192 | "cors": "~2.8.5", 193 | "debug": "~4.3.1", 194 | "engine.io-parser": "~4.0.0", 195 | "ws": "~7.4.2" 196 | }, 197 | "dependencies": { 198 | "debug": { 199 | "version": "4.3.2", 200 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 201 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 202 | "requires": { 203 | "ms": "2.1.2" 204 | } 205 | }, 206 | "ms": { 207 | "version": "2.1.2", 208 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 209 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 210 | } 211 | } 212 | }, 213 | "engine.io-parser": { 214 | "version": "4.0.2", 215 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", 216 | "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", 217 | "requires": { 218 | "base64-arraybuffer": "0.1.4" 219 | } 220 | }, 221 | "es5-ext": { 222 | "version": "0.10.53", 223 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 224 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", 225 | "requires": { 226 | "es6-iterator": "~2.0.3", 227 | "es6-symbol": "~3.1.3", 228 | "next-tick": "~1.0.0" 229 | } 230 | }, 231 | "es6-iterator": { 232 | "version": "2.0.3", 233 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 234 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 235 | "requires": { 236 | "d": "1", 237 | "es5-ext": "^0.10.35", 238 | "es6-symbol": "^3.1.1" 239 | } 240 | }, 241 | "es6-symbol": { 242 | "version": "3.1.3", 243 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 244 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 245 | "requires": { 246 | "d": "^1.0.1", 247 | "ext": "^1.1.2" 248 | } 249 | }, 250 | "ext": { 251 | "version": "1.5.0", 252 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.5.0.tgz", 253 | "integrity": "sha512-+ONcYoWj/SoQwUofMr94aGu05Ou4FepKi7N7b+O8T4jVfyIsZQV1/xeS8jpaBzF0csAk0KLXoHCxU7cKYZjo1Q==", 254 | "requires": { 255 | "type": "^2.5.0" 256 | }, 257 | "dependencies": { 258 | "type": { 259 | "version": "2.5.0", 260 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", 261 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" 262 | } 263 | } 264 | }, 265 | "form-data": { 266 | "version": "2.5.1", 267 | "resolved": "https://registry.nlark.com/form-data/download/form-data-2.5.1.tgz", 268 | "integrity": "sha1-8svsV7XlniNxbhKP5E1OXdI4lfQ=", 269 | "requires": { 270 | "asynckit": "^0.4.0", 271 | "combined-stream": "^1.0.6", 272 | "mime-types": "^2.1.12" 273 | } 274 | }, 275 | "function-bind": { 276 | "version": "1.1.1", 277 | "resolved": "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz", 278 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" 279 | }, 280 | "get-intrinsic": { 281 | "version": "1.1.1", 282 | "resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz", 283 | "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=", 284 | "requires": { 285 | "function-bind": "^1.1.1", 286 | "has": "^1.0.3", 287 | "has-symbols": "^1.0.1" 288 | } 289 | }, 290 | "get-port": { 291 | "version": "3.2.0", 292 | "resolved": "https://registry.npmmirror.com/get-port/download/get-port-3.2.0.tgz", 293 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" 294 | }, 295 | "has": { 296 | "version": "1.0.3", 297 | "resolved": "https://registry.nlark.com/has/download/has-1.0.3.tgz", 298 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", 299 | "requires": { 300 | "function-bind": "^1.1.1" 301 | } 302 | }, 303 | "has-symbols": { 304 | "version": "1.0.2", 305 | "resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz", 306 | "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=" 307 | }, 308 | "http": { 309 | "version": "0.0.1-security", 310 | "resolved": "https://registry.nlark.com/http/download/http-0.0.1-security.tgz", 311 | "integrity": "sha1-OqwJEp0S3CdHu85BV6/eIK0feZU=" 312 | }, 313 | "http-basic": { 314 | "version": "8.1.3", 315 | "resolved": "https://registry.npm.taobao.org/http-basic/download/http-basic-8.1.3.tgz", 316 | "integrity": "sha1-p8q+51Joabm3EBNpcIBbEAQmG78=", 317 | "requires": { 318 | "caseless": "^0.12.0", 319 | "concat-stream": "^1.6.2", 320 | "http-response-object": "^3.0.1", 321 | "parse-cache-control": "^1.0.1" 322 | } 323 | }, 324 | "http-response-object": { 325 | "version": "3.0.2", 326 | "resolved": "https://registry.npm.taobao.org/http-response-object/download/http-response-object-3.0.2.tgz", 327 | "integrity": "sha1-f0NbshBFTkNg0HTvH5idXqiqmBA=", 328 | "requires": { 329 | "@types/node": "^10.0.3" 330 | }, 331 | "dependencies": { 332 | "@types/node": { 333 | "version": "10.17.60", 334 | "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-10.17.60.tgz?cache=0&sync_timestamp=1635213425908&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.60.tgz", 335 | "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=" 336 | } 337 | } 338 | }, 339 | "inherits": { 340 | "version": "2.0.4", 341 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 342 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 343 | }, 344 | "is-typedarray": { 345 | "version": "1.0.0", 346 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 347 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 348 | }, 349 | "isarray": { 350 | "version": "1.0.0", 351 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 352 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 353 | }, 354 | "md5-node": { 355 | "version": "1.0.1", 356 | "resolved": "https://registry.npmjs.org/md5-node/-/md5-node-1.0.1.tgz", 357 | "integrity": "sha1-DiLQCdRr3JWx08XoyP7dwaXDqog=" 358 | }, 359 | "mime-db": { 360 | "version": "1.49.0", 361 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 362 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 363 | }, 364 | "mime-types": { 365 | "version": "2.1.32", 366 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 367 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 368 | "requires": { 369 | "mime-db": "1.49.0" 370 | } 371 | }, 372 | "ms": { 373 | "version": "2.0.0", 374 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 375 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 376 | }, 377 | "mysql": { 378 | "version": "2.18.1", 379 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", 380 | "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", 381 | "requires": { 382 | "bignumber.js": "9.0.0", 383 | "readable-stream": "2.3.7", 384 | "safe-buffer": "5.1.2", 385 | "sqlstring": "2.3.1" 386 | } 387 | }, 388 | "negotiator": { 389 | "version": "0.6.2", 390 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 391 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 392 | }, 393 | "next-tick": { 394 | "version": "1.0.0", 395 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 396 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 397 | }, 398 | "node-gyp-build": { 399 | "version": "4.2.3", 400 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", 401 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" 402 | }, 403 | "object-assign": { 404 | "version": "4.1.1", 405 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 406 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 407 | }, 408 | "object-inspect": { 409 | "version": "1.11.0", 410 | "resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.11.0.tgz", 411 | "integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE=" 412 | }, 413 | "parse-cache-control": { 414 | "version": "1.0.1", 415 | "resolved": "https://registry.npm.taobao.org/parse-cache-control/download/parse-cache-control-1.0.1.tgz", 416 | "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" 417 | }, 418 | "process-nextick-args": { 419 | "version": "2.0.1", 420 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 421 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 422 | }, 423 | "promise": { 424 | "version": "8.1.0", 425 | "resolved": "https://registry.nlark.com/promise/download/promise-8.1.0.tgz", 426 | "integrity": "sha1-aXwlw9/nQ13Xn81Yw4oTWIjq8F4=", 427 | "requires": { 428 | "asap": "~2.0.6" 429 | } 430 | }, 431 | "qs": { 432 | "version": "6.10.1", 433 | "resolved": "https://registry.nlark.com/qs/download/qs-6.10.1.tgz", 434 | "integrity": "sha1-STFIL6jWR6Wqt5nFJx0hM7mB+2o=", 435 | "requires": { 436 | "side-channel": "^1.0.4" 437 | } 438 | }, 439 | "readable-stream": { 440 | "version": "2.3.7", 441 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 442 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 443 | "requires": { 444 | "core-util-is": "~1.0.0", 445 | "inherits": "~2.0.3", 446 | "isarray": "~1.0.0", 447 | "process-nextick-args": "~2.0.0", 448 | "safe-buffer": "~5.1.1", 449 | "string_decoder": "~1.1.1", 450 | "util-deprecate": "~1.0.1" 451 | } 452 | }, 453 | "safe-buffer": { 454 | "version": "5.1.2", 455 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 456 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 457 | }, 458 | "side-channel": { 459 | "version": "1.0.4", 460 | "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz", 461 | "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=", 462 | "requires": { 463 | "call-bind": "^1.0.0", 464 | "get-intrinsic": "^1.0.2", 465 | "object-inspect": "^1.9.0" 466 | } 467 | }, 468 | "socket.io": { 469 | "version": "4.1.3", 470 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", 471 | "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", 472 | "requires": { 473 | "@types/cookie": "^0.4.0", 474 | "@types/cors": "^2.8.10", 475 | "@types/node": ">=10.0.0", 476 | "accepts": "~1.3.4", 477 | "base64id": "~2.0.0", 478 | "debug": "~4.3.1", 479 | "engine.io": "~5.1.1", 480 | "socket.io-adapter": "~2.3.1", 481 | "socket.io-parser": "~4.0.4" 482 | }, 483 | "dependencies": { 484 | "debug": { 485 | "version": "4.3.2", 486 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 487 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 488 | "requires": { 489 | "ms": "2.1.2" 490 | } 491 | }, 492 | "ms": { 493 | "version": "2.1.2", 494 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 495 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 496 | } 497 | } 498 | }, 499 | "socket.io-adapter": { 500 | "version": "2.3.2", 501 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", 502 | "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" 503 | }, 504 | "socket.io-parser": { 505 | "version": "4.0.4", 506 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", 507 | "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", 508 | "requires": { 509 | "@types/component-emitter": "^1.2.10", 510 | "component-emitter": "~1.3.0", 511 | "debug": "~4.3.1" 512 | }, 513 | "dependencies": { 514 | "debug": { 515 | "version": "4.3.2", 516 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 517 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 518 | "requires": { 519 | "ms": "2.1.2" 520 | } 521 | }, 522 | "ms": { 523 | "version": "2.1.2", 524 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 525 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 526 | } 527 | } 528 | }, 529 | "socket.io-stream": { 530 | "version": "0.9.1", 531 | "resolved": "https://registry.npmjs.org/socket.io-stream/-/socket.io-stream-0.9.1.tgz", 532 | "integrity": "sha1-QhJYMWKIuDrGk7DUPv0J1tQ6upc=", 533 | "requires": { 534 | "component-bind": "~1.0.0", 535 | "debug": "~2.2.0" 536 | }, 537 | "dependencies": { 538 | "debug": { 539 | "version": "2.2.0", 540 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 541 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 542 | "requires": { 543 | "ms": "0.7.1" 544 | } 545 | }, 546 | "ms": { 547 | "version": "0.7.1", 548 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 549 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" 550 | } 551 | } 552 | }, 553 | "sqlstring": { 554 | "version": "2.3.1", 555 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", 556 | "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" 557 | }, 558 | "string-random": { 559 | "version": "0.1.3", 560 | "resolved": "https://registry.npmjs.org/string-random/-/string-random-0.1.3.tgz", 561 | "integrity": "sha512-g+UsIwzKhNi+9/+Q3Q7hP8R4HkQxiIkQlttnxw6GRdk9pnnkGIv53C6H8dvh8wxAVDhkqpnWeauaPXS1b2sBJg==" 562 | }, 563 | "string_decoder": { 564 | "version": "1.1.1", 565 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 566 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 567 | "requires": { 568 | "safe-buffer": "~5.1.0" 569 | } 570 | }, 571 | "sync-request": { 572 | "version": "6.1.0", 573 | "resolved": "https://registry.npm.taobao.org/sync-request/download/sync-request-6.1.0.tgz", 574 | "integrity": "sha1-6WIXVlteULv/4XmGi6dVMvtZfmg=", 575 | "requires": { 576 | "http-response-object": "^3.0.1", 577 | "sync-rpc": "^1.2.1", 578 | "then-request": "^6.0.0" 579 | } 580 | }, 581 | "sync-rpc": { 582 | "version": "1.3.6", 583 | "resolved": "https://registry.npm.taobao.org/sync-rpc/download/sync-rpc-1.3.6.tgz", 584 | "integrity": "sha1-suiyVQoSzLxx34ZEgQUp3raGZac=", 585 | "requires": { 586 | "get-port": "^3.1.0" 587 | } 588 | }, 589 | "then-request": { 590 | "version": "6.0.2", 591 | "resolved": "https://registry.npm.taobao.org/then-request/download/then-request-6.0.2.tgz", 592 | "integrity": "sha1-7Bjdi1ykOq7ly5L35MFjDpUNTww=", 593 | "requires": { 594 | "@types/concat-stream": "^1.6.0", 595 | "@types/form-data": "0.0.33", 596 | "@types/node": "^8.0.0", 597 | "@types/qs": "^6.2.31", 598 | "caseless": "~0.12.0", 599 | "concat-stream": "^1.6.0", 600 | "form-data": "^2.2.0", 601 | "http-basic": "^8.1.1", 602 | "http-response-object": "^3.0.1", 603 | "promise": "^8.0.0", 604 | "qs": "^6.4.0" 605 | }, 606 | "dependencies": { 607 | "@types/node": { 608 | "version": "8.10.66", 609 | "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-8.10.66.tgz?cache=0&sync_timestamp=1635213425908&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-8.10.66.tgz", 610 | "integrity": "sha1-3QNdQJ3zIqzIPf9ipgLxKleDu7M=" 611 | } 612 | } 613 | }, 614 | "type": { 615 | "version": "1.2.0", 616 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 617 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 618 | }, 619 | "typedarray": { 620 | "version": "0.0.6", 621 | "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", 622 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 623 | }, 624 | "typedarray-to-buffer": { 625 | "version": "3.1.5", 626 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 627 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 628 | "requires": { 629 | "is-typedarray": "^1.0.0" 630 | } 631 | }, 632 | "utf-8-validate": { 633 | "version": "5.0.5", 634 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.5.tgz", 635 | "integrity": "sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==", 636 | "requires": { 637 | "node-gyp-build": "^4.2.0" 638 | } 639 | }, 640 | "util-deprecate": { 641 | "version": "1.0.2", 642 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 643 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 644 | }, 645 | "vary": { 646 | "version": "1.1.2", 647 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 648 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 649 | }, 650 | "websocket": { 651 | "version": "1.0.34", 652 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", 653 | "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", 654 | "requires": { 655 | "bufferutil": "^4.0.1", 656 | "debug": "^2.2.0", 657 | "es5-ext": "^0.10.50", 658 | "typedarray-to-buffer": "^3.1.5", 659 | "utf-8-validate": "^5.0.2", 660 | "yaeti": "^0.0.6" 661 | } 662 | }, 663 | "ws": { 664 | "version": "7.4.6", 665 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 666 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" 667 | }, 668 | "yaeti": { 669 | "version": "0.0.6", 670 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 671 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" 672 | } 673 | } 674 | } 675 | -------------------------------------------------------------------------------- /Hikari_Server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hikari_server", 3 | "version": "1.0.0", 4 | "description": "Hikari-NG Server", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "OnlineJudge", 11 | "Distributed" 12 | ], 13 | "author": "Hikari Dev Team", 14 | "license": "MIT", 15 | "dependencies": { 16 | "async": "^3.2.1", 17 | "http": "0.0.1-security", 18 | "md5-node": "^1.0.1", 19 | "mysql": "^2.18.1", 20 | "socket.io": "^4.1.3", 21 | "socket.io-stream": "^0.9.1", 22 | "string-random": "^0.1.3", 23 | "sync-request": "^6.1.0", 24 | "websocket": "^1.0.34" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "ojlite-vscode" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [Unreleased] 8 | 9 | - Initial release -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/README.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | ### 方法1: 4 | 5 | 1. 安装 [VSCode](https://code.visualstudio.com/) 6 | 1. 在VSCode插件市场搜索hikari-VSCode并安装 7 | 8 | ### 方法2: 9 | 10 | 1. 安装 [VSCode](https://code.visualstudio.com/) 11 | 1. 下载 [插件安装包](https://wwr.lanzoui.com/iVHO3tk6lwd) 12 | 1. VSCode->扩展->从VSIX安装 ![sample](https://i.loli.net/2021/09/03/pyPRHkbnGs38KFQ.png) 13 | 14 | 15 | 16 | # Configuration 17 | 18 | 1. ![sample2](https://i.loli.net/2021/09/03/Wv5hM6Vn8jNOulX.png) 19 | 20 | 21 | 22 | 2. 密码请填OJ上的密码,用户名请填OJ上的用户名。 23 | 24 | # Usage 25 | 26 | 在代码编写界面右键选中“将代码提交至Hikari”或按Ctrl+F11提交代码,在上方弹出的对话框中输入题目编号,然后回车并耐心等待,一段时间后右下角将弹出评测结果。 -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/extension.js: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | //OJ配置,请自行修改 4 | const vscode = require("vscode"); 5 | var oj_url = vscode.workspace.getConfiguration().get("hikari-vscode.oj_url"); // OJ的网址 6 | var uname = vscode.workspace.getConfiguration().get("hikari-vscode.uname"); //用户名 7 | var passwd = vscode.workspace.getConfiguration().get("hikari-vscode.passwd"); //密码 8 | 9 | console.log("OJ URL:" + oj_url); 10 | var uname, 11 | passwd, 12 | uid = -1; 13 | var pid_map = {}; //正在评测中的题目 14 | var judge_inq = {};//正在编译的题目 15 | 16 | const do_compile_out = require("./judge").do_compile_out; //编译模块 17 | 18 | const io = require("socket.io-client"); 19 | const os = require("os"); 20 | // @ts-ignore 21 | 22 | const socket = io(oj_url + ":1919"); //与服务端通信的socket 23 | //const child_process = require("child_process"); 24 | const fs = require('fs'); 25 | const request = require("request"); 26 | 27 | var Queue = require('./queue.js'); //评测队列模块 28 | var md5 = require("md5"); 29 | 30 | /** 31 | * 删除目录. 32 | * @param {string} path 待删除的目录 33 | */ 34 | function delDir(path){ 35 | let files = []; 36 | if(fs.existsSync(path)){ 37 | files = fs.readdirSync(path); 38 | // @ts-ignore 39 | // @ts-ignore 40 | // @ts-ignore 41 | files.forEach((file, index) => { 42 | let curPath = path + "/" + file; 43 | if(fs.statSync(curPath).isDirectory()){ 44 | delDir(curPath); //递归删除文件夹 45 | } else { 46 | fs.unlinkSync(curPath); //删除文件 47 | } 48 | }); 49 | fs.rmdirSync(path); 50 | } 51 | } 52 | 53 | /** 54 | * 55 | * @param {function} callback 56 | */ 57 | function validate_user(callback) { 58 | socket.emit("login", { //发送登录消息 59 | username: uname, 60 | password: passwd, 61 | info: '{"uname":"' + uname + '","arch":"' + os.arch() + '","cpu_model":"' + os.cpus()[0].model + '","cpu_count":"' + os.cpus().length + 62 | '","speed":"' + os.cpus()[0].speed + '","mem":"' + Math.floor(os.freemem()/1024/1024) + '","os_type":"' + os.type() + '"}' 63 | }); 64 | 65 | var done_val = 0; 66 | socket.once("LOGIN_SUCCESS", function (data) { //登录成功 67 | if (data.uname == uname && done_val == 0) { 68 | done_val = 1; 69 | uid = data.uid; 70 | vscode.window.setStatusBarMessage("你好," + uname); 71 | callback(data.uid, data.token); 72 | } 73 | }); 74 | 75 | socket.once("LOGIN_FAILED", function (data) { //登录失败 76 | if (data.uname == uname && done_val == 0) { 77 | done_val = 1; 78 | console.error("user validation failed!"); 79 | vscode.window.showErrorMessage("用户验证失败,请检查用户名和密码!","没有帐户?去注册").then(function(select){ 80 | if (select == "没有帐户?去注册") 81 | vscode.env.openExternal(vscode.Uri.parse(oj_url + "/user/register.php")); 82 | }); 83 | } 84 | }); 85 | } 86 | 87 | /** 88 | * @param {vscode.ExtensionContext} context 89 | */ 90 | 91 | function activate(context) { 92 | console.log( 93 | 'Congratulations, your extension "hikari-vscode" is now active in ' + 94 | __dirname + 95 | "!" 96 | ); 97 | 98 | console.log("Benchmark: " + require("./judge").time_limit_per_pt); //获取评测基准系数 99 | 100 | let func_submit = vscode.commands.registerCommand( 101 | "hikari-vscode.submit", 102 | function () { 103 | validate_user(function (uid, salt) { 104 | console.log("login success! uid: " + uid + " salt: " + salt); 105 | 106 | vscode.window 107 | .showInputBox({ 108 | ignoreFocusOut: true, 109 | placeHolder: "题目编号", // 在输入框内的提示信息 110 | prompt: "输入待评测的题目编号", // 在输入框下方的提示信息 111 | }) 112 | .then(function (msg) { 113 | if (msg) { 114 | if (!pid_map[msg]) { 115 | pid_map[msg] = true; 116 | socket.emit("submit", { //发送提交信息 117 | uid: uid, 118 | pid: msg, 119 | code: vscode.window.activeTextEditor.document.getText(), 120 | }); 121 | vscode.window.setStatusBarMessage("评测已提交!"); 122 | } else { 123 | vscode.window.showErrorMessage("正在评测中,请耐心等待...","重置评测列表").then(function(select){ 124 | if (select == "重置评测列表"){ 125 | pid_map = {}; 126 | } 127 | }); 128 | } 129 | } 130 | }); 131 | }); 132 | } 133 | ); 134 | 135 | context.subscriptions.push(func_submit); 136 | } 137 | 138 | //评测循环 139 | socket.on("judge_pull", function (data) { //拉取评测 140 | if (judge_inq[data.rid + "&" + data.grp] != "InQ"){ //不在队列中 141 | judge_inq[data.rid + "&" + data.grp] = "InQ"; 142 | Queue.push(data,function(data){ 143 | //console.log("Group:" + data.grp + ",Input:" + data.input + ",Output:" + data.output); 144 | //console.log("VAlid:" + data.valid_code + "," + data.valid_in); 145 | 146 | // @ts-ignore 147 | request(data.input,function (error, response, body){ //拉取评测数据 148 | // @ts-ignore 149 | data.input = body; 150 | // @ts-ignore 151 | console.log("开始评测: " + data.rid + " 测试点编号:" + data.grp + " 队列长度:" + Queue.length()); 152 | // @ts-ignore 153 | // @ts-ignore 154 | do_compile_out(data.code, data.input,true, data.time_limit, data.mem_limit, function (status, stdout, compile_info, time_used) { 155 | console.log("评测完毕!结果:" + status + " 输出:" + stdout.substr(0, 100)); 156 | socket.emit("judge_push_result", { 157 | // @ts-ignore 158 | rid: data.rid, 159 | // @ts-ignore 160 | uid: data.uid, 161 | // @ts-ignore 162 | pid: data.pid, 163 | // @ts-ignore 164 | grp: data.grp, 165 | // @ts-ignore 166 | code: data.code, 167 | compile_info : compile_info, 168 | time_used : time_used, 169 | status: status, 170 | out: md5(stdout), 171 | }); 172 | }); 173 | }); 174 | }); 175 | } 176 | }); 177 | 178 | socket.on("judge_pts_done",function(data){ //单个数据点完成 179 | if (data.uid == uid && pid_map[data.pid] == true && data.cnt_done != data.datacnt) { 180 | if (data.stat == "AC"){ 181 | vscode.window.setStatusBarMessage("题目 " + 182 | data.pid + 183 | " 第 " + data.grp + "个数据已评测(共" + data.datacnt + "个),状态:" + data.stat + ",共评测完成 " + data.cnt_done + "个数据。" ); 184 | }else{ 185 | vscode.window.setStatusBarMessage( 186 | "题目 " + 187 | data.pid + 188 | " 第 " + data.grp + "个数据已评测(共" + data.datacnt + "个),状态:" + data.stat + ",共评测完成 " + data.cnt_done + "个数据。" 189 | ); 190 | } 191 | } 192 | }); 193 | 194 | socket.on("judge_all_done", function (data) { //全部数据点完成 195 | console.log("ALLDONE GET:" + data.uid + "," + data.pid); 196 | if (data.uid == uid && pid_map[data.pid] == true) { 197 | if (data.stat == "AC") { 198 | vscode.window.setStatusBarMessage("题目 " + 199 | data.pid + 200 | " 已通过,分数:" + 201 | Math.floor(100*data.pts/data.datacnt) 202 | ); 203 | vscode.window.showInformationMessage( 204 | "题目 " + 205 | data.pid + 206 | " 已通过,分数:" + 207 | Math.floor(100*data.pts/data.datacnt),"在浏览器查看" 208 | ).then(function(select){ 209 | if (select == "在浏览器查看") 210 | vscode.env.openExternal(vscode.Uri.parse(oj_url + "/record/?id=" + data.rid)); 211 | }); 212 | } else { 213 | vscode.window.setStatusBarMessage("题目 " + 214 | data.pid + 215 | " 未通过, 状态: " + 216 | data.stat + 217 | ", 分数: " + 218 | Math.floor(100*data.pts/data.datacnt)); 219 | 220 | vscode.window.showErrorMessage( 221 | "题目 " + 222 | data.pid + 223 | " 未通过, 状态: " + 224 | data.stat + 225 | ", 分数: " + 226 | Math.floor(100*data.pts/data.datacnt),"在浏览器查看" 227 | ).then(function(select){ 228 | if (select == "在浏览器查看") 229 | vscode.env.openExternal(vscode.Uri.parse(oj_url + "/record/list.php?pid=" + data.pid)); 230 | }); 231 | } 232 | 233 | pid_map[data.pid] = false; 234 | } 235 | }); 236 | 237 | function deactivate() { //退出时清空临时目录 238 | var cleanPath = __dirname + "\\submissions\\"; 239 | console.log("正在清除缓存,目录:" + cleanPath); 240 | delDir(cleanPath); 241 | fs.mkdirSync(cleanPath); 242 | fs.writeFileSync(cleanPath + "_gitkeep","This File is to keep this folder hosted by Git."); 243 | console.log("清理完成。"); 244 | } 245 | 246 | module.exports = { 247 | activate, 248 | deactivate, 249 | }; 250 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OIer-Club/Hikari-NG/7ab2fd13db8952c73f6ae8292d0777b8897fbdde/Hikari_VSCode/Hikari-vscode/icon.png -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "checkJs": true, /* Typecheck .js files. */ 6 | "lib": [ 7 | "es6" 8 | ] 9 | }, 10 | "exclude": [ 11 | "node_modules" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/judge.js: -------------------------------------------------------------------------------- 1 | var exec = require("child_process").exec; 2 | var execSync = require("child_process").execSync; 3 | 4 | const stringRandom = require("string-random"); 5 | const fs = require("fs"); 6 | 7 | //洛谷:88 8 | function benchmark() { 9 | var T_CCC = new Date(); 10 | var pai = 0, 11 | flag = false; 12 | for (var i = 1; i < 100000000; i += 2) { 13 | pai += (((flag = !flag) ? 1 : -1) * 1) / i; 14 | } 15 | //console.log("圆周率π:" + pai * 4); 16 | // @ts-ignore 17 | return new Date() - T_CCC; 18 | } 19 | 20 | var time_limit_per_pt = Math.ceil(benchmark() / 88); //获取评测基准系数 21 | var time_limit_compile = 20000; //编译时限 22 | 23 | /** 24 | * 运行代码并输出结果 25 | * @param {string} code 26 | * @param {string} stdin 27 | * @param {boolean} use_time_limit 28 | * @param {number} time_limit 29 | * @param {number} mem_limit 30 | * @param {Function} callback 31 | */ 32 | var do_compile_out = function ( 33 | code, 34 | stdin, 35 | use_time_limit, 36 | time_limit, 37 | mem_limit, 38 | callback 39 | ) { 40 | var r_d_id = stringRandom(16); //本地编译编号 41 | /*console.log( 42 | "Time Limit is:" + 43 | time_limit_per_pt * time_limit + 44 | ", Mem Limit is:" + 45 | mem_limit 46 | );*/ 47 | var working_directory = __dirname + "\\submissions\\" + r_d_id; //评测目录 48 | var code_file = working_directory + "\\code" + r_d_id + ".cpp"; //评测源码 49 | var elf_file = working_directory + "\\code" + r_d_id + ".exe"; //评测程序 50 | var compile_command = 51 | __dirname + 52 | "\\MinGW64\\bin\\g++.exe -std=c++14 " + //编译选项 53 | code_file + 54 | " -o " + 55 | elf_file; 56 | var judge_command = 57 | elf_file + 58 | " < " + 59 | working_directory + 60 | "\\data.in > " + 61 | working_directory + 62 | "\\data.out"; 63 | var run_ctrl = {}; 64 | if (use_time_limit) { //有时限 65 | run_ctrl = { timeout: time_limit_per_pt * time_limit }; 66 | //console.log(time_limit_per_pt + "," + time_limit); 67 | } 68 | 69 | fs.mkdir(working_directory, function (err) { 70 | if (err) return console.error(err); 71 | 72 | fs.writeFileSync(code_file, code); 73 | exec( 74 | compile_command, 75 | { timeout: time_limit_compile }, 76 | function (error, _stdout, _stderr) { 77 | if (error) { //编译错误 78 | console.error(error); 79 | console.log(_stdout, _stderr); 80 | callback("CE","Compile Error.", _stderr, 0); 81 | } else { //编译成功 82 | fs.writeFileSync(working_directory + "\\data.in", stdin); 83 | var time_cnt = Date.now(); 84 | exec(judge_command, run_ctrl, function (error, _stdout, _stderr) { 85 | if (error) { 86 | var ret = execSync( //杀进程 87 | "chcp 437 & taskkill /f /im " + "code" + r_d_id + ".exe" 88 | ); 89 | //console.log("Timeout!"); 90 | if (ret.indexOf("SUCCESS") > 0) { //进程存在 91 | callback("TLE", _stdout, _stderr, Date.now() - time_cnt); 92 | } else { 93 | callback("RE", _stdout, _stderr, Date.now() - time_cnt); 94 | } 95 | 96 | //console.error(error); 97 | console.log(_stdout, _stderr); 98 | } else { 99 | var stdout = fs 100 | .readFileSync(working_directory + "\\data.out") 101 | .toString() 102 | .replace(/\s*/g, "") 103 | .replace(/[\r\n]/g, "") 104 | .replace(/[\n]/g, ""); //处理输出 105 | callback("OK", stdout, _stderr, Date.now() - time_cnt); 106 | } 107 | }); 108 | } 109 | } 110 | ); 111 | }); 112 | } 113 | 114 | /* 115 | do_judge( 116 | "#include\nusing namespace std;\nint main(){int a,b;cin>>a>>b;cout<=0.3.0 <0.4" 391 | } 392 | }, 393 | "chalk": { 394 | "version": "4.1.2", 395 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 396 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 397 | "dev": true, 398 | "requires": { 399 | "ansi-styles": "^4.1.0", 400 | "supports-color": "^7.1.0" 401 | }, 402 | "dependencies": { 403 | "ansi-styles": { 404 | "version": "4.3.0", 405 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 406 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 407 | "dev": true, 408 | "requires": { 409 | "color-convert": "^2.0.1" 410 | } 411 | }, 412 | "color-convert": { 413 | "version": "2.0.1", 414 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 415 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 416 | "dev": true, 417 | "requires": { 418 | "color-name": "~1.1.4" 419 | } 420 | }, 421 | "color-name": { 422 | "version": "1.1.4", 423 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 424 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 425 | "dev": true 426 | }, 427 | "has-flag": { 428 | "version": "4.0.0", 429 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 430 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 431 | "dev": true 432 | }, 433 | "supports-color": { 434 | "version": "7.2.0", 435 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 436 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 437 | "dev": true, 438 | "requires": { 439 | "has-flag": "^4.0.0" 440 | } 441 | } 442 | } 443 | }, 444 | "charenc": { 445 | "version": "0.0.2", 446 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 447 | "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" 448 | }, 449 | "child_process": { 450 | "version": "1.0.2", 451 | "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", 452 | "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=" 453 | }, 454 | "chokidar": { 455 | "version": "3.5.1", 456 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 457 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 458 | "dev": true, 459 | "requires": { 460 | "anymatch": "~3.1.1", 461 | "braces": "~3.0.2", 462 | "fsevents": "~2.3.1", 463 | "glob-parent": "~5.1.0", 464 | "is-binary-path": "~2.1.0", 465 | "is-glob": "~4.0.1", 466 | "normalize-path": "~3.0.0", 467 | "readdirp": "~3.5.0" 468 | } 469 | }, 470 | "cliui": { 471 | "version": "7.0.4", 472 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 473 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 474 | "dev": true, 475 | "requires": { 476 | "string-width": "^4.2.0", 477 | "strip-ansi": "^6.0.0", 478 | "wrap-ansi": "^7.0.0" 479 | } 480 | }, 481 | "color-convert": { 482 | "version": "1.9.3", 483 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 484 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 485 | "dev": true, 486 | "requires": { 487 | "color-name": "1.1.3" 488 | } 489 | }, 490 | "color-name": { 491 | "version": "1.1.3", 492 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 493 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 494 | "dev": true 495 | }, 496 | "combined-stream": { 497 | "version": "1.0.8", 498 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 499 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 500 | "requires": { 501 | "delayed-stream": "~1.0.0" 502 | } 503 | }, 504 | "component-emitter": { 505 | "version": "1.3.0", 506 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 507 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 508 | }, 509 | "concat-map": { 510 | "version": "0.0.1", 511 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 512 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 513 | "dev": true 514 | }, 515 | "concat-stream": { 516 | "version": "1.6.2", 517 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 518 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 519 | "requires": { 520 | "buffer-from": "^1.0.0", 521 | "inherits": "^2.0.3", 522 | "readable-stream": "^2.2.2", 523 | "typedarray": "^0.0.6" 524 | } 525 | }, 526 | "core-util-is": { 527 | "version": "1.0.2", 528 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 529 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 530 | }, 531 | "cross-spawn": { 532 | "version": "7.0.3", 533 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 534 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 535 | "dev": true, 536 | "requires": { 537 | "path-key": "^3.1.0", 538 | "shebang-command": "^2.0.0", 539 | "which": "^2.0.1" 540 | } 541 | }, 542 | "crypt": { 543 | "version": "0.0.2", 544 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 545 | "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" 546 | }, 547 | "dashdash": { 548 | "version": "1.14.1", 549 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 550 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 551 | "requires": { 552 | "assert-plus": "^1.0.0" 553 | } 554 | }, 555 | "debug": { 556 | "version": "4.3.2", 557 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 558 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 559 | "requires": { 560 | "ms": "2.1.2" 561 | } 562 | }, 563 | "decamelize": { 564 | "version": "4.0.0", 565 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 566 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 567 | "dev": true 568 | }, 569 | "deep-is": { 570 | "version": "0.1.3", 571 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 572 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 573 | "dev": true 574 | }, 575 | "delayed-stream": { 576 | "version": "1.0.0", 577 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 578 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 579 | }, 580 | "diff": { 581 | "version": "5.0.0", 582 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 583 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 584 | "dev": true 585 | }, 586 | "doctrine": { 587 | "version": "3.0.0", 588 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 589 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 590 | "dev": true, 591 | "requires": { 592 | "esutils": "^2.0.2" 593 | } 594 | }, 595 | "duplexer2": { 596 | "version": "0.1.4", 597 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 598 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 599 | "dev": true, 600 | "requires": { 601 | "readable-stream": "^2.0.2" 602 | } 603 | }, 604 | "ecc-jsbn": { 605 | "version": "0.1.2", 606 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 607 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 608 | "requires": { 609 | "jsbn": "~0.1.0", 610 | "safer-buffer": "^2.1.0" 611 | } 612 | }, 613 | "emoji-regex": { 614 | "version": "8.0.0", 615 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 616 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 617 | "dev": true 618 | }, 619 | "engine.io-client": { 620 | "version": "5.1.2", 621 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.1.2.tgz", 622 | "integrity": "sha512-blRrgXIE0A/eurWXRzvfCLG7uUFJqfTGFsyJzXSK71srMMGJ2VraBLg8Mdw28uUxSpVicepBN9X7asqpD1mZcQ==", 623 | "requires": { 624 | "base64-arraybuffer": "0.1.4", 625 | "component-emitter": "~1.3.0", 626 | "debug": "~4.3.1", 627 | "engine.io-parser": "~4.0.1", 628 | "has-cors": "1.1.0", 629 | "parseqs": "0.0.6", 630 | "parseuri": "0.0.6", 631 | "ws": "~7.4.2", 632 | "yeast": "0.1.2" 633 | } 634 | }, 635 | "engine.io-parser": { 636 | "version": "4.0.3", 637 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", 638 | "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", 639 | "requires": { 640 | "base64-arraybuffer": "0.1.4" 641 | } 642 | }, 643 | "enquirer": { 644 | "version": "2.3.6", 645 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 646 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 647 | "dev": true, 648 | "requires": { 649 | "ansi-colors": "^4.1.1" 650 | } 651 | }, 652 | "escalade": { 653 | "version": "3.1.1", 654 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 655 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 656 | "dev": true 657 | }, 658 | "escape-string-regexp": { 659 | "version": "4.0.0", 660 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 661 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 662 | "dev": true 663 | }, 664 | "eslint": { 665 | "version": "7.32.0", 666 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", 667 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", 668 | "dev": true, 669 | "requires": { 670 | "@babel/code-frame": "7.12.11", 671 | "@eslint/eslintrc": "^0.4.3", 672 | "@humanwhocodes/config-array": "^0.5.0", 673 | "ajv": "^6.10.0", 674 | "chalk": "^4.0.0", 675 | "cross-spawn": "^7.0.2", 676 | "debug": "^4.0.1", 677 | "doctrine": "^3.0.0", 678 | "enquirer": "^2.3.5", 679 | "escape-string-regexp": "^4.0.0", 680 | "eslint-scope": "^5.1.1", 681 | "eslint-utils": "^2.1.0", 682 | "eslint-visitor-keys": "^2.0.0", 683 | "espree": "^7.3.1", 684 | "esquery": "^1.4.0", 685 | "esutils": "^2.0.2", 686 | "fast-deep-equal": "^3.1.3", 687 | "file-entry-cache": "^6.0.1", 688 | "functional-red-black-tree": "^1.0.1", 689 | "glob-parent": "^5.1.2", 690 | "globals": "^13.6.0", 691 | "ignore": "^4.0.6", 692 | "import-fresh": "^3.0.0", 693 | "imurmurhash": "^0.1.4", 694 | "is-glob": "^4.0.0", 695 | "js-yaml": "^3.13.1", 696 | "json-stable-stringify-without-jsonify": "^1.0.1", 697 | "levn": "^0.4.1", 698 | "lodash.merge": "^4.6.2", 699 | "minimatch": "^3.0.4", 700 | "natural-compare": "^1.4.0", 701 | "optionator": "^0.9.1", 702 | "progress": "^2.0.0", 703 | "regexpp": "^3.1.0", 704 | "semver": "^7.2.1", 705 | "strip-ansi": "^6.0.0", 706 | "strip-json-comments": "^3.1.0", 707 | "table": "^6.0.9", 708 | "text-table": "^0.2.0", 709 | "v8-compile-cache": "^2.0.3" 710 | } 711 | }, 712 | "eslint-scope": { 713 | "version": "5.1.1", 714 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 715 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 716 | "dev": true, 717 | "requires": { 718 | "esrecurse": "^4.3.0", 719 | "estraverse": "^4.1.1" 720 | } 721 | }, 722 | "eslint-utils": { 723 | "version": "2.1.0", 724 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 725 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 726 | "dev": true, 727 | "requires": { 728 | "eslint-visitor-keys": "^1.1.0" 729 | }, 730 | "dependencies": { 731 | "eslint-visitor-keys": { 732 | "version": "1.3.0", 733 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 734 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 735 | "dev": true 736 | } 737 | } 738 | }, 739 | "eslint-visitor-keys": { 740 | "version": "2.1.0", 741 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 742 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 743 | "dev": true 744 | }, 745 | "espree": { 746 | "version": "7.3.1", 747 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 748 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 749 | "dev": true, 750 | "requires": { 751 | "acorn": "^7.4.0", 752 | "acorn-jsx": "^5.3.1", 753 | "eslint-visitor-keys": "^1.3.0" 754 | }, 755 | "dependencies": { 756 | "eslint-visitor-keys": { 757 | "version": "1.3.0", 758 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 759 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 760 | "dev": true 761 | } 762 | } 763 | }, 764 | "esprima": { 765 | "version": "4.0.1", 766 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 767 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 768 | "dev": true 769 | }, 770 | "esquery": { 771 | "version": "1.4.0", 772 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 773 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 774 | "dev": true, 775 | "requires": { 776 | "estraverse": "^5.1.0" 777 | }, 778 | "dependencies": { 779 | "estraverse": { 780 | "version": "5.2.0", 781 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 782 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 783 | "dev": true 784 | } 785 | } 786 | }, 787 | "esrecurse": { 788 | "version": "4.3.0", 789 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 790 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 791 | "dev": true, 792 | "requires": { 793 | "estraverse": "^5.2.0" 794 | }, 795 | "dependencies": { 796 | "estraverse": { 797 | "version": "5.2.0", 798 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 799 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 800 | "dev": true 801 | } 802 | } 803 | }, 804 | "estraverse": { 805 | "version": "4.3.0", 806 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 807 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 808 | "dev": true 809 | }, 810 | "esutils": { 811 | "version": "2.0.3", 812 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 813 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 814 | "dev": true 815 | }, 816 | "extend": { 817 | "version": "3.0.2", 818 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 819 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 820 | }, 821 | "extsprintf": { 822 | "version": "1.3.0", 823 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 824 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 825 | }, 826 | "fast-deep-equal": { 827 | "version": "3.1.3", 828 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 829 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 830 | }, 831 | "fast-json-stable-stringify": { 832 | "version": "2.1.0", 833 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 834 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 835 | }, 836 | "fast-levenshtein": { 837 | "version": "2.0.6", 838 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 839 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 840 | "dev": true 841 | }, 842 | "file-entry-cache": { 843 | "version": "6.0.1", 844 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 845 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 846 | "dev": true, 847 | "requires": { 848 | "flat-cache": "^3.0.4" 849 | } 850 | }, 851 | "fill-range": { 852 | "version": "7.0.1", 853 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 854 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 855 | "dev": true, 856 | "requires": { 857 | "to-regex-range": "^5.0.1" 858 | } 859 | }, 860 | "find-up": { 861 | "version": "5.0.0", 862 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 863 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 864 | "dev": true, 865 | "requires": { 866 | "locate-path": "^6.0.0", 867 | "path-exists": "^4.0.0" 868 | } 869 | }, 870 | "flat": { 871 | "version": "5.0.2", 872 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 873 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 874 | "dev": true 875 | }, 876 | "flat-cache": { 877 | "version": "3.0.4", 878 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 879 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 880 | "dev": true, 881 | "requires": { 882 | "flatted": "^3.1.0", 883 | "rimraf": "^3.0.2" 884 | } 885 | }, 886 | "flatted": { 887 | "version": "3.2.2", 888 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 889 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 890 | "dev": true 891 | }, 892 | "forever-agent": { 893 | "version": "0.6.1", 894 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 895 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 896 | }, 897 | "form-data": { 898 | "version": "2.3.3", 899 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 900 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 901 | "requires": { 902 | "asynckit": "^0.4.0", 903 | "combined-stream": "^1.0.6", 904 | "mime-types": "^2.1.12" 905 | } 906 | }, 907 | "fs": { 908 | "version": "0.0.1-security", 909 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 910 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 911 | }, 912 | "fs.realpath": { 913 | "version": "1.0.0", 914 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 915 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 916 | "dev": true 917 | }, 918 | "fsevents": { 919 | "version": "2.3.2", 920 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 921 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 922 | "dev": true, 923 | "optional": true 924 | }, 925 | "fstream": { 926 | "version": "1.0.12", 927 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", 928 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", 929 | "dev": true, 930 | "requires": { 931 | "graceful-fs": "^4.1.2", 932 | "inherits": "~2.0.0", 933 | "mkdirp": ">=0.5 0", 934 | "rimraf": "2" 935 | }, 936 | "dependencies": { 937 | "rimraf": { 938 | "version": "2.7.1", 939 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 940 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 941 | "dev": true, 942 | "requires": { 943 | "glob": "^7.1.3" 944 | } 945 | } 946 | } 947 | }, 948 | "functional-red-black-tree": { 949 | "version": "1.0.1", 950 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 951 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 952 | "dev": true 953 | }, 954 | "get-caller-file": { 955 | "version": "2.0.5", 956 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 957 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 958 | "dev": true 959 | }, 960 | "get-port": { 961 | "version": "3.2.0", 962 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 963 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" 964 | }, 965 | "getpass": { 966 | "version": "0.1.7", 967 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 968 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 969 | "requires": { 970 | "assert-plus": "^1.0.0" 971 | } 972 | }, 973 | "glob": { 974 | "version": "7.1.7", 975 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 976 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 977 | "dev": true, 978 | "requires": { 979 | "fs.realpath": "^1.0.0", 980 | "inflight": "^1.0.4", 981 | "inherits": "2", 982 | "minimatch": "^3.0.4", 983 | "once": "^1.3.0", 984 | "path-is-absolute": "^1.0.0" 985 | } 986 | }, 987 | "glob-parent": { 988 | "version": "5.1.2", 989 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 990 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 991 | "dev": true, 992 | "requires": { 993 | "is-glob": "^4.0.1" 994 | } 995 | }, 996 | "globals": { 997 | "version": "13.11.0", 998 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 999 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 1000 | "dev": true, 1001 | "requires": { 1002 | "type-fest": "^0.20.2" 1003 | } 1004 | }, 1005 | "graceful-fs": { 1006 | "version": "4.2.8", 1007 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 1008 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", 1009 | "dev": true 1010 | }, 1011 | "growl": { 1012 | "version": "1.10.5", 1013 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1014 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1015 | "dev": true 1016 | }, 1017 | "har-schema": { 1018 | "version": "2.0.0", 1019 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1020 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1021 | }, 1022 | "har-validator": { 1023 | "version": "5.1.5", 1024 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 1025 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 1026 | "requires": { 1027 | "ajv": "^6.12.3", 1028 | "har-schema": "^2.0.0" 1029 | } 1030 | }, 1031 | "has-cors": { 1032 | "version": "1.1.0", 1033 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 1034 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 1035 | }, 1036 | "has-flag": { 1037 | "version": "3.0.0", 1038 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1039 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1040 | "dev": true 1041 | }, 1042 | "he": { 1043 | "version": "1.2.0", 1044 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1045 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1046 | "dev": true 1047 | }, 1048 | "http": { 1049 | "version": "0.0.1-security", 1050 | "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", 1051 | "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" 1052 | }, 1053 | "http-basic": { 1054 | "version": "8.1.3", 1055 | "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", 1056 | "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", 1057 | "requires": { 1058 | "caseless": "^0.12.0", 1059 | "concat-stream": "^1.6.2", 1060 | "http-response-object": "^3.0.1", 1061 | "parse-cache-control": "^1.0.1" 1062 | } 1063 | }, 1064 | "http-proxy-agent": { 1065 | "version": "4.0.1", 1066 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 1067 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 1068 | "dev": true, 1069 | "requires": { 1070 | "@tootallnate/once": "1", 1071 | "agent-base": "6", 1072 | "debug": "4" 1073 | } 1074 | }, 1075 | "http-response-object": { 1076 | "version": "3.0.2", 1077 | "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", 1078 | "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", 1079 | "requires": { 1080 | "@types/node": "^10.0.3" 1081 | }, 1082 | "dependencies": { 1083 | "@types/node": { 1084 | "version": "10.17.60", 1085 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", 1086 | "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" 1087 | } 1088 | } 1089 | }, 1090 | "http-signature": { 1091 | "version": "1.2.0", 1092 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1093 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1094 | "requires": { 1095 | "assert-plus": "^1.0.0", 1096 | "jsprim": "^1.2.2", 1097 | "sshpk": "^1.7.0" 1098 | } 1099 | }, 1100 | "https-proxy-agent": { 1101 | "version": "5.0.0", 1102 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1103 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1104 | "dev": true, 1105 | "requires": { 1106 | "agent-base": "6", 1107 | "debug": "4" 1108 | } 1109 | }, 1110 | "ignore": { 1111 | "version": "4.0.6", 1112 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1113 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1114 | "dev": true 1115 | }, 1116 | "import-fresh": { 1117 | "version": "3.3.0", 1118 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1119 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1120 | "dev": true, 1121 | "requires": { 1122 | "parent-module": "^1.0.0", 1123 | "resolve-from": "^4.0.0" 1124 | } 1125 | }, 1126 | "imurmurhash": { 1127 | "version": "0.1.4", 1128 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1129 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1130 | "dev": true 1131 | }, 1132 | "inflight": { 1133 | "version": "1.0.6", 1134 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1135 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1136 | "dev": true, 1137 | "requires": { 1138 | "once": "^1.3.0", 1139 | "wrappy": "1" 1140 | } 1141 | }, 1142 | "inherits": { 1143 | "version": "2.0.4", 1144 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1145 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1146 | }, 1147 | "is-binary-path": { 1148 | "version": "2.1.0", 1149 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1150 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1151 | "dev": true, 1152 | "requires": { 1153 | "binary-extensions": "^2.0.0" 1154 | } 1155 | }, 1156 | "is-buffer": { 1157 | "version": "1.1.6", 1158 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1159 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1160 | }, 1161 | "is-extglob": { 1162 | "version": "2.1.1", 1163 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1164 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1165 | "dev": true 1166 | }, 1167 | "is-fullwidth-code-point": { 1168 | "version": "3.0.0", 1169 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1170 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1171 | "dev": true 1172 | }, 1173 | "is-glob": { 1174 | "version": "4.0.1", 1175 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1176 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1177 | "dev": true, 1178 | "requires": { 1179 | "is-extglob": "^2.1.1" 1180 | } 1181 | }, 1182 | "is-number": { 1183 | "version": "7.0.0", 1184 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1185 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1186 | "dev": true 1187 | }, 1188 | "is-plain-obj": { 1189 | "version": "2.1.0", 1190 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1191 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1192 | "dev": true 1193 | }, 1194 | "is-typedarray": { 1195 | "version": "1.0.0", 1196 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1197 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1198 | }, 1199 | "isarray": { 1200 | "version": "1.0.0", 1201 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1202 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1203 | }, 1204 | "isexe": { 1205 | "version": "2.0.0", 1206 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1207 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1208 | "dev": true 1209 | }, 1210 | "isstream": { 1211 | "version": "0.1.2", 1212 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1213 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1214 | }, 1215 | "js-tokens": { 1216 | "version": "4.0.0", 1217 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1218 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1219 | "dev": true 1220 | }, 1221 | "js-yaml": { 1222 | "version": "3.14.1", 1223 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1224 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1225 | "dev": true, 1226 | "requires": { 1227 | "argparse": "^1.0.7", 1228 | "esprima": "^4.0.0" 1229 | } 1230 | }, 1231 | "jsbn": { 1232 | "version": "0.1.1", 1233 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1234 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1235 | }, 1236 | "json-schema": { 1237 | "version": "0.2.3", 1238 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1239 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1240 | }, 1241 | "json-schema-traverse": { 1242 | "version": "0.4.1", 1243 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1244 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1245 | }, 1246 | "json-stable-stringify-without-jsonify": { 1247 | "version": "1.0.1", 1248 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1249 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1250 | "dev": true 1251 | }, 1252 | "json-stringify-safe": { 1253 | "version": "5.0.1", 1254 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1255 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1256 | }, 1257 | "jsprim": { 1258 | "version": "1.4.1", 1259 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1260 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1261 | "requires": { 1262 | "assert-plus": "1.0.0", 1263 | "extsprintf": "1.3.0", 1264 | "json-schema": "0.2.3", 1265 | "verror": "1.10.0" 1266 | } 1267 | }, 1268 | "levn": { 1269 | "version": "0.4.1", 1270 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1271 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1272 | "dev": true, 1273 | "requires": { 1274 | "prelude-ls": "^1.2.1", 1275 | "type-check": "~0.4.0" 1276 | } 1277 | }, 1278 | "listenercount": { 1279 | "version": "1.0.1", 1280 | "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", 1281 | "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", 1282 | "dev": true 1283 | }, 1284 | "locate-path": { 1285 | "version": "6.0.0", 1286 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1287 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1288 | "dev": true, 1289 | "requires": { 1290 | "p-locate": "^5.0.0" 1291 | } 1292 | }, 1293 | "lodash.clonedeep": { 1294 | "version": "4.5.0", 1295 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1296 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 1297 | "dev": true 1298 | }, 1299 | "lodash.merge": { 1300 | "version": "4.6.2", 1301 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1302 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1303 | "dev": true 1304 | }, 1305 | "lodash.truncate": { 1306 | "version": "4.4.2", 1307 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1308 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 1309 | "dev": true 1310 | }, 1311 | "log-symbols": { 1312 | "version": "4.0.0", 1313 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 1314 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 1315 | "dev": true, 1316 | "requires": { 1317 | "chalk": "^4.0.0" 1318 | } 1319 | }, 1320 | "lru-cache": { 1321 | "version": "6.0.0", 1322 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1323 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1324 | "dev": true, 1325 | "requires": { 1326 | "yallist": "^4.0.0" 1327 | } 1328 | }, 1329 | "md5": { 1330 | "version": "2.3.0", 1331 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 1332 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 1333 | "requires": { 1334 | "charenc": "0.0.2", 1335 | "crypt": "0.0.2", 1336 | "is-buffer": "~1.1.6" 1337 | } 1338 | }, 1339 | "mime-db": { 1340 | "version": "1.49.0", 1341 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 1342 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 1343 | }, 1344 | "mime-types": { 1345 | "version": "2.1.32", 1346 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 1347 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 1348 | "requires": { 1349 | "mime-db": "1.49.0" 1350 | } 1351 | }, 1352 | "minimatch": { 1353 | "version": "3.0.4", 1354 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1355 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1356 | "dev": true, 1357 | "requires": { 1358 | "brace-expansion": "^1.1.7" 1359 | } 1360 | }, 1361 | "minimist": { 1362 | "version": "1.2.5", 1363 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1364 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1365 | "dev": true 1366 | }, 1367 | "mkdirp": { 1368 | "version": "0.5.5", 1369 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1370 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1371 | "dev": true, 1372 | "requires": { 1373 | "minimist": "^1.2.5" 1374 | } 1375 | }, 1376 | "mocha": { 1377 | "version": "8.4.0", 1378 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", 1379 | "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", 1380 | "dev": true, 1381 | "requires": { 1382 | "@ungap/promise-all-settled": "1.1.2", 1383 | "ansi-colors": "4.1.1", 1384 | "browser-stdout": "1.3.1", 1385 | "chokidar": "3.5.1", 1386 | "debug": "4.3.1", 1387 | "diff": "5.0.0", 1388 | "escape-string-regexp": "4.0.0", 1389 | "find-up": "5.0.0", 1390 | "glob": "7.1.6", 1391 | "growl": "1.10.5", 1392 | "he": "1.2.0", 1393 | "js-yaml": "4.0.0", 1394 | "log-symbols": "4.0.0", 1395 | "minimatch": "3.0.4", 1396 | "ms": "2.1.3", 1397 | "nanoid": "3.1.20", 1398 | "serialize-javascript": "5.0.1", 1399 | "strip-json-comments": "3.1.1", 1400 | "supports-color": "8.1.1", 1401 | "which": "2.0.2", 1402 | "wide-align": "1.1.3", 1403 | "workerpool": "6.1.0", 1404 | "yargs": "16.2.0", 1405 | "yargs-parser": "20.2.4", 1406 | "yargs-unparser": "2.0.0" 1407 | }, 1408 | "dependencies": { 1409 | "argparse": { 1410 | "version": "2.0.1", 1411 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1412 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1413 | "dev": true 1414 | }, 1415 | "debug": { 1416 | "version": "4.3.1", 1417 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 1418 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 1419 | "dev": true, 1420 | "requires": { 1421 | "ms": "2.1.2" 1422 | }, 1423 | "dependencies": { 1424 | "ms": { 1425 | "version": "2.1.2", 1426 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1427 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1428 | "dev": true 1429 | } 1430 | } 1431 | }, 1432 | "glob": { 1433 | "version": "7.1.6", 1434 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1435 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1436 | "dev": true, 1437 | "requires": { 1438 | "fs.realpath": "^1.0.0", 1439 | "inflight": "^1.0.4", 1440 | "inherits": "2", 1441 | "minimatch": "^3.0.4", 1442 | "once": "^1.3.0", 1443 | "path-is-absolute": "^1.0.0" 1444 | } 1445 | }, 1446 | "has-flag": { 1447 | "version": "4.0.0", 1448 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1449 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1450 | "dev": true 1451 | }, 1452 | "js-yaml": { 1453 | "version": "4.0.0", 1454 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", 1455 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", 1456 | "dev": true, 1457 | "requires": { 1458 | "argparse": "^2.0.1" 1459 | } 1460 | }, 1461 | "ms": { 1462 | "version": "2.1.3", 1463 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1464 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1465 | "dev": true 1466 | }, 1467 | "supports-color": { 1468 | "version": "8.1.1", 1469 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1470 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1471 | "dev": true, 1472 | "requires": { 1473 | "has-flag": "^4.0.0" 1474 | } 1475 | } 1476 | } 1477 | }, 1478 | "ms": { 1479 | "version": "2.1.2", 1480 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1481 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1482 | }, 1483 | "nanoid": { 1484 | "version": "3.1.20", 1485 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 1486 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", 1487 | "dev": true 1488 | }, 1489 | "natural-compare": { 1490 | "version": "1.4.0", 1491 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1492 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1493 | "dev": true 1494 | }, 1495 | "normalize-path": { 1496 | "version": "3.0.0", 1497 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1498 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1499 | "dev": true 1500 | }, 1501 | "oauth-sign": { 1502 | "version": "0.9.0", 1503 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1504 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1505 | }, 1506 | "once": { 1507 | "version": "1.4.0", 1508 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1509 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1510 | "dev": true, 1511 | "requires": { 1512 | "wrappy": "1" 1513 | } 1514 | }, 1515 | "optionator": { 1516 | "version": "0.9.1", 1517 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1518 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1519 | "dev": true, 1520 | "requires": { 1521 | "deep-is": "^0.1.3", 1522 | "fast-levenshtein": "^2.0.6", 1523 | "levn": "^0.4.1", 1524 | "prelude-ls": "^1.2.1", 1525 | "type-check": "^0.4.0", 1526 | "word-wrap": "^1.2.3" 1527 | } 1528 | }, 1529 | "os": { 1530 | "version": "0.1.2", 1531 | "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", 1532 | "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" 1533 | }, 1534 | "p-limit": { 1535 | "version": "3.1.0", 1536 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1537 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1538 | "dev": true, 1539 | "requires": { 1540 | "yocto-queue": "^0.1.0" 1541 | } 1542 | }, 1543 | "p-locate": { 1544 | "version": "5.0.0", 1545 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1546 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1547 | "dev": true, 1548 | "requires": { 1549 | "p-limit": "^3.0.2" 1550 | } 1551 | }, 1552 | "parent-module": { 1553 | "version": "1.0.1", 1554 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1555 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1556 | "dev": true, 1557 | "requires": { 1558 | "callsites": "^3.0.0" 1559 | } 1560 | }, 1561 | "parse-cache-control": { 1562 | "version": "1.0.1", 1563 | "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", 1564 | "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" 1565 | }, 1566 | "parseqs": { 1567 | "version": "0.0.6", 1568 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", 1569 | "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" 1570 | }, 1571 | "parseuri": { 1572 | "version": "0.0.6", 1573 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", 1574 | "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" 1575 | }, 1576 | "path-exists": { 1577 | "version": "4.0.0", 1578 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1579 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1580 | "dev": true 1581 | }, 1582 | "path-is-absolute": { 1583 | "version": "1.0.1", 1584 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1585 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1586 | "dev": true 1587 | }, 1588 | "path-key": { 1589 | "version": "3.1.1", 1590 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1591 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1592 | "dev": true 1593 | }, 1594 | "performance-now": { 1595 | "version": "2.1.0", 1596 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1597 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1598 | }, 1599 | "picomatch": { 1600 | "version": "2.3.0", 1601 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1602 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1603 | "dev": true 1604 | }, 1605 | "prelude-ls": { 1606 | "version": "1.2.1", 1607 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1608 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1609 | "dev": true 1610 | }, 1611 | "process-nextick-args": { 1612 | "version": "2.0.1", 1613 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1614 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1615 | }, 1616 | "progress": { 1617 | "version": "2.0.3", 1618 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1619 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1620 | "dev": true 1621 | }, 1622 | "promise": { 1623 | "version": "8.1.0", 1624 | "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", 1625 | "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", 1626 | "requires": { 1627 | "asap": "~2.0.6" 1628 | } 1629 | }, 1630 | "psl": { 1631 | "version": "1.8.0", 1632 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1633 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1634 | }, 1635 | "punycode": { 1636 | "version": "2.1.1", 1637 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1638 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1639 | }, 1640 | "qs": { 1641 | "version": "6.5.2", 1642 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1643 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1644 | }, 1645 | "randombytes": { 1646 | "version": "2.1.0", 1647 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1648 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1649 | "dev": true, 1650 | "requires": { 1651 | "safe-buffer": "^5.1.0" 1652 | } 1653 | }, 1654 | "readable-stream": { 1655 | "version": "2.3.7", 1656 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1657 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1658 | "requires": { 1659 | "core-util-is": "~1.0.0", 1660 | "inherits": "~2.0.3", 1661 | "isarray": "~1.0.0", 1662 | "process-nextick-args": "~2.0.0", 1663 | "safe-buffer": "~5.1.1", 1664 | "string_decoder": "~1.1.1", 1665 | "util-deprecate": "~1.0.1" 1666 | }, 1667 | "dependencies": { 1668 | "safe-buffer": { 1669 | "version": "5.1.2", 1670 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1671 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1672 | } 1673 | } 1674 | }, 1675 | "readdirp": { 1676 | "version": "3.5.0", 1677 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 1678 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 1679 | "dev": true, 1680 | "requires": { 1681 | "picomatch": "^2.2.1" 1682 | } 1683 | }, 1684 | "regexpp": { 1685 | "version": "3.2.0", 1686 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1687 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1688 | "dev": true 1689 | }, 1690 | "request": { 1691 | "version": "2.88.2", 1692 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1693 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1694 | "requires": { 1695 | "aws-sign2": "~0.7.0", 1696 | "aws4": "^1.8.0", 1697 | "caseless": "~0.12.0", 1698 | "combined-stream": "~1.0.6", 1699 | "extend": "~3.0.2", 1700 | "forever-agent": "~0.6.1", 1701 | "form-data": "~2.3.2", 1702 | "har-validator": "~5.1.3", 1703 | "http-signature": "~1.2.0", 1704 | "is-typedarray": "~1.0.0", 1705 | "isstream": "~0.1.2", 1706 | "json-stringify-safe": "~5.0.1", 1707 | "mime-types": "~2.1.19", 1708 | "oauth-sign": "~0.9.0", 1709 | "performance-now": "^2.1.0", 1710 | "qs": "~6.5.2", 1711 | "safe-buffer": "^5.1.2", 1712 | "tough-cookie": "~2.5.0", 1713 | "tunnel-agent": "^0.6.0", 1714 | "uuid": "^3.3.2" 1715 | } 1716 | }, 1717 | "require-directory": { 1718 | "version": "2.1.1", 1719 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1720 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1721 | "dev": true 1722 | }, 1723 | "require-from-string": { 1724 | "version": "2.0.2", 1725 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1726 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1727 | "dev": true 1728 | }, 1729 | "resolve-from": { 1730 | "version": "4.0.0", 1731 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1732 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1733 | "dev": true 1734 | }, 1735 | "rimraf": { 1736 | "version": "3.0.2", 1737 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1738 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1739 | "dev": true, 1740 | "requires": { 1741 | "glob": "^7.1.3" 1742 | } 1743 | }, 1744 | "safe-buffer": { 1745 | "version": "5.2.1", 1746 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1747 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1748 | }, 1749 | "safer-buffer": { 1750 | "version": "2.1.2", 1751 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1752 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1753 | }, 1754 | "semver": { 1755 | "version": "7.3.5", 1756 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1757 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1758 | "dev": true, 1759 | "requires": { 1760 | "lru-cache": "^6.0.0" 1761 | } 1762 | }, 1763 | "serialize-javascript": { 1764 | "version": "5.0.1", 1765 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 1766 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 1767 | "dev": true, 1768 | "requires": { 1769 | "randombytes": "^2.1.0" 1770 | } 1771 | }, 1772 | "setimmediate": { 1773 | "version": "1.0.5", 1774 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 1775 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", 1776 | "dev": true 1777 | }, 1778 | "shebang-command": { 1779 | "version": "2.0.0", 1780 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1781 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1782 | "dev": true, 1783 | "requires": { 1784 | "shebang-regex": "^3.0.0" 1785 | } 1786 | }, 1787 | "shebang-regex": { 1788 | "version": "3.0.0", 1789 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1790 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1791 | "dev": true 1792 | }, 1793 | "slice-ansi": { 1794 | "version": "4.0.0", 1795 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1796 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1797 | "dev": true, 1798 | "requires": { 1799 | "ansi-styles": "^4.0.0", 1800 | "astral-regex": "^2.0.0", 1801 | "is-fullwidth-code-point": "^3.0.0" 1802 | }, 1803 | "dependencies": { 1804 | "ansi-styles": { 1805 | "version": "4.3.0", 1806 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1807 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1808 | "dev": true, 1809 | "requires": { 1810 | "color-convert": "^2.0.1" 1811 | } 1812 | }, 1813 | "color-convert": { 1814 | "version": "2.0.1", 1815 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1816 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1817 | "dev": true, 1818 | "requires": { 1819 | "color-name": "~1.1.4" 1820 | } 1821 | }, 1822 | "color-name": { 1823 | "version": "1.1.4", 1824 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1825 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1826 | "dev": true 1827 | } 1828 | } 1829 | }, 1830 | "socket.io-client": { 1831 | "version": "4.1.3", 1832 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.1.3.tgz", 1833 | "integrity": "sha512-hISFn6PDpgDifVUiNklLHVPTMv1LAk8poHArfIUdXa+gKgbr0MZbAlquDFqCqsF30yBqa+jg42wgos2FK50BHA==", 1834 | "requires": { 1835 | "@types/component-emitter": "^1.2.10", 1836 | "backo2": "~1.0.2", 1837 | "component-emitter": "~1.3.0", 1838 | "debug": "~4.3.1", 1839 | "engine.io-client": "~5.1.2", 1840 | "parseuri": "0.0.6", 1841 | "socket.io-parser": "~4.0.4" 1842 | } 1843 | }, 1844 | "socket.io-parser": { 1845 | "version": "4.0.4", 1846 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", 1847 | "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", 1848 | "requires": { 1849 | "@types/component-emitter": "^1.2.10", 1850 | "component-emitter": "~1.3.0", 1851 | "debug": "~4.3.1" 1852 | } 1853 | }, 1854 | "sprintf-js": { 1855 | "version": "1.0.3", 1856 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1857 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1858 | "dev": true 1859 | }, 1860 | "sshpk": { 1861 | "version": "1.16.1", 1862 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1863 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1864 | "requires": { 1865 | "asn1": "~0.2.3", 1866 | "assert-plus": "^1.0.0", 1867 | "bcrypt-pbkdf": "^1.0.0", 1868 | "dashdash": "^1.12.0", 1869 | "ecc-jsbn": "~0.1.1", 1870 | "getpass": "^0.1.1", 1871 | "jsbn": "~0.1.0", 1872 | "safer-buffer": "^2.0.2", 1873 | "tweetnacl": "~0.14.0" 1874 | } 1875 | }, 1876 | "string-random": { 1877 | "version": "0.1.3", 1878 | "resolved": "https://registry.npmjs.org/string-random/-/string-random-0.1.3.tgz", 1879 | "integrity": "sha512-g+UsIwzKhNi+9/+Q3Q7hP8R4HkQxiIkQlttnxw6GRdk9pnnkGIv53C6H8dvh8wxAVDhkqpnWeauaPXS1b2sBJg==" 1880 | }, 1881 | "string-width": { 1882 | "version": "4.2.2", 1883 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 1884 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 1885 | "dev": true, 1886 | "requires": { 1887 | "emoji-regex": "^8.0.0", 1888 | "is-fullwidth-code-point": "^3.0.0", 1889 | "strip-ansi": "^6.0.0" 1890 | } 1891 | }, 1892 | "string_decoder": { 1893 | "version": "1.1.1", 1894 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1895 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1896 | "requires": { 1897 | "safe-buffer": "~5.1.0" 1898 | }, 1899 | "dependencies": { 1900 | "safe-buffer": { 1901 | "version": "5.1.2", 1902 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1903 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1904 | } 1905 | } 1906 | }, 1907 | "strip-ansi": { 1908 | "version": "6.0.0", 1909 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1910 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1911 | "dev": true, 1912 | "requires": { 1913 | "ansi-regex": "^5.0.0" 1914 | } 1915 | }, 1916 | "strip-json-comments": { 1917 | "version": "3.1.1", 1918 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1919 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1920 | "dev": true 1921 | }, 1922 | "supports-color": { 1923 | "version": "5.5.0", 1924 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1925 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1926 | "dev": true, 1927 | "requires": { 1928 | "has-flag": "^3.0.0" 1929 | } 1930 | }, 1931 | "sync-request": { 1932 | "version": "6.1.0", 1933 | "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", 1934 | "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", 1935 | "requires": { 1936 | "http-response-object": "^3.0.1", 1937 | "sync-rpc": "^1.2.1", 1938 | "then-request": "^6.0.0" 1939 | } 1940 | }, 1941 | "sync-rpc": { 1942 | "version": "1.3.6", 1943 | "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", 1944 | "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", 1945 | "requires": { 1946 | "get-port": "^3.1.0" 1947 | } 1948 | }, 1949 | "table": { 1950 | "version": "6.7.1", 1951 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 1952 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 1953 | "dev": true, 1954 | "requires": { 1955 | "ajv": "^8.0.1", 1956 | "lodash.clonedeep": "^4.5.0", 1957 | "lodash.truncate": "^4.4.2", 1958 | "slice-ansi": "^4.0.0", 1959 | "string-width": "^4.2.0", 1960 | "strip-ansi": "^6.0.0" 1961 | }, 1962 | "dependencies": { 1963 | "ajv": { 1964 | "version": "8.6.2", 1965 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", 1966 | "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", 1967 | "dev": true, 1968 | "requires": { 1969 | "fast-deep-equal": "^3.1.1", 1970 | "json-schema-traverse": "^1.0.0", 1971 | "require-from-string": "^2.0.2", 1972 | "uri-js": "^4.2.2" 1973 | } 1974 | }, 1975 | "json-schema-traverse": { 1976 | "version": "1.0.0", 1977 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1978 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1979 | "dev": true 1980 | } 1981 | } 1982 | }, 1983 | "text-table": { 1984 | "version": "0.2.0", 1985 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1986 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1987 | "dev": true 1988 | }, 1989 | "then-request": { 1990 | "version": "6.0.2", 1991 | "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", 1992 | "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", 1993 | "requires": { 1994 | "@types/concat-stream": "^1.6.0", 1995 | "@types/form-data": "0.0.33", 1996 | "@types/node": "^8.0.0", 1997 | "@types/qs": "^6.2.31", 1998 | "caseless": "~0.12.0", 1999 | "concat-stream": "^1.6.0", 2000 | "form-data": "^2.2.0", 2001 | "http-basic": "^8.1.1", 2002 | "http-response-object": "^3.0.1", 2003 | "promise": "^8.0.0", 2004 | "qs": "^6.4.0" 2005 | }, 2006 | "dependencies": { 2007 | "@types/node": { 2008 | "version": "8.10.66", 2009 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", 2010 | "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" 2011 | } 2012 | } 2013 | }, 2014 | "to-regex-range": { 2015 | "version": "5.0.1", 2016 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2017 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2018 | "dev": true, 2019 | "requires": { 2020 | "is-number": "^7.0.0" 2021 | } 2022 | }, 2023 | "tough-cookie": { 2024 | "version": "2.5.0", 2025 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 2026 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 2027 | "requires": { 2028 | "psl": "^1.1.28", 2029 | "punycode": "^2.1.1" 2030 | } 2031 | }, 2032 | "traverse": { 2033 | "version": "0.3.9", 2034 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", 2035 | "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", 2036 | "dev": true 2037 | }, 2038 | "tunnel-agent": { 2039 | "version": "0.6.0", 2040 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2041 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2042 | "requires": { 2043 | "safe-buffer": "^5.0.1" 2044 | } 2045 | }, 2046 | "tweetnacl": { 2047 | "version": "0.14.5", 2048 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2049 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 2050 | }, 2051 | "type-check": { 2052 | "version": "0.4.0", 2053 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2054 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2055 | "dev": true, 2056 | "requires": { 2057 | "prelude-ls": "^1.2.1" 2058 | } 2059 | }, 2060 | "type-fest": { 2061 | "version": "0.20.2", 2062 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2063 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2064 | "dev": true 2065 | }, 2066 | "typedarray": { 2067 | "version": "0.0.6", 2068 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2069 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2070 | }, 2071 | "typescript": { 2072 | "version": "4.3.5", 2073 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 2074 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 2075 | "dev": true 2076 | }, 2077 | "unzipper": { 2078 | "version": "0.10.11", 2079 | "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", 2080 | "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", 2081 | "dev": true, 2082 | "requires": { 2083 | "big-integer": "^1.6.17", 2084 | "binary": "~0.3.0", 2085 | "bluebird": "~3.4.1", 2086 | "buffer-indexof-polyfill": "~1.0.0", 2087 | "duplexer2": "~0.1.4", 2088 | "fstream": "^1.0.12", 2089 | "graceful-fs": "^4.2.2", 2090 | "listenercount": "~1.0.1", 2091 | "readable-stream": "~2.3.6", 2092 | "setimmediate": "~1.0.4" 2093 | } 2094 | }, 2095 | "uri-js": { 2096 | "version": "4.4.1", 2097 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2098 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2099 | "requires": { 2100 | "punycode": "^2.1.0" 2101 | } 2102 | }, 2103 | "util-deprecate": { 2104 | "version": "1.0.2", 2105 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2106 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2107 | }, 2108 | "uuid": { 2109 | "version": "3.4.0", 2110 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 2111 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 2112 | }, 2113 | "v8-compile-cache": { 2114 | "version": "2.3.0", 2115 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 2116 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 2117 | "dev": true 2118 | }, 2119 | "verror": { 2120 | "version": "1.10.0", 2121 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2122 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2123 | "requires": { 2124 | "assert-plus": "^1.0.0", 2125 | "core-util-is": "1.0.2", 2126 | "extsprintf": "^1.2.0" 2127 | } 2128 | }, 2129 | "vscode-test": { 2130 | "version": "1.6.1", 2131 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", 2132 | "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", 2133 | "dev": true, 2134 | "requires": { 2135 | "http-proxy-agent": "^4.0.1", 2136 | "https-proxy-agent": "^5.0.0", 2137 | "rimraf": "^3.0.2", 2138 | "unzipper": "^0.10.11" 2139 | } 2140 | }, 2141 | "which": { 2142 | "version": "2.0.2", 2143 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2144 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2145 | "dev": true, 2146 | "requires": { 2147 | "isexe": "^2.0.0" 2148 | } 2149 | }, 2150 | "wide-align": { 2151 | "version": "1.1.3", 2152 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2153 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2154 | "dev": true, 2155 | "requires": { 2156 | "string-width": "^1.0.2 || 2" 2157 | }, 2158 | "dependencies": { 2159 | "ansi-regex": { 2160 | "version": "3.0.0", 2161 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2162 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2163 | "dev": true 2164 | }, 2165 | "is-fullwidth-code-point": { 2166 | "version": "2.0.0", 2167 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2168 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2169 | "dev": true 2170 | }, 2171 | "string-width": { 2172 | "version": "2.1.1", 2173 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2174 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2175 | "dev": true, 2176 | "requires": { 2177 | "is-fullwidth-code-point": "^2.0.0", 2178 | "strip-ansi": "^4.0.0" 2179 | } 2180 | }, 2181 | "strip-ansi": { 2182 | "version": "4.0.0", 2183 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2184 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2185 | "dev": true, 2186 | "requires": { 2187 | "ansi-regex": "^3.0.0" 2188 | } 2189 | } 2190 | } 2191 | }, 2192 | "word-wrap": { 2193 | "version": "1.2.3", 2194 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2195 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2196 | "dev": true 2197 | }, 2198 | "workerpool": { 2199 | "version": "6.1.0", 2200 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", 2201 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", 2202 | "dev": true 2203 | }, 2204 | "wrap-ansi": { 2205 | "version": "7.0.0", 2206 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2207 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2208 | "dev": true, 2209 | "requires": { 2210 | "ansi-styles": "^4.0.0", 2211 | "string-width": "^4.1.0", 2212 | "strip-ansi": "^6.0.0" 2213 | }, 2214 | "dependencies": { 2215 | "ansi-styles": { 2216 | "version": "4.3.0", 2217 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2218 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2219 | "dev": true, 2220 | "requires": { 2221 | "color-convert": "^2.0.1" 2222 | } 2223 | }, 2224 | "color-convert": { 2225 | "version": "2.0.1", 2226 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2227 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2228 | "dev": true, 2229 | "requires": { 2230 | "color-name": "~1.1.4" 2231 | } 2232 | }, 2233 | "color-name": { 2234 | "version": "1.1.4", 2235 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2236 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2237 | "dev": true 2238 | } 2239 | } 2240 | }, 2241 | "wrappy": { 2242 | "version": "1.0.2", 2243 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2244 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2245 | "dev": true 2246 | }, 2247 | "ws": { 2248 | "version": "7.4.6", 2249 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 2250 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" 2251 | }, 2252 | "y18n": { 2253 | "version": "5.0.8", 2254 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2255 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2256 | "dev": true 2257 | }, 2258 | "yallist": { 2259 | "version": "4.0.0", 2260 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2261 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2262 | "dev": true 2263 | }, 2264 | "yargs": { 2265 | "version": "16.2.0", 2266 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2267 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2268 | "dev": true, 2269 | "requires": { 2270 | "cliui": "^7.0.2", 2271 | "escalade": "^3.1.1", 2272 | "get-caller-file": "^2.0.5", 2273 | "require-directory": "^2.1.1", 2274 | "string-width": "^4.2.0", 2275 | "y18n": "^5.0.5", 2276 | "yargs-parser": "^20.2.2" 2277 | } 2278 | }, 2279 | "yargs-parser": { 2280 | "version": "20.2.4", 2281 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2282 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2283 | "dev": true 2284 | }, 2285 | "yargs-unparser": { 2286 | "version": "2.0.0", 2287 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2288 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2289 | "dev": true, 2290 | "requires": { 2291 | "camelcase": "^6.0.0", 2292 | "decamelize": "^4.0.0", 2293 | "flat": "^5.0.2", 2294 | "is-plain-obj": "^2.1.0" 2295 | } 2296 | }, 2297 | "yeast": { 2298 | "version": "0.1.2", 2299 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 2300 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 2301 | }, 2302 | "yocto-queue": { 2303 | "version": "0.1.0", 2304 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2305 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2306 | "dev": true 2307 | } 2308 | } 2309 | } 2310 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hikari-vscode", 3 | "publisher": "Hikari-Dev", 4 | "displayName": "hikari-VSCode", 5 | "description": "hikari client for VSCode", 6 | "version": "0.3.0", 7 | "icon": "icon.png", 8 | "engines": { 9 | "vscode": "^1.59.0" 10 | }, 11 | "categories": [ 12 | "Other" 13 | ], 14 | "activationEvents": [ 15 | "onCommand:hikari-vscode.submit" 16 | ], 17 | "main": "./extension.js", 18 | "contributes": { 19 | "configuration": { 20 | "type": "object", 21 | "title": "Hikari-VSCode配置", 22 | "properties": { 23 | "hikari-vscode.uname": { 24 | "type": "string", 25 | "default": "clearwave", 26 | "description": "您的用户名" 27 | }, 28 | "hikari-vscode.passwd": { 29 | "type": "string", 30 | "default": "123456", 31 | "description": "您的密码" 32 | }, 33 | "hikari-vscode.oj_url": { 34 | "type": "string", 35 | "default": "http://1.116.217.97", 36 | "description": "OJ的网址(勿动!)" 37 | } 38 | } 39 | }, 40 | "commands": [ 41 | { 42 | "command": "hikari-vscode.submit", 43 | "title": "将代码提交至Hikari" 44 | } 45 | ], 46 | "menus": { 47 | "editor/context": [ 48 | { 49 | "when": "editorFocus", 50 | "command": "hikari-vscode.submit", 51 | "group": "navigation" 52 | } 53 | ], 54 | "explorer/context": [ 55 | { 56 | "command": "hikari-vscode.submit", 57 | "group": "navigation" 58 | } 59 | ] 60 | }, 61 | "keybindings": [ 62 | { 63 | "command": "hikari-vscode.submit", 64 | "key": "ctrl+f11", 65 | "when": "editorTextFocus" 66 | } 67 | ] 68 | }, 69 | "scripts": { 70 | "lint": "eslint .", 71 | "pretest": "npm run lint", 72 | "test": "node ./test/runTest.js" 73 | }, 74 | "devDependencies": { 75 | "@types/vscode": "^1.59.0", 76 | "@types/glob": "^7.1.3", 77 | "@types/mocha": "^8.2.2", 78 | "@types/node": "14.x", 79 | "eslint": "^7.27.0", 80 | "glob": "^7.1.7", 81 | "mocha": "^8.4.0", 82 | "typescript": "^4.3.2", 83 | "vscode-test": "^1.5.2" 84 | }, 85 | "dependencies": { 86 | "async": "^3.2.2", 87 | "child_process": "^1.0.2", 88 | "fs": "0.0.1-security", 89 | "http": "0.0.1-security", 90 | "md5": "^2.3.0", 91 | "os": "^0.1.2", 92 | "request": "^2.88.2", 93 | "socket.io-client": "^4.1.3", 94 | "string-random": "^0.1.3", 95 | "sync-request": "^6.1.0" 96 | }, 97 | "license": "MIT", 98 | "bugs": { 99 | "url": "https://github.com/OIer-Club/Hikari-NG/issues" 100 | }, 101 | "repository": { 102 | "type": "git", 103 | "url": "https://github.com/OIer-Club/Hikari-NG" 104 | }, 105 | "homepage": "https://github.com/OIer-Club/Hikari-NG/blob/main/README.md" 106 | } 107 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/queue.js: -------------------------------------------------------------------------------- 1 | const async = require("async"); 2 | /** 3 | *队列 4 | * @param obj :obj对象 包含执行时间 5 | * @param callback :回调函数 6 | */ 7 | const Queue = async.queue(function (obj, callback) { 8 | console.log("已压入评测队列: " + obj.rid + " 测试点编号:" + obj.grp); 9 | callback(obj); 10 | }, 1); 11 | module.exports = Queue; -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/submissions/_gitkeep: -------------------------------------------------------------------------------- 1 | keepkeep -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/test/runTest.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const { runTests } = require('vscode-test'); 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../'); 10 | 11 | // The path to the extension test script 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/test/suite/extension.test.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | const vscode = require('vscode'); 6 | // const myExtension = require('../extension'); 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /Hikari_VSCode/Hikari-vscode/test/suite/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const Mocha = require('mocha'); 3 | const glob = require('glob'); 4 | 5 | function run() { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | 40 | module.exports = { 41 | run 42 | }; 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 OIer-Club 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | # 警告:当前版本为预览版,尚未部署Sandbox,请勿在生产环境下使用。建议在Windows Sandbox或Sandboxie中运行。 3 | ## 欢迎访问我们的网站[Hikari](https://oj.hikari.owo.fit/) 4 | ## 含有MinGW编译器的完整版代码可以从[蓝奏云](https://wwo.lanzoui.com/imK4Vwm7wxg)下载 5 | ### Q:什么是Hikari-NG? 6 | A:Hikari-NG是一款分布式的OJ,用户和题目信息等存放在云端,而评测等则在用户本地进行。 7 | ![](https://i.loli.net/2021/08/29/kIu1i37tbSsFL5Y.png) 8 | 9 | 10 | 11 | ### Q:为什么需要Hikari-NG? 12 | 1. 分布式的架构可以阻止别有用心的用户通过提交恶意代码的方式攻击OJ; 13 | 2. 分布式的架构可以缩减小微OJ的开支,从而让小微OJ有更大的概率活下去,从而使OIer有更多选择,形成互利共赢的局面。 14 | 15 | 16 | # Changelog 17 | ### V0.1.9 18 | - 数据库安全性全面升级,告别SQL注入 19 | - 大规模数据分段传输 20 | - 评测结果差异对比 21 | 22 | ### V0.1.7 23 | - 更人性化的交互体验 24 | - 更快速的数据库操作 25 | - 修复若干Bug 26 | 27 | ### V0.1.3: 28 | - 添加自适应评测时间计算 29 | - 添加Validate Code防作弊系统 30 | 31 | 感谢 @[swift-zym](https://github.com/swift-zym) 和 @[officeyutong](https://github.com/officeyutong) 提出的宝贵意见! 32 | 33 | # Installation 34 | 1. 安装[VSCode](https://code.visualstudio.com/) 35 | 2. 在VSCode插件市场搜索hikari-VSCode并安装 36 | 37 | 38 | 39 | # Configuration 40 | 41 | 1.![sample2](https://i.loli.net/2021/09/03/Wv5hM6Vn8jNOulX.png) 42 | 43 | 44 | 45 | 2.OJ网址(OJ_URL)请填``1.116.217.97``,密码请填OJ上的密码,用户名请填OJ上的用户名。 46 | 47 | # Usage 48 | 49 | 在代码编写界面右键选中“将代码提交至Hikari”或按Ctrl+F11提交代码,在上方弹出的对话框中输入题目编号,然后回车并耐心等待,一段时间后右下角将弹出评测结果 50 | 51 | # Milestones 52 | 53 | ### Milestone1(Finished) 54 | - [x] User Account Management System 55 | - [x] Distributed Judge System 56 | 57 | ### Milestone2(Currently working on) 58 | - [x] Time Limit Evaluation System 59 | - [x] Anti-Cheating System 60 | - [x] Blog System (in Front End) 61 | - [x] Ranking System (in Front End) 62 | 63 | ### Milestone3(In Future) 64 | - [ ] Sandbox based on MIPS regulation 65 | - [ ] More... 66 | --------------------------------------------------------------------------------