├── docs
├── CNAME
├── favicon.ico
├── img
│ ├── icons
│ │ ├── icon.png
│ │ ├── icon-maskable.png
│ │ └── apple-touch-icon.png
│ ├── home-icon.8d8fef55.png
│ ├── add-home-ios.d42cef19.png
│ ├── add-home-android.daecad53.png
│ ├── cocoa-difference.07961364.png
│ ├── instruction-ios-01.e28c8dc6.png
│ ├── instruction-ios-02.00203555.png
│ └── instruction-android.1b55644d.png
├── sitemap.xml
├── manifest.json
├── service-worker.js
├── precache-manifest.f0bb3120dc503a3fcea7eae92dc433ab.js
├── index.html
└── js
│ ├── app.2588eb7e.js
│ └── app.2588eb7e.js.map
├── public
├── CNAME
├── favicon.ico
├── img
│ └── icons
│ │ ├── icon.png
│ │ ├── icon-maskable.png
│ │ └── apple-touch-icon.png
├── sitemap.xml
└── index.html
├── babel.config.js
├── src
├── shims-vue.d.ts
├── assets
│ └── images
│ │ ├── home-icon.png
│ │ ├── add-home-ios.png
│ │ ├── add-home-android.png
│ │ ├── cocoa-difference.png
│ │ ├── instruction-ios-01.png
│ │ ├── instruction-ios-02.png
│ │ └── instruction-android.png
├── plugins
│ └── vuetify.ts
├── shims-tsx.d.ts
├── main.ts
├── service-worker.ts
├── App.vue
└── components
│ └── ExposeChecker.vue
├── .gitignore
├── README.md
├── .github
└── workflows
│ └── deploy.yaml
├── vue.config.js
├── tsconfig.json
└── package.json
/docs/CNAME:
--------------------------------------------------------------------------------
1 | cocoa-log-checker.com
2 |
--------------------------------------------------------------------------------
/public/CNAME:
--------------------------------------------------------------------------------
1 | cocoa-log-checker.com
2 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/favicon.ico
--------------------------------------------------------------------------------
/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import Vue from 'vue'
3 | export default Vue
4 | }
5 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/public/favicon.ico
--------------------------------------------------------------------------------
/docs/img/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/icons/icon.png
--------------------------------------------------------------------------------
/public/img/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/public/img/icons/icon.png
--------------------------------------------------------------------------------
/docs/img/home-icon.8d8fef55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/home-icon.8d8fef55.png
--------------------------------------------------------------------------------
/docs/img/icons/icon-maskable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/icons/icon-maskable.png
--------------------------------------------------------------------------------
/src/assets/images/home-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/home-icon.png
--------------------------------------------------------------------------------
/docs/img/add-home-ios.d42cef19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/add-home-ios.d42cef19.png
--------------------------------------------------------------------------------
/docs/img/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/img/icons/icon-maskable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/public/img/icons/icon-maskable.png
--------------------------------------------------------------------------------
/src/assets/images/add-home-ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/add-home-ios.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/public/img/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/docs/img/add-home-android.daecad53.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/add-home-android.daecad53.png
--------------------------------------------------------------------------------
/docs/img/cocoa-difference.07961364.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/cocoa-difference.07961364.png
--------------------------------------------------------------------------------
/docs/img/instruction-ios-01.e28c8dc6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/instruction-ios-01.e28c8dc6.png
--------------------------------------------------------------------------------
/docs/img/instruction-ios-02.00203555.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/instruction-ios-02.00203555.png
--------------------------------------------------------------------------------
/src/assets/images/add-home-android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/add-home-android.png
--------------------------------------------------------------------------------
/src/assets/images/cocoa-difference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/cocoa-difference.png
--------------------------------------------------------------------------------
/src/assets/images/instruction-ios-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/instruction-ios-01.png
--------------------------------------------------------------------------------
/src/assets/images/instruction-ios-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/instruction-ios-02.png
--------------------------------------------------------------------------------
/docs/img/instruction-android.1b55644d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/docs/img/instruction-android.1b55644d.png
--------------------------------------------------------------------------------
/src/assets/images/instruction-android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tsukumijima/COVID-19-ExposeChecker/develop/src/assets/images/instruction-android.png
--------------------------------------------------------------------------------
/src/plugins/vuetify.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuetify from 'vuetify/lib/framework';
3 |
4 | Vue.use(Vuetify);
5 |
6 | export default new Vuetify({
7 | breakpoint: {
8 | thresholds: {
9 | xs: 355,
10 | },
11 | },
12 | })
13 |
--------------------------------------------------------------------------------
/docs/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://www.cocoa-log-checker.com
5 | 2021-08-26
6 | daily
7 |
8 |
9 |
--------------------------------------------------------------------------------
/public/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://www.cocoa-log-checker.com
5 | 2021-08-26
6 | daily
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/src/shims-tsx.d.ts:
--------------------------------------------------------------------------------
1 | import Vue, { VNode } from 'vue'
2 |
3 | declare global {
4 | namespace JSX {
5 | // tslint:disable no-empty-interface
6 | interface Element extends VNode {}
7 | // tslint:disable no-empty-interface
8 | interface ElementClass extends Vue {}
9 | interface IntrinsicElements {
10 | [elem: string]: any
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/docs/manifest.json:
--------------------------------------------------------------------------------
1 | {"name":"COCOAログチェッカー","short_name":"COCOAログ解析","theme_color":"#FD8865","icons":[{"src":"img/icons/icon.png","sizes":"192x192","type":"image/png"},{"src":"img/icons/icon-maskable.png","sizes":"192x192","type":"image/png","purpose":"maskable"}],"start_url":".","display":"standalone","background_color":"#FD8865","description":"iOS/Androidの約2週間の接触通知のログを解析し、自分の周りに陽性者が何人いたかを表示します。"}
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import VueGtag from 'vue-gtag';
3 |
4 | import App from './App.vue';
5 | import vuetify from './plugins/vuetify';
6 | import './service-worker';
7 |
8 | Vue.config.productionTip = false;
9 |
10 | Vue.use(VueGtag, {
11 | config: {
12 | id: 'G-S63S935HFP',
13 | }
14 | });
15 |
16 | new Vue({
17 | vuetify,
18 | render: h => h(App),
19 | }).$mount('#app');
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # COCOAログチェッカー
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | npm run lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yaml:
--------------------------------------------------------------------------------
1 | name: Deploy to Github Pages
2 | on:
3 | push:
4 | branches: [ master ]
5 |
6 | jobs:
7 | deploy:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v2
11 |
12 | - name: Setup Node.js
13 | uses: actions/setup-node@v1
14 | with:
15 | node-version: 14.x
16 | registry-url: 'https://registry.npmjs.org'
17 |
18 | - name: Install dependencies
19 | run: npm ci
20 |
21 | - name: Build
22 | run: npm run build
23 |
24 | - name: Deploy
25 | uses: peaceiris/actions-gh-pages@v3
26 | with:
27 | github_token: ${{ secrets.GITHUB_TOKEN }}
28 | publish_dir: ./docs
29 |
--------------------------------------------------------------------------------
/src/service-worker.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 |
3 | import { register } from 'register-service-worker';
4 |
5 | if (process.env.NODE_ENV === 'production') {
6 | register(`${process.env.BASE_URL}service-worker.js`, {
7 | ready () {
8 | console.log(
9 | 'App is being served from cache by a service worker.\n' +
10 | 'For more details, visit https://goo.gl/AFskqB'
11 | );
12 | },
13 | registered () {
14 | console.log('Service worker has been registered.');
15 | },
16 | cached () {
17 | console.log('Content has been cached for offline use.');
18 | },
19 | updatefound () {
20 | console.log('New content is downloading.');
21 | },
22 | updated () {
23 | console.log('New content is available; please refresh.');
24 | },
25 | offline () {
26 | console.log('No internet connection found. App is running in offline mode.');
27 | },
28 | error (error) {
29 | console.error('Error during service worker registration:', error);
30 | }
31 | });
32 | }
33 |
--------------------------------------------------------------------------------
/docs/service-worker.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Welcome to your Workbox-powered service worker!
3 | *
4 | * You'll need to register this file in your web app and you should
5 | * disable HTTP caching for this file too.
6 | * See https://goo.gl/nhQhGp
7 | *
8 | * The rest of the code is auto-generated. Please don't update this file
9 | * directly; instead, make changes to your Workbox build configuration
10 | * and re-run your build process.
11 | * See https://goo.gl/2aRDsh
12 | */
13 |
14 | importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
15 |
16 | importScripts(
17 | "precache-manifest.f0bb3120dc503a3fcea7eae92dc433ab.js"
18 | );
19 |
20 | workbox.core.setCacheNameDetails({prefix: "cocoa-log-checker"});
21 |
22 | self.addEventListener('message', (event) => {
23 | if (event.data && event.data.type === 'SKIP_WAITING') {
24 | self.skipWaiting();
25 | }
26 | });
27 |
28 | /**
29 | * The workboxSW.precacheAndRoute() method efficiently caches and responds to
30 | * requests for URLs in the manifest.
31 | * See https://goo.gl/S9QRab
32 | */
33 | self.__precacheManifest = [].concat(self.__precacheManifest || []);
34 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
35 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | // 出力フォルダ
3 | outputDir: 'docs/',
4 | assetsDir: './',
5 | publicPath: './',
6 | // Vuetify
7 | transpileDependencies: ['vuetify'],
8 | // PWA 設定
9 | pwa: {
10 | name: 'COCOAログ解析',
11 | themeColor: '#FD8865',
12 | appleMobileWebAppCapable: 'yes',
13 | appleMobileWebAppStatusBarStyle: 'default',
14 | // アイコンのパス
15 | iconPaths: {
16 | appleTouchIcon: 'img/icons/apple-touch-icon.png',
17 | maskIcon: null, // 設定しない
18 | msTileImage: null, // 設定しない
19 | },
20 | // manifest.json の内容
21 | manifestOptions: {
22 | 'name': 'COCOAログチェッカー',
23 | 'short_name': 'COCOAログ解析',
24 | 'description': 'iOS/Androidの約2週間の接触通知のログを解析し、自分の周りに陽性者が何人いたかを表示します。',
25 | 'start_url': '.',
26 | 'display': 'standalone',
27 | 'theme_color': '#FD8865',
28 | 'background_color': '#FD8865',
29 | 'icons': [
30 | {
31 | 'src': 'img/icons/icon.png',
32 | 'sizes': '192x192',
33 | 'type': 'image/png',
34 | },
35 | {
36 | 'src': 'img/icons/icon-maskable.png',
37 | 'sizes': '192x192',
38 | 'type': 'image/png',
39 | 'purpose': 'maskable',
40 | },
41 | ]
42 | }
43 | }
44 | }
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "module": "esnext",
5 | "strict": true,
6 | "jsx": "preserve",
7 | "importHelpers": true,
8 | "moduleResolution": "node",
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "sourceMap": true,
14 | "baseUrl": ".",
15 | "incremental": true, // 差分ビルドを有効に
16 | "removeComments": false, // コメントを残す
17 | "forceConsistentCasingInFileNames": true, // ファイル名の大文字小文字に一貫性がないときにエラーにする
18 | "noImplicitThis": true, // Vetur で this の補完を有効にする
19 | // ↓↓↓ がんばらない TypeScript
20 | "noImplicitAny": false,
21 | "strictNullChecks": false,
22 | "strictFunctionTypes": false,
23 | "strictBindCallApply": false,
24 | "strictPropertyInitialization": false,
25 | // ↑↑↑
26 | "types": [
27 | "vuetify",
28 | "webpack-env"
29 | ],
30 | "paths": {
31 | "@/*": [
32 | "src/*"
33 | ]
34 | },
35 | "lib": [
36 | "esnext",
37 | "dom",
38 | "dom.iterable",
39 | "scripthost"
40 | ]
41 | },
42 | "include": [
43 | "src/**/*.ts",
44 | "src/**/*.tsx",
45 | "src/**/*.vue",
46 | "tests/**/*.ts",
47 | "tests/**/*.tsx"
48 | ],
49 | "exclude": [
50 | "node_modules"
51 | ]
52 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cocoa-log-checker",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "core-js": "^3.6.5",
12 | "register-service-worker": "^1.7.1",
13 | "vue": "^2.6.11",
14 | "vue-gtag": "^1.16.1",
15 | "vuetify": "^2.4.0"
16 | },
17 | "devDependencies": {
18 | "@typescript-eslint/eslint-plugin": "^4.18.0",
19 | "@typescript-eslint/parser": "^4.18.0",
20 | "@vue/cli-plugin-babel": "~4.5.0",
21 | "@vue/cli-plugin-eslint": "~4.5.0",
22 | "@vue/cli-plugin-pwa": "~4.5.0",
23 | "@vue/cli-plugin-typescript": "~4.5.0",
24 | "@vue/cli-service": "~4.5.0",
25 | "@vue/eslint-config-typescript": "^7.0.0",
26 | "babel-eslint": "^10.1.0",
27 | "eslint": "^6.7.2",
28 | "eslint-plugin-vue": "^6.2.2",
29 | "sass": "~1.32.0",
30 | "sass-loader": "^10.0.0",
31 | "typescript": "~4.1.5",
32 | "vue-cli-plugin-vuetify": "~2.4.2",
33 | "vue-template-compiler": "^2.6.11",
34 | "vuetify-loader": "^1.7.0"
35 | },
36 | "eslintConfig": {
37 | "root": true,
38 | "env": {
39 | "node": true
40 | },
41 | "extends": [
42 | "plugin:vue/essential",
43 | "eslint:recommended",
44 | "@vue/typescript"
45 | ],
46 | "parserOptions": {
47 | "parser": "@typescript-eslint/parser"
48 | },
49 | "rules": {}
50 | },
51 | "browserslist": [
52 | "> 1%",
53 | "last 2 versions",
54 | "not dead"
55 | ]
56 | }
57 |
--------------------------------------------------------------------------------
/docs/precache-manifest.f0bb3120dc503a3fcea7eae92dc433ab.js:
--------------------------------------------------------------------------------
1 | self.__precacheManifest = (self.__precacheManifest || []).concat([
2 | {
3 | "revision": "2f7982e1c0b2a925e07c2031cfe7b14d",
4 | "url": "CNAME"
5 | },
6 | {
7 | "revision": "edc8af7ada9c6e22c473",
8 | "url": "css/chunk-vendors.ffe1cdb8.css"
9 | },
10 | {
11 | "revision": "daecad5300bb3b3a6b158590301cf337",
12 | "url": "img/add-home-android.daecad53.png"
13 | },
14 | {
15 | "revision": "d42cef193cc840b8361acbc17e01b8ad",
16 | "url": "img/add-home-ios.d42cef19.png"
17 | },
18 | {
19 | "revision": "0796136434a324c88a0c98abb1590510",
20 | "url": "img/cocoa-difference.07961364.png"
21 | },
22 | {
23 | "revision": "8d8fef555065273c049a06e80b1bb6d3",
24 | "url": "img/home-icon.8d8fef55.png"
25 | },
26 | {
27 | "revision": "1b55644d3121112bc1a6ba9e73804365",
28 | "url": "img/instruction-android.1b55644d.png"
29 | },
30 | {
31 | "revision": "e28c8dc6ebf76a9295624ea5521e26e6",
32 | "url": "img/instruction-ios-01.e28c8dc6.png"
33 | },
34 | {
35 | "revision": "00203555605048e5be50a652c676a403",
36 | "url": "img/instruction-ios-02.00203555.png"
37 | },
38 | {
39 | "revision": "0ac9701ccaaf1c242ffc24492977e59f",
40 | "url": "index.html"
41 | },
42 | {
43 | "revision": "feea75e99f10a50482fc",
44 | "url": "js/app.2588eb7e.js"
45 | },
46 | {
47 | "revision": "edc8af7ada9c6e22c473",
48 | "url": "js/chunk-vendors.6c1b29af.js"
49 | },
50 | {
51 | "revision": "89834c664b3242ab65da27d554971913",
52 | "url": "manifest.json"
53 | },
54 | {
55 | "revision": "bcf9bf6f2d3f042782bdba3cfae9ee14",
56 | "url": "sitemap.xml"
57 | }
58 | ]);
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | COCOAログチェッカー
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
42 |
43 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 | COCOAログチェッカー
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 | COCOAログチェッカー
10 |
11 |
12 |
13 |
19 | mdi-plus-box-outline
20 | ホーム画面に追加
21 |
22 |
23 |
31 |
32 |
33 |
37 |
38 | ホーム画面に追加
39 |
40 | ブラウザの下記ボタンを押して ホーム画面に追加 を押すと、ホーム画面上にアイコンを作成できます。
41 | ホーム画面のアイコンから、定期的にログを解析することをおすすめします。
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | (左:iOS / 右:Android)
52 |
53 |
54 |
55 |
56 |
57 |
58 |
63 | 閉じる
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/src/components/ExposeChecker.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | COCOAログチェッカー
7 |
8 |
接触通知ログ解析ツール
9 |
10 |
11 |
12 |
13 |
14 | iOS/Androidの設定アプリから閲覧できる
15 | 接触通知のログデータを解析し、
16 | 約2週間の間にCOCOAの新規陽性登録者が付近にいた可能性がある記録を表示します。(Bluetoothの電波が届く範囲)
17 |
18 |
19 | 使用の際は注意事項/詳細説明を読み、
20 | 理解した上でご利用ください。
21 |
22 |
23 |
24 |
25 |
26 |
27 | 注意事項/詳細説明
28 |
29 |
30 | - iOS/Androidで収集されている COVID-19 接触のログデータの中で、COCOAの新規陽性登録者の端末の近くにいた記録があるかを確認するツールです。
31 | - 具体的には、接触ログデータの中のMatchCount(iOS)/matchesCount(Android)の項目が0ではない値(接触が疑われるデータ)を抽出するだけのツールです
32 | - クライアントサイドのJavaScriptで解析を行っているため、ここでペーストしたログデータが外部に送信されるようなことはありません。
33 | - このログデータで分かることは、COCOAの新規陽性登録者が付近(Bluetoothの電波が届く範囲)にいたことのみで、必ずしも濃厚接触に該当する訳ではありません。
34 | - BluetoothがOFFに設定されている間は、OSが接触検知を行うことができないためご注意ください(厚生労働省FAQより)
35 | - 本家COCOAのアプリで通知が来る条件は「1m以内かつ15分以上」ですが、本ツールはその基準よりも広い「OSが検知した新規陽性登録者との接触」のログすべてを対象としています。(厚生労働省FAQより)
36 |
37 |
38 |
39 |
40 |
41 | - 本ツールの利用には、新型コロナウイルス接触確認アプリCOCOAのインストールが必要です。COCOAに関しては、厚生労働省のHPをご確認ください。
42 | - 接触があった日時は、Hash値を用いて、サイト下部の外部ページにて24時間の範囲で絞り込み可能です。(iOSのみ)
43 | - 接触通知のログデータ内部のTimestampは、接触のあった日時ではなく、COCOAが新規陽性登録者のリストをダウンロードし、スマホ内で照合を行った日時のようです。つまりこのTimestampより前に接触の可能性があることのみ分かります。
44 | 例えば、COCOAユーザーAさんとの接触検知が9月1日、Aさんの発症が9月4日(潜伏期間3日間)、Aさんの新規陽性登録が完了したのが9月7日、だったとすると、スマホ内の接触ログデータのTimestampは9月7日以降になりますが、実際の接触はそれより以前(この例だと9月1日)になります。
45 | 潜伏期間や、登録までの期間は場合によるので、この方法では正確な日時は特定ができません。
46 |
47 | - 現在、このTimestampが誤解を招くため、結果表示から意図的に削除させて頂いています。表示方法などを検討し将来的に表示する予定です。
48 | - 本ツールは無償で使用可能ですが、この解析ツールを用いて起きた問題などについて、製作者は一切の責任を負いかねます。自己責任でご使用ください。
49 | - 不具合報告、改善要望、間違いの指摘、PR、質問などは、githubまたは、@ktansaiまでおねがいします。また、個人で開発しているため、全てに対応できるとは限りません。ご了承ください。
50 | - COCOAログチェッカーはgithub上にソースコードを公開しており、多くの方に提案/指摘をいただきながら作成しています。ご協力いただいている全ての方に多大な感謝を申し上げます。
51 |
52 |
53 |
54 |
55 | 使い方(iOS)
56 |
57 | Step1. iOSの接触通知ログをコピーする
58 |
59 |
60 | Step2. 下記入力枠にペーストする
61 |
62 |
63 |
64 |
65 |
66 | 使い方(Android)
67 |
68 |
69 | Step1. Androidの接触通知ログをGoogleDriveまたはローカルに保存する
70 | (保存方法/アプリなどの候補が表示されたら、GoogleDriveまたは、ローカルに保存をする)
71 |
72 | 接触通知ログは、個人を特定することが難しい秘匿性の高いデータですが、スマホ外部に保存することに抵抗がある方は、ローカルに保存することをおすすめします。
73 |
74 |
75 |
76 |
77 | Step2.
78 | GoogleDriveアプリまたは、ローカルのファイルから保存したログデータを開き、
79 | [すべて選択]を押し、[コピー]を押す。
80 | (近日中にスクリーンショットを掲載します)
81 |
82 | Step3. 下記入力枠にペーストする
(近日中にスクリーンショットを掲載します)
83 |
84 | より簡単な方法をご存じの方はgithubまたは、@ktansaiまで教えていただけると幸いです。
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
103 |
104 |
105 |
接触通知のログjsonファイルをアップロードしてください。(サーバーには送信はしません)
106 |
107 |
108 |
109 |
110 | 本ツールは、スマホ内で処理しているため、
111 | ここでペーストしたデータが外部に流出することはありません。
112 |
113 |
114 |
115 | クリア
116 |
117 |
118 | チェックする
119 |
120 |
121 |
122 |
123 |
124 | 結果: {{resultText}}
125 |
126 |
127 |
128 | ログデータや結果に関する説明は、サイト上部の注意事項/詳細説明をご覧ください。
129 |
130 |
131 |
132 |
133 |
134 |
135 |
142 | mdi-twitter
143 | 結果を投稿
144 |
145 |
※Twitterに遷移します
(上記のボタンを押してもすぐには投稿されません)
146 |
147 |
148 |
149 |
150 |
158 | mdi-calendar
159 | 予定に追加
160 |
161 |
162 | スマートフォン内のログは14日間しか残りません。
163 | 上のボタンを押すとGoogleカレンダーに
164 | リマインドの予定を追加できます。
165 |
166 |
167 |
168 |
169 |
176 |
177 |
178 |
182 |
183 | もし新規陽性登録者と近くにいたことが疑われる場合は、
184 |
185 |
186 | 上記Hash値をコピーし、
187 | HASH値より陽性者と近くにいた日を検索するサイト(別サイト)
188 | または、
189 | 接触日シート別冊
190 | を使用して、
具体的な近くにいた時間(24時間単位)で特定することができます。(iOSのみ)
191 |
192 |
193 |
194 | made by @ktansai / github
195 |
196 |
197 |
198 |
199 |
--------------------------------------------------------------------------------
/docs/js/app.2588eb7e.js:
--------------------------------------------------------------------------------
1 | (function(t){function e(e){for(var n,r,i=e[0],l=e[1],c=e[2],v=0,d=[];v0?n("p",{staticClass:"text-caption",staticStyle:{color:"red"}},[n("span",{domProps:{innerHTML:t._s(t.explainText)}}),n("br"),t._v(" ログデータや結果に関する説明は、サイト上部の"),n("a",{attrs:{href:"#notes"},on:{click:t.showNotes}},[t._v("注意事項/詳細説明")]),t._v("をご覧ください。 ")]):t._e()])]),t.resultText.length>0?n("v-row",{staticClass:"justify-center my-8"},[n("div",[n("v-btn",{attrs:{rounded:"",color:"#1DA1F2",dark:"",target:"_blank",href:"https://twitter.com/intent/tweet?text=接触通知ログを解析した結果、%0a"+t.resultText+"%0a%0ahttps://cocoa-log-checker.com%0a&hashtags=COCOAログチェッカー"}},[n("v-icon",{attrs:{left:"",dark:""}},[t._v("mdi-twitter")]),t._v(" 結果を投稿 ")],1),n("p",{staticClass:"mt-4 text-caption"},[t._v("※Twitterに遷移します"),n("br"),t._v("(上記のボタンを押してもすぐには投稿されません)")])],1)]):t._e(),t.resultText.length>0?n("v-row",{staticClass:"justify-center mt-10"},[n("div",[n("v-btn",{attrs:{rounded:"",color:"gray",dark:"",target:"_blank",href:"https://calendar.google.com/calendar/render?action=TEMPLATE&text=[リマインド]:COCOAログチェッカー&details=COCOAログチェッカー%0D%0A%0D%0A保存の際は%0D%0A・予定の繰り返し設定%0D%0A・通知設定%0D%0Aを有効にするのをおすすめします&dates="+t.nextDate},on:{click:t.addCalendarLog}},[n("v-icon",{attrs:{left:"",dark:""}},[t._v("mdi-calendar")]),t._v(" 予定に追加 ")],1),n("p",{staticClass:"text-caption my-4"},[n("span",{staticClass:"d-inline-block"},[t._v("スマートフォン内のログは14日間しか残りません。")]),n("br"),n("span",{staticClass:"d-inline-block"},[t._v("上のボタンを押すとGoogleカレンダーに")]),n("span",{staticClass:"d-inline-block"},[t._v("リマインドの予定を追加できます。")])])],1)]):t._e(),n("v-row",[n("v-textarea",{staticClass:"my-4",attrs:{outlined:"","auto-grow":"",readonly:"",label:"ここに詳細な結果のデータが出ます",value:t.resultJsonText}})],1),n("v-col",{staticClass:"my-8",attrs:{cols:"12"}},[n("h2",{staticClass:"headline font-weight-bold mb-3"},[t._v(" もし新規陽性登録者と近くにいたことが疑われる場合は、 ")]),n("p",[t._v(" 上記Hash値をコピーし、 "),n("a",{attrs:{href:"https://cacaotest.sakura.ne.jp/",target:"_blank"}},[t._v("HASH値より陽性者と近くにいた日を検索するサイト(別サイト)")]),n("br"),t._v(" または、 "),n("a",{attrs:{href:"https://datastudio.google.com/u/0/reporting/069598a2-3f01-4b51-b023-cdb478992182",target:"_blank"}},[t._v("接触日シート別冊")]),t._v(" を使用して、"),n("br"),t._v("具体的な近くにいた時間(24時間単位)で特定することができます。(iOSのみ) ")])]),n("v-row",{staticClass:"mt-8 justify-center"},[n("p",[t._v("made by "),n("a",{attrs:{href:"https://twitter.com/ktansai"}},[t._v("@ktansai")]),t._v(" / "),n("a",{attrs:{href:"https://github.com/ktansai/COVID-19-ExposeChecker",target:"_blank"}},[t._v("github")])])])],1)},l=[],c=(a("ac1f"),a("5319"),a("99af"),a("159b"),a("a15b"),a("d81d"),n["a"].extend({name:"ExposeChecker",data:function(){return{os:"ios",resultJsonText:"",resultText:"",exposeJsonText:"",explainText:"",panel:[]}},computed:{nextDate:function(){var t=new Date,e=new Date(t.getTime()+6048e5).toISOString().replace(/-|:|T\d{2}:\d{2}:\d{2}\.\d{3}Z/g,"")+"T180000",a=new Date(t.getTime()+6048e5).toISOString().replace(/-|:|T\d{2}:\d{2}:\d{2}\.\d{3}Z/g,"")+"T190000",n="".concat(e,"/").concat(a);return n}},methods:{checkJson:function(){this.$gtag.event("checkJson");var t="本結果はCOCOA上の新規陽性登録者との接触検知のみが対象です。
無症状感染者やCOCOAの陽性登録をしていない感染者と近くにいた可能性はありますので、引き続き感染症対策を万全を期すことをおすすめします。";try{if("ios"===this.os){var e=JSON.parse(this.exposeJsonText),a=e.ExposureChecks,n=[];a.forEach((function(t){t.Files.forEach((function(t){0!==t.MatchCount&&(delete t.Timestamp,n.push(t))}))})),this.resultJsonText=n.map((function(t){return JSON.stringify(t,null,2)})).join("\n"),0===n.length?(this.resultText="新規陽性登録者が近くにいた記録はありませんでした。",this.explainText=t):this.resultText="".concat(n.length,"件の新規陽性登録者が近くにいた記録が確認されました。")}else if("android"===this.os){var s=JSON.parse(this.exposeJsonText),o=s.reduce((function(t,e){return 0!==e.matchesCount&&(delete e.timestamp,t.push(e)),t}),[]);0===o.length?(this.resultText="新規陽性登録者が近くにいた記録はありませんでした。",this.explainText=t):(this.resultText="".concat(o.length,"件の新規陽性登録者が近くにいた記録が確認されました。"),this.resultJsonText=o.map((function(t){return JSON.stringify(t,null,2)})).join("\n"))}}catch(r){alert("データフォーマットエラー")}},clearJson:function(){this.exposeJsonText=""},addCalendarLog:function(){this.$gtag.event("addCalendar")},showNotes:function(){this.panel=[0]},onFileChange:function(t){var e=this,a=t.target.files;if(!(a.length<=0)){var n=a[0],s=new FileReader;s.onload=function(){e.exposeJsonText=s.result,e.checkJson()},s.readAsText(n)}}}})),p=c,v=a("2877"),d=a("6544"),u=a.n(d),f=a("8336"),h=a("62ad"),_=a("a523"),b=a("cd55"),g=a("49e2"),x=a("c865"),m=a("0393"),C=a("132d"),k=a("adda"),O=a("a722"),w=a("67b6"),y=a("43a6"),T=a("0fd9"),A=a("a844"),S=Object(v["a"])(p,i,l,!1,null,null,null),V=S.exports;u()(S,{VBtn:f["a"],VCol:h["a"],VContainer:_["a"],VExpansionPanel:b["a"],VExpansionPanelContent:g["a"],VExpansionPanelHeader:x["a"],VExpansionPanels:m["a"],VIcon:C["a"],VImg:k["a"],VLayout:O["a"],VRadio:w["a"],VRadioGroup:y["a"],VRow:T["a"],VTextarea:A["a"]});var j={name:"App",components:{ExposeChecker:V},data:function(){return{dialog:!1}}},J=j,D=a("7496"),E=a("40dc"),P=a("b0af"),F=a("99d9"),I=a("169a"),N=a("ce7e"),M=a("f6c4"),H=a("2fa4"),B=Object(v["a"])(J,o,r,!1,null,null,null),G=B.exports;u()(B,{VApp:D["a"],VAppBar:E["a"],VBtn:f["a"],VCard:P["a"],VCardActions:F["a"],VCardText:F["b"],VCardTitle:F["c"],VCol:h["a"],VDialog:I["a"],VDivider:N["a"],VIcon:C["a"],VImg:k["a"],VMain:M["a"],VRow:T["a"],VSpacer:H["a"]});var R=a("f309");n["a"].use(R["a"]);var $=new R["a"]({breakpoint:{thresholds:{xs:355}}}),L=a("9483");Object(L["a"])("".concat("","service-worker.js"),{ready:function(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered:function(){console.log("Service worker has been registered.")},cached:function(){console.log("Content has been cached for offline use.")},updatefound:function(){console.log("New content is downloading.")},updated:function(){console.log("New content is available; please refresh.")},offline:function(){console.log("No internet connection found. App is running in offline mode.")},error:function(t){console.error("Error during service worker registration:",t)}}),n["a"].config.productionTip=!1,n["a"].use(s["a"],{config:{id:"G-S63S935HFP"}}),new n["a"]({vuetify:$,render:function(t){return t(G)}}).$mount("#app")},cf98:function(t,e,a){t.exports=a.p+"img/instruction-ios-01.e28c8dc6.png"}});
2 | //# sourceMappingURL=app.2588eb7e.js.map
--------------------------------------------------------------------------------
/docs/js/app.2588eb7e.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/images/cocoa-difference.png","webpack:///./src/assets/images/add-home-android.png","webpack:///./src/assets/images/instruction-android.png","webpack:///./src/assets/images/instruction-ios-02.png","webpack:///./src/assets/images/add-home-ios.png","webpack:///./src/assets/images/home-icon.png","webpack:///./src/App.vue?48f5","webpack:///./src/components/ExposeChecker.vue?2ece","webpack:///./src/components/ExposeChecker.vue","webpack:///./src/components/ExposeChecker.vue?e513","webpack:///./src/components/ExposeChecker.vue?a9ab","webpack:///./src/App.vue","webpack:///./src/App.vue?0ab4","webpack:///./src/App.vue?4195","webpack:///./src/plugins/vuetify.ts","webpack:///./src/service-worker.ts","webpack:///./src/main.ts","webpack:///./src/assets/images/instruction-ios-01.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","$vuetify","breakpoint","xs","_e","_v","staticClass","on","$event","dialog","model","callback","$$v","expression","staticRenderFns","showNotes","panel","staticStyle","os","exposeJsonText","onFileChange","clearJson","checkJson","_s","resultText","domProps","explainText","nextDate","addCalendarLog","resultJsonText","extend","computed","today","Date","nextStartDate","getTime","toISOString","replace","nextEndDate","methods","$gtag","event","explainTextZeroContact","exposeData","JSON","parse","exposeDataArray","ExposureChecks","matchedExposures","forEach","checkItem","Files","file","MatchCount","Timestamp","map","e","stringify","join","reduce","acc","exposure","matchesCount","timestamp","error","alert","files","target","reader","FileReader","onload","readAsText","component","VBtn","VCol","VContainer","VExpansionPanel","VExpansionPanelContent","VExpansionPanelHeader","VExpansionPanels","VIcon","VImg","VLayout","VRadio","VRadioGroup","VRow","VTextarea","components","ExposeChecker","VApp","VAppBar","VCard","VCardActions","VCardText","VCardTitle","VDialog","VDivider","VMain","VSpacer","use","thresholds","ready","console","log","registered","cached","updatefound","updated","offline","config","productionTip","id","vuetify","render","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,GAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,gECvJTW,EAAOD,QAAU,IAA0B,qC,uBCA3CC,EAAOD,QAAU,IAA0B,qC,uBCA3CC,EAAOD,QAAU,IAA0B,wC,uBCA3CC,EAAOD,QAAU,IAA0B,uC,qBCA3CC,EAAOD,QAAU,IAA0B,iC,qBCA3CC,EAAOD,QAAU,IAA0B,8B,6GCAvC,EAAS,WAAa,IAAI+B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACA,EAAG,YAAY,CAACE,MAAM,CAAC,IAAM,GAAG,MAAQ,wBAAwB,KAAO,KAAK,CAAGN,EAAIO,SAASC,WAAWC,GAAyCT,EAAIU,KAAzCN,EAAG,MAAM,CAACJ,EAAIW,GAAG,oBAA6BP,EAAG,YAAYA,EAAG,MAAM,CAACQ,YAAY,uBAAuB,CAACR,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,IAAIO,GAAG,CAAC,MAAQ,SAASC,GAAQd,EAAIe,QAAO,KAAQ,CAACX,EAAG,SAAS,CAACJ,EAAIW,GAAG,0BAA0BP,EAAG,OAAO,CAACJ,EAAIW,GAAG,eAAe,IAAI,IAAI,GAAGP,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQ,OAAOU,MAAM,CAAChC,MAAOgB,EAAU,OAAEiB,SAAS,SAAUC,GAAMlB,EAAIe,OAAOG,GAAKC,WAAW,WAAW,CAACf,EAAG,SAAS,CAACA,EAAG,eAAe,CAACQ,YAAY,qBAAqB,CAACZ,EAAIW,GAAG,cAAcP,EAAG,cAAc,CAACJ,EAAIW,GAAG,mBAAmBP,EAAG,IAAI,CAACJ,EAAIW,GAAG,cAAcX,EAAIW,GAAG,+BAA+BP,EAAG,MAAMJ,EAAIW,GAAG,uCAAuCP,EAAG,MAAMA,EAAG,MAAMA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,EAAQ,YAAwC,GAAGF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,EAAQ,YAA4C,IAAI,GAAGF,EAAG,IAAI,CAACQ,YAAY,eAAe,CAACZ,EAAIW,GAAG,wBAAwBP,EAAG,MAAMA,EAAG,QAAQA,EAAG,QAAQ,CAACQ,YAAY,OAAON,MAAM,CAAC,IAAM,EAAQ,YAAqC,GAAGF,EAAG,aAAaA,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIO,GAAG,CAAC,MAAQ,SAASC,GAAQd,EAAIe,QAAS,KAAS,CAACf,EAAIW,GAAG,YAAY,IAAI,IAAI,GAAGP,EAAG,SAAS,CAACA,EAAG,kBAAkB,IAAI,IAC7/CgB,EAAkB,GCDlB,EAAS,WAAa,IAAIpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACQ,YAAY,oBAAoB,CAACR,EAAG,QAAQ,CAACQ,YAAY,uBAAuB,CAACR,EAAG,MAAM,CAACA,EAAG,KAAK,CAACQ,YAAY,mCAAmC,CAACR,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,aAAaP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,aAAaP,EAAG,IAAI,CAACJ,EAAIW,GAAG,qBAAqBP,EAAG,QAAQ,CAACQ,YAAY,kBAAkB,CAACR,EAAG,MAAM,CAACA,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACR,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,8BAA8BP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,qBAAqBP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,oEAAoEP,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACR,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,SAASP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,UAAUO,GAAG,CAAC,MAAQb,EAAIqB,YAAY,CAACrB,EAAIW,GAAG,eAAeX,EAAIW,GAAG,UAAUP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,0BAA0BP,EAAG,QAAQ,CAACQ,YAAY,QAAQ,CAACR,EAAG,qBAAqB,CAACE,MAAM,CAAC,UAAY,GAAG,SAAW,IAAIU,MAAM,CAAChC,MAAOgB,EAAS,MAAEiB,SAAS,SAAUC,GAAMlB,EAAIsB,MAAMJ,GAAKC,WAAW,UAAU,CAACf,EAAG,oBAAoB,CAACE,MAAM,CAAC,GAAK,UAAU,CAACF,EAAG,2BAA2B,CAACJ,EAAIW,GAAG,eAAeP,EAAG,4BAA4B,CAACQ,YAAY,aAAa,CAACR,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIW,GAAG,sFAAsFP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,8FAA8FP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,yEAAyEP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,uFAAuFP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,uDAAuDP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,wGAAwG,OAAS,WAAW,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,SAASP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,4FAA4FP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,wGAAwG,OAAS,WAAW,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,SAASP,EAAG,QAAQA,EAAG,WAAW,CAACE,MAAM,CAAC,iBAAiB,GAAG,OAAO,KAAK,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,MAAM,YAAY,QAAQ,IAAM,EAAQ,YAA4C,GAAGF,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIW,GAAG,2DAA2DP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,oEAAoE,OAAS,WAAW,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,eAAeP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,8BAA8BP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,kCAAkC,OAAS,WAAW,CAACN,EAAIW,GAAG,WAAWX,EAAIW,GAAG,gCAAgCP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,2HAA2HP,EAAG,MAAMA,EAAG,MAAMJ,EAAIW,GAAG,qJAAqJP,EAAG,MAAMJ,EAAIW,GAAG,mDAAmDP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,0EAA0EP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,2EAA2EP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,+BAA+BP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,oDAAoD,OAAS,WAAW,CAACN,EAAIW,GAAG,YAAYX,EAAIW,GAAG,QAAQP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,gCAAgC,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,uDAAuDP,EAAG,MAAMA,EAAG,KAAK,CAACJ,EAAIW,GAAG,iBAAiBP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,oDAAoD,OAAS,WAAW,CAACN,EAAIW,GAAG,YAAYX,EAAIW,GAAG,+EAA+E,IAAI,GAAGP,EAAG,oBAAoB,CAACA,EAAG,2BAA2B,CAACJ,EAAIW,GAAG,cAAcP,EAAG,4BAA4B,CAACA,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACZ,EAAIW,GAAG,6BAA6BP,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,EAAQ,WAA6CF,EAAG,MAAMA,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACZ,EAAIW,GAAG,yBAAyBP,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,EAAQ,YAA8C,IAAI,GAAGF,EAAG,oBAAoB,CAACA,EAAG,2BAA2B,CAACJ,EAAIW,GAAG,kBAAkBP,EAAG,4BAA4B,CAACA,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACZ,EAAIW,GAAG,kDAAkDP,EAAG,MAAMJ,EAAIW,GAAG,qDAAqDP,EAAG,QAAQA,EAAG,IAAI,CAACQ,YAAY,YAAYW,YAAY,CAAC,MAAQ,QAAQ,CAACvB,EAAIW,GAAG,iFAAiFP,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,EAAQ,WAA8CF,EAAG,MAAMA,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACZ,EAAIW,GAAG,2EAA2EP,EAAG,MAAMJ,EAAIW,GAAG,6BAA6BP,EAAG,IAAI,CAACQ,YAAY,aAAa,CAACZ,EAAIW,GAAG,uBAAuBP,EAAG,MAAMJ,EAAIW,GAAG,2BAA2BP,EAAG,IAAI,CAACQ,YAAY,YAAYW,YAAY,CAAC,MAAQ,QAAQ,CAACvB,EAAIW,GAAG,mBAAmBP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,oDAAoD,OAAS,WAAW,CAACN,EAAIW,GAAG,YAAYX,EAAIW,GAAG,QAAQP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,gCAAgC,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,wBAAwB,IAAI,IAAI,IAAI,GAAGP,EAAG,QAAQ,CAACQ,YAAY,QAAQ,CAACR,EAAG,gBAAgB,CAACY,MAAM,CAAChC,MAAOgB,EAAM,GAAEiB,SAAS,SAAUC,GAAMlB,EAAIwB,GAAGN,GAAKC,WAAW,OAAO,CAACf,EAAG,UAAU,CAACd,IAAI,MAAMgB,MAAM,CAAC,MAAQ,MAAM,MAAQ,SAASF,EAAG,UAAU,CAACd,IAAI,UAAUgB,MAAM,CAAC,MAAQ,UAAU,MAAQ,cAAc,IAAI,GAAGF,EAAG,QAAQ,CAAa,QAAXJ,EAAIwB,GAAcpB,EAAG,aAAa,CAACE,MAAM,CAAC,SAAW,GAAG,MAAQ,wBAAwBU,MAAM,CAAChC,MAAOgB,EAAkB,eAAEiB,SAAS,SAAUC,GAAMlB,EAAIyB,eAAeP,GAAKC,WAAW,oBAAoBf,EAAG,MAAM,CAACA,EAAG,IAAI,CAACJ,EAAIW,GAAG,kDAAkDP,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,OAAO,OAAS,oBAAoBO,GAAG,CAAC,OAASb,EAAI0B,mBAAmB,GAAGtB,EAAG,IAAI,CAACQ,YAAY,gBAAgB,CAACR,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,0BAA0BP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,qCAAiD,QAAXX,EAAIwB,GAAcpB,EAAG,QAAQ,CAACQ,YAAY,wBAAwB,CAACR,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,QAAQ,CAACS,GAAG,CAAC,MAAQb,EAAI2B,YAAY,CAAC3B,EAAIW,GAAG,UAAU,GAAGP,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,WAAWO,GAAG,CAAC,MAAQb,EAAI4B,YAAY,CAAC5B,EAAIW,GAAG,aAAa,IAAI,GAAGX,EAAIU,KAAKN,EAAG,QAAQ,CAACQ,YAAY,kBAAkB,CAACR,EAAG,MAAM,CAACA,EAAG,IAAI,CAACQ,YAAY,SAAS,CAACR,EAAG,IAAI,CAACJ,EAAIW,GAAG,SAASX,EAAIW,GAAG,IAAIX,EAAI6B,GAAG7B,EAAI8B,aAAa1B,EAAG,QAASJ,EAAI8B,WAAWnF,OAAS,EAAGyD,EAAG,IAAI,CAACQ,YAAY,eAAeW,YAAY,CAAC,MAAQ,QAAQ,CAACnB,EAAG,OAAO,CAAC2B,SAAS,CAAC,UAAY/B,EAAI6B,GAAG7B,EAAIgC,gBAAgB5B,EAAG,MAAMJ,EAAIW,GAAG,2BAA2BP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,UAAUO,GAAG,CAAC,MAAQb,EAAIqB,YAAY,CAACrB,EAAIW,GAAG,eAAeX,EAAIW,GAAG,eAAeX,EAAIU,SAAUV,EAAI8B,WAAWnF,OAAS,EAAGyD,EAAG,QAAQ,CAACQ,YAAY,uBAAuB,CAACR,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,GAAG,MAAQ,UAAU,KAAO,GAAG,OAAS,SAAS,KAAO,0DAA6DN,EAAI8B,WAAjE,iEAAmJ,CAAC1B,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIW,GAAG,iBAAiBX,EAAIW,GAAG,YAAY,GAAGP,EAAG,IAAI,CAACQ,YAAY,qBAAqB,CAACZ,EAAIW,GAAG,kBAAkBP,EAAG,MAAMJ,EAAIW,GAAG,+BAA+B,KAAKX,EAAIU,KAAMV,EAAI8B,WAAWnF,OAAS,EAAGyD,EAAG,QAAQ,CAACQ,YAAY,wBAAwB,CAACR,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,GAAG,MAAQ,OAAO,KAAO,GAAG,OAAS,SAAS,KAAQ,iOAAmON,EAAIiC,UAAWpB,GAAG,CAAC,MAAQb,EAAIkC,iBAAiB,CAAC9B,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIW,GAAG,kBAAkBX,EAAIW,GAAG,YAAY,GAAGP,EAAG,IAAI,CAACQ,YAAY,qBAAqB,CAACR,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,8BAA8BP,EAAG,MAAMA,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,2BAA2BP,EAAG,OAAO,CAACQ,YAAY,kBAAkB,CAACZ,EAAIW,GAAG,yBAAyB,KAAKX,EAAIU,KAAKN,EAAG,QAAQ,CAACA,EAAG,aAAa,CAACQ,YAAY,OAAON,MAAM,CAAC,SAAW,GAAG,YAAY,GAAG,SAAW,GAAG,MAAQ,mBAAmB,MAAQN,EAAImC,mBAAmB,GAAG/B,EAAG,QAAQ,CAACQ,YAAY,OAAON,MAAM,CAAC,KAAO,OAAO,CAACF,EAAG,KAAK,CAACQ,YAAY,kCAAkC,CAACZ,EAAIW,GAAG,kCAAkCP,EAAG,IAAI,CAACJ,EAAIW,GAAG,mBAAmBP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,kCAAkC,OAAS,WAAW,CAACN,EAAIW,GAAG,qCAAqCP,EAAG,MAAMJ,EAAIW,GAAG,UAAUP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,mFAAmF,OAAS,WAAW,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,WAAWP,EAAG,MAAMJ,EAAIW,GAAG,gDAAgDP,EAAG,QAAQ,CAACQ,YAAY,uBAAuB,CAACR,EAAG,IAAI,CAACJ,EAAIW,GAAG,YAAYP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,gCAAgC,CAACN,EAAIW,GAAG,cAAcX,EAAIW,GAAG,OAAOP,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,oDAAoD,OAAS,WAAW,CAACN,EAAIW,GAAG,iBAAiB,IAC79S,EAAkB,GCwMP,G,4DAAA,OAAIyB,OAAO,CACxB7D,KAAM,gBACNpC,KAFwB,WAGtB,MAAO,CACLqF,GAAI,MACJW,eAAgB,GAChBL,WAAY,GACZL,eAAgB,GAChBO,YAAa,GACbV,MAAO,KAGXe,SAAU,CACRJ,SADQ,WAEN,IAAMK,EAAQ,IAAIC,KACZC,EAAgB,IAAID,KAAKD,EAAMG,UAAY,QAAyBC,cAAcC,QAAQ,kCAAmC,IAAM,UACnIC,EAAc,IAAIL,KAAKD,EAAMG,UAAY,QAAyBC,cAAcC,QAAQ,kCAAmC,IAAM,UACjInF,EAAS,GAAH,OAAMgF,EAAN,YAAuBI,GACnC,OAAOpF,IAGXqF,QAAS,CACPjB,UADO,WAEL3B,KAAK6C,MAAMC,MAAM,aAEjB,IAAMC,EAAwB,4GAE9B,IACE,GAAgB,QAAZ/C,KAAKuB,GAAc,CACrB,IAAMyB,EAAaC,KAAKC,MAAOlD,KAAKwB,gBAC9B2B,EAAkBH,EAAWI,eAE/BC,EAAmB,GACvBF,EAAgBG,SAAQ,SAAAC,GACtBA,EAAUC,MAAMF,SAAQ,SAAAG,GACC,IAApBA,EAAKC,oBACCD,EAAKE,UACZN,EAAiBrG,KAAKyG,UAI5BzD,KAAKkC,eAAiBmB,EAAiBO,KAAI,SAAAC,GAAC,OAAIZ,KAAKa,UAAUD,EAAE,KAAK,MAAIE,KAAK,MAC/C,IAA5BV,EAAiB3G,QACnBsD,KAAK6B,WAAa,4BAClB7B,KAAK+B,YAAcgB,GAEnB/C,KAAK6B,WAAL,UAAqBwB,EAAiB3G,OAAtC,mCAEG,GAAgB,YAAZsD,KAAKuB,GAAkB,CAChC,IAAM,EAAa0B,KAAKC,MAAMlD,KAAKwB,gBAC7B,EAAmB,EAAWwC,QAAO,SAACC,EAAKC,GAK/C,OAJ8B,IAA1BA,EAASC,sBACJD,EAASE,UAChBH,EAAIjH,KAAKkH,IAEJD,IACN,IAE6B,IAA5B,EAAiBvH,QACnBsD,KAAK6B,WAAa,4BAClB7B,KAAK+B,YAAcgB,IAEnB/C,KAAK6B,WAAL,UAAqB,EAAiBnF,OAAtC,8BACAsD,KAAKkC,eAAiB,EAAiB0B,KAAI,SAAAC,GAAC,OAAIZ,KAAKa,UAAUD,EAAE,KAAK,MAAIE,KAAK,QAGnF,MAAOM,GACPC,MAAM,kBAGV5C,UAjDO,WAkDL1B,KAAKwB,eAAiB,IAExBS,eApDO,WAqDLjC,KAAK6C,MAAMC,MAAM,gBAEnB1B,UAvDO,WAwDLpB,KAAKqB,MAAQ,CAAC,IAEhBI,aA1DO,SA0DMqB,GAAK,WACRyB,EAAUzB,EAAM0B,OAAhBD,MACR,KAAIA,EAAM7H,QAAU,GAApB,CAEA,IAAM+G,EAAOc,EAAM,GACbE,EAAS,IAAIC,WACnBD,EAAOE,OAAS,WACd,EAAKnD,eAAiBiD,EAAOlH,OAC7B,EAAKoE,aAEP8C,EAAOG,WAAWnB,SClSgX,I,yMCOpYoB,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAkBhC,IAAkBA,EAAW,CAACC,OAAA,KAAKC,OAAA,KAAKC,aAAA,KAAWC,kBAAA,KAAgBC,yBAAA,KAAuBC,wBAAA,KAAsBC,mBAAA,KAAiBC,QAAA,KAAMC,OAAA,KAAKC,UAAA,KAAQC,SAAA,KAAOC,cAAA,KAAYC,OAAA,KAAKC,YAAA,OCwC7J,OACbrH,KAAM,MACNsH,WAAY,CACVC,iBAEF3J,KAAM,iBAAO,CACX4E,QAAQ,KClFgW,I,gGCOxW,EAAY,eACd,EACA,EACAK,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAmBhC,IAAkB,EAAW,CAAC2E,OAAA,KAAKC,UAAA,KAAQjB,OAAA,KAAKkB,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,WAAA,OAAWpB,OAAA,KAAKqB,UAAA,KAAQC,WAAA,KAAShB,QAAA,KAAMC,OAAA,KAAKgB,QAAA,KAAMZ,OAAA,KAAKa,UAAA,O,gBClCpI,OAAIC,IAAI,QAEO,UAAI,OAAQ,CACvBjG,WAAY,CACVkG,WAAY,CACVjG,GAAI,Q,YCHV,eAAS,GAAD,OAAI,GAAJ,qBAA6C,CACnDkG,MADmD,WAEjDC,QAAQC,IACN,uGAIJC,WAPmD,WAQjDF,QAAQC,IAAI,wCAEdE,OAVmD,WAWjDH,QAAQC,IAAI,6CAEdG,YAbmD,WAcjDJ,QAAQC,IAAI,gCAEdI,QAhBmD,WAiBjDL,QAAQC,IAAI,8CAEdK,QAnBmD,WAoBjDN,QAAQC,IAAI,kEAEdvC,MAtBmD,SAsB5C,GACLsC,QAAQtC,MAAM,4CAA6C,MCrBjE,OAAI6C,OAAOC,eAAgB,EAE3B,OAAIX,IAAI,OAAS,CACfU,OAAQ,CACNE,GAAI,kBAIR,IAAI,OAAI,CACNC,UACAC,OAAQ,SAAAC,GAAC,OAAIA,EAAEC,MACdC,OAAO,S,qBClBVxJ,EAAOD,QAAU,IAA0B","file":"js/app.2588eb7e.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/cocoa-difference.07961364.png\";","module.exports = __webpack_public_path__ + \"img/add-home-android.daecad53.png\";","module.exports = __webpack_public_path__ + \"img/instruction-android.1b55644d.png\";","module.exports = __webpack_public_path__ + \"img/instruction-ios-02.00203555.png\";","module.exports = __webpack_public_path__ + \"img/add-home-ios.d42cef19.png\";","module.exports = __webpack_public_path__ + \"img/home-icon.8d8fef55.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"color\":\"deep-orange lighten-2\",\"dark\":\"\"}},[(!_vm.$vuetify.breakpoint.xs)?_c('div',[_vm._v(\" COCOAログチェッカー \")]):_vm._e(),_c('v-spacer'),_c('div',{staticClass:\"d-flex align-center\"},[_c('v-btn',{attrs:{\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.dialog=true}}},[_c('v-icon',[_vm._v(\"mdi-plus-box-outline\")]),_c('span',[_vm._v(\"ホーム画面に追加\")])],1)],1)],1),_c('v-dialog',{attrs:{\"width\":\"500\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"text-h5 lighten-2\"},[_vm._v(\"ホーム画面に追加\")]),_c('v-card-text',[_vm._v(\" ブラウザの下記ボタンを押して\"),_c('b',[_vm._v(\"ホーム画面に追加\")]),_vm._v(\"を押すと、ホーム画面上にショートカットを作成できます。\"),_c('br'),_vm._v(\" ショートカットを作成し、定期的にログを解析することをおすすめします。\"),_c('br'),_c('br'),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-img',{attrs:{\"src\":require(\"@/assets/images/add-home-ios.png\")}})],1),_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-img',{attrs:{\"src\":require(\"@/assets/images/add-home-android.png\")}})],1)],1),_c('p',{staticClass:\"text-center\"},[_vm._v(\" (左:iOS / 右:Android)\"),_c('br'),_c('br')]),_c('v-img',{staticClass:\"mx-8\",attrs:{\"src\":require(\"@/assets/images/home-icon.png\")}})],1),_c('v-divider'),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){_vm.dialog = false}}},[_vm._v(\" 閉じる \")])],1)],1)],1),_c('v-main',[_c('ExposeChecker')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"text-center px-8\"},[_c('v-row',{staticClass:\"mt-8 justify-center\"},[_c('div',[_c('h1',{staticClass:\"display-2 font-weight-bold my-2\"},[_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"COCOAログ\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"チェッカー\")])]),_c('p',[_vm._v(\"接触通知ログ解析ツール\")])])]),_c('v-row',{staticClass:\"justify-center\"},[_c('div',[_c('p',{staticClass:\"my-8 mx-2\"},[_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"iOS/Androidの設定アプリから閲覧できる\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"接触通知のログデータを解析し、\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"約2週間の間にCOCOAの新規陽性登録者が付近にいた可能性がある記録を表示します。(Bluetoothの電波が届く範囲)\")])]),_c('p',{staticClass:\"my-8 mx-2\"},[_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"使用の際は\"),_c('a',{attrs:{\"href\":\"#notes\"},on:{\"click\":_vm.showNotes}},[_vm._v(\"注意事項/詳細説明\")]),_vm._v(\"を読み、\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"理解した上でご利用ください。\")])])])]),_c('v-row',{staticClass:\"my-8\"},[_c('v-expansion-panels',{attrs:{\"accordion\":\"\",\"multiple\":\"\"},model:{value:(_vm.panel),callback:function ($$v) {_vm.panel=$$v},expression:\"panel\"}},[_c('v-expansion-panel',{attrs:{\"id\":\"notes\"}},[_c('v-expansion-panel-header',[_vm._v(\"注意事項/詳細説明\")]),_c('v-expansion-panel-content',{staticClass:\"text-left\"},[_c('ul',[_c('li',[_vm._v(\"iOS/Androidで収集されている COVID-19 接触のログデータの中で、COCOAの新規陽性登録者の端末の近くにいた記録があるかを確認するツールです。\")]),_c('br'),_c('li',[_vm._v(\"具体的には、接触ログデータの中のMatchCount(iOS)/matchesCount(Android)の項目が0ではない値(接触が疑われるデータ)を抽出するだけのツールです\")]),_c('br'),_c('li',[_vm._v(\"クライアントサイドのJavaScriptで解析を行っているため、ここでペーストしたログデータが外部に送信されるようなことはありません。\")]),_c('br'),_c('li',[_vm._v(\"このログデータで分かることは、COCOAの新規陽性登録者が付近(Bluetoothの電波が届く範囲)にいたことのみで、必ずしも濃厚接触に該当する訳ではありません。\")]),_c('br'),_c('li',[_vm._v(\"BluetoothがOFFに設定されている間は、OSが接触検知を行うことができないためご注意ください(\"),_c('a',{attrs:{\"href\":\"https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/covid19_qa_kanrenkigyou_00009.html#Q6-3\",\"target\":\"_blank\"}},[_vm._v(\"厚生労働省FAQ\")]),_vm._v(\"より)\")]),_c('br'),_c('li',[_vm._v(\"本家COCOAのアプリで通知が来る条件は「1m以内かつ15分以上」ですが、本ツールはその基準よりも広い「OSが検知した新規陽性登録者との接触」のログすべてを対象としています。(\"),_c('a',{attrs:{\"href\":\"https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/covid19_qa_kanrenkigyou_00009.html#Q4-7\",\"target\":\"_blank\"}},[_vm._v(\"厚生労働省FAQ\")]),_vm._v(\"より)\")]),_c('br')]),_c('v-layout',{attrs:{\"justify-center\":\"\",\"my-4\":\"\"}},[_c('v-img',{attrs:{\"width\":\"80%\",\"max-width\":\"400px\",\"src\":require(\"@/assets/images/cocoa-difference.png\")}})],1),_c('ul',[_c('li',[_vm._v(\"本ツールの利用には、新型コロナウイルス接触確認アプリCOCOAのインストールが必要です。COCOAに関しては、\"),_c('a',{attrs:{\"href\":\"https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/cocoa_00138.html\",\"target\":\"_blank\"}},[_vm._v(\"厚生労働省のHP\")]),_vm._v(\"をご確認ください。\")]),_c('br'),_c('li',[_vm._v(\"接触があった日時は、Hash値を用いて、サイト下部の\"),_c('a',{attrs:{\"href\":\"https://cacaotest.sakura.ne.jp/\",\"target\":\"_blank\"}},[_vm._v(\"外部ページ\")]),_vm._v(\"にて24時間の範囲で絞り込み可能です。(iOSのみ)\")]),_c('br'),_c('li',[_vm._v(\"接触通知のログデータ内部のTimestampは、接触のあった日時ではなく、COCOAが新規陽性登録者のリストをダウンロードし、スマホ内で照合を行った日時のようです。つまりこのTimestampより前に接触の可能性があることのみ分かります。\"),_c('br'),_c('br'),_vm._v(\" 例えば、COCOAユーザーAさんとの接触検知が9月1日、Aさんの発症が9月4日(潜伏期間3日間)、Aさんの新規陽性登録が完了したのが9月7日、だったとすると、スマホ内の接触ログデータのTimestampは9月7日以降になりますが、実際の接触はそれより以前(この例だと9月1日)になります。\"),_c('br'),_vm._v(\" 潜伏期間や、登録までの期間は場合によるので、この方法では正確な日時は特定ができません。 \")]),_c('br'),_c('li',[_vm._v(\"現在、このTimestampが誤解を招くため、結果表示から意図的に削除させて頂いています。表示方法などを検討し将来的に表示する予定です。\")]),_c('br'),_c('li',[_vm._v(\"本ツールは無償で使用可能ですが、この解析ツールを用いて起きた問題などについて、製作者は一切の責任を負いかねます。自己責任でご使用ください。\")]),_c('br'),_c('li',[_vm._v(\"不具合報告、改善要望、間違いの指摘、PR、質問などは、\"),_c('a',{attrs:{\"href\":\"https://github.com/ktansai/COVID-19-ExposeChecker\",\"target\":\"_blank\"}},[_vm._v(\"github\")]),_vm._v(\"または、\"),_c('a',{attrs:{\"href\":\"https://twitter.com/ktansai\"}},[_vm._v(\"@ktansai\")]),_vm._v(\"までおねがいします。また、個人で開発しているため、全てに対応できるとは限りません。ご了承ください。\")]),_c('br'),_c('li',[_vm._v(\"COCOAログチェッカーは\"),_c('a',{attrs:{\"href\":\"https://github.com/ktansai/COVID-19-ExposeChecker\",\"target\":\"_blank\"}},[_vm._v(\"github\")]),_vm._v(\"上にソースコードを公開しており、多くの方に提案/指摘をいただきながら作成しています。ご協力いただいている全ての方に多大な感謝を申し上げます。\")])])],1)],1),_c('v-expansion-panel',[_c('v-expansion-panel-header',[_vm._v(\"使い方(iOS)\")]),_c('v-expansion-panel-content',[_c('p',{staticClass:\"text-left\"},[_vm._v(\"Step1. iOSの接触通知ログをコピーする\")]),_c('v-img',{attrs:{\"src\":require(\"@/assets/images/instruction-ios-01.png\")}}),_c('br'),_c('p',{staticClass:\"text-left\"},[_vm._v(\"Step2. 下記入力枠にペーストする\")]),_c('v-img',{attrs:{\"src\":require(\"@/assets/images/instruction-ios-02.png\")}})],1)],1),_c('v-expansion-panel',[_c('v-expansion-panel-header',[_vm._v(\"使い方(Android)\")]),_c('v-expansion-panel-content',[_c('p',{staticClass:\"text-left\"},[_vm._v(\" Step1. Androidの接触通知ログをGoogleDriveまたはローカルに保存する\"),_c('br'),_vm._v(\" (保存方法/アプリなどの候補が表示されたら、GoogleDriveまたは、ローカルに保存をする)\"),_c('br')]),_c('p',{staticClass:\"text-left\",staticStyle:{\"color\":\"red\"}},[_vm._v(\"接触通知ログは、個人を特定することが難しい秘匿性の高いデータですが、スマホ外部に保存することに抵抗がある方は、ローカルに保存することをおすすめします。\")]),_c('v-img',{attrs:{\"src\":require(\"@/assets/images/instruction-android.png\")}}),_c('br'),_c('p',{staticClass:\"text-left\"},[_vm._v(\" Step2. GoogleDriveアプリまたは、ローカルのファイルから保存したログデータを開き、 [すべて選択]を押し、[コピー]を押す。\"),_c('br'),_vm._v(\" (近日中にスクリーンショットを掲載します) \")]),_c('p',{staticClass:\"text-left\"},[_vm._v(\"Step3. 下記入力枠にペーストする\"),_c('br'),_vm._v(\"(近日中にスクリーンショットを掲載します)\")]),_c('p',{staticClass:\"text-left\",staticStyle:{\"color\":\"red\"}},[_vm._v(\" より簡単な方法をご存じの方は\"),_c('a',{attrs:{\"href\":\"https://github.com/ktansai/COVID-19-ExposeChecker\",\"target\":\"_blank\"}},[_vm._v(\"github\")]),_vm._v(\"または、\"),_c('a',{attrs:{\"href\":\"https://twitter.com/ktansai\"}},[_vm._v(\"@ktansai\")]),_vm._v(\"まで教えていただけると幸いです。 \")])],1)],1)],1)],1),_c('v-row',{staticClass:\"my-4\"},[_c('v-radio-group',{model:{value:(_vm.os),callback:function ($$v) {_vm.os=$$v},expression:\"os\"}},[_c('v-radio',{key:\"ios\",attrs:{\"label\":\"iOS\",\"value\":\"ios\"}}),_c('v-radio',{key:\"android\",attrs:{\"label\":\"Android\",\"value\":\"android\"}})],1)],1),_c('v-row',[(_vm.os === 'ios')?_c('v-textarea',{attrs:{\"outlined\":\"\",\"label\":\"ここにログファイルをペーストしてください\"},model:{value:(_vm.exposeJsonText),callback:function ($$v) {_vm.exposeJsonText=$$v},expression:\"exposeJsonText\"}}):_c('div',[_c('p',[_vm._v(\"接触通知のログjsonファイルをアップロードしてください。(サーバーには送信はしません)\")]),_c('input',{attrs:{\"type\":\"file\",\"accept\":\"application/json\"},on:{\"change\":_vm.onFileChange}})])],1),_c('p',{staticClass:\"text-caption\"},[_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"本ツールは、スマホ内で処理しているため、\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"ここでペーストしたデータが外部に流出することはありません。\")])]),(_vm.os === 'ios')?_c('v-row',{staticClass:\"mb-10 justify-center\"},[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-btn',{on:{\"click\":_vm.clearJson}},[_vm._v(\"クリア\")])],1),_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":_vm.checkJson}},[_vm._v(\"チェックする\")])],1)],1):_vm._e(),_c('v-row',{staticClass:\"justify-center\"},[_c('div',[_c('p',{staticClass:\"my-10\"},[_c('b',[_vm._v(\"結果:\")]),_vm._v(\" \"+_vm._s(_vm.resultText)),_c('br')]),(_vm.resultText.length > 0)?_c('p',{staticClass:\"text-caption\",staticStyle:{\"color\":\"red\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.explainText)}}),_c('br'),_vm._v(\" ログデータや結果に関する説明は、サイト上部の\"),_c('a',{attrs:{\"href\":\"#notes\"},on:{\"click\":_vm.showNotes}},[_vm._v(\"注意事項/詳細説明\")]),_vm._v(\"をご覧ください。 \")]):_vm._e()])]),(_vm.resultText.length > 0)?_c('v-row',{staticClass:\"justify-center my-8\"},[_c('div',[_c('v-btn',{attrs:{\"rounded\":\"\",\"color\":\"#1DA1F2\",\"dark\":\"\",\"target\":\"_blank\",\"href\":'https://twitter.com/intent/tweet?text='+'接触通知ログを解析した結果、%0a'+_vm.resultText+'%0a%0a'+'https://cocoa-log-checker.com%0a'+'&hashtags=COCOAログチェッカー'}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-twitter\")]),_vm._v(\" 結果を投稿 \")],1),_c('p',{staticClass:\"mt-4 text-caption\"},[_vm._v(\"※Twitterに遷移します\"),_c('br'),_vm._v(\"(上記のボタンを押してもすぐには投稿されません)\")])],1)]):_vm._e(),(_vm.resultText.length > 0)?_c('v-row',{staticClass:\"justify-center mt-10\"},[_c('div',[_c('v-btn',{attrs:{\"rounded\":\"\",\"color\":\"gray\",\"dark\":\"\",\"target\":\"_blank\",\"href\":(\"https://calendar.google.com/calendar/render?action=TEMPLATE&text=[リマインド]:COCOAログチェッカー&details=COCOAログチェッカー%0D%0A%0D%0A保存の際は%0D%0A・予定の繰り返し設定%0D%0A・通知設定%0D%0Aを有効にするのをおすすめします&dates=\" + _vm.nextDate)},on:{\"click\":_vm.addCalendarLog}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-calendar\")]),_vm._v(\" 予定に追加 \")],1),_c('p',{staticClass:\"text-caption my-4\"},[_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"スマートフォン内のログは14日間しか残りません。\")]),_c('br'),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"上のボタンを押すとGoogleカレンダーに\")]),_c('span',{staticClass:\"d-inline-block\"},[_vm._v(\"リマインドの予定を追加できます。\")])])],1)]):_vm._e(),_c('v-row',[_c('v-textarea',{staticClass:\"my-4\",attrs:{\"outlined\":\"\",\"auto-grow\":\"\",\"readonly\":\"\",\"label\":\"ここに詳細な結果のデータが出ます\",\"value\":_vm.resultJsonText}})],1),_c('v-col',{staticClass:\"my-8\",attrs:{\"cols\":\"12\"}},[_c('h2',{staticClass:\"headline font-weight-bold mb-3\"},[_vm._v(\" もし新規陽性登録者と近くにいたことが疑われる場合は、 \")]),_c('p',[_vm._v(\" 上記Hash値をコピーし、 \"),_c('a',{attrs:{\"href\":\"https://cacaotest.sakura.ne.jp/\",\"target\":\"_blank\"}},[_vm._v(\"HASH値より陽性者と近くにいた日を検索するサイト(別サイト)\")]),_c('br'),_vm._v(\" または、 \"),_c('a',{attrs:{\"href\":\"https://datastudio.google.com/u/0/reporting/069598a2-3f01-4b51-b023-cdb478992182\",\"target\":\"_blank\"}},[_vm._v(\"接触日シート別冊\")]),_vm._v(\" を使用して、\"),_c('br'),_vm._v(\"具体的な近くにいた時間(24時間単位)で特定することができます。(iOSのみ) \")])]),_c('v-row',{staticClass:\"mt-8 justify-center\"},[_c('p',[_vm._v(\"made by \"),_c('a',{attrs:{\"href\":\"https://twitter.com/ktansai\"}},[_vm._v(\"@ktansai\")]),_vm._v(\" / \"),_c('a',{attrs:{\"href\":\"https://github.com/ktansai/COVID-19-ExposeChecker\",\"target\":\"_blank\"}},[_vm._v(\"github\")])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue';\n\nexport default Vue.extend({\n name: 'ExposeChecker',\n data() {\n return {\n os: 'ios',\n resultJsonText: '',\n resultText: '',\n exposeJsonText: '',\n explainText: '',\n panel: [],\n }\n },\n computed: {\n nextDate() {\n const today = new Date();\n const nextStartDate = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().replace(/-|:|T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z/g, '') + 'T180000';\n const nextEndDate = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().replace(/-|:|T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z/g, '') + 'T190000';\n const result = `${nextStartDate}/${nextEndDate}`;\n return result;\n },\n },\n methods: {\n checkJson() {\n this.$gtag.event('checkJson');\n\n const explainTextZeroContact= '本結果はCOCOA上の新規陽性登録者との接触検知のみが対象です。
無症状感染者やCOCOAの陽性登録をしていない感染者と近くにいた可能性はありますので、引き続き感染症対策を万全を期すことをおすすめします。';\n\n try {\n if (this.os === 'ios') {\n const exposeData = JSON.parse( this.exposeJsonText);\n const exposeDataArray = exposeData.ExposureChecks;\n\n let matchedExposures = [];\n exposeDataArray.forEach(checkItem => {\n checkItem.Files.forEach(file => {\n if(file.MatchCount !== 0){\n delete file.Timestamp;\n matchedExposures.push(file);\n }\n });\n });\n this.resultJsonText = matchedExposures.map(e => JSON.stringify(e,null,2)).join('\\n');\n if (matchedExposures.length === 0){\n this.resultText = '新規陽性登録者が近くにいた記録はありませんでした。';\n this.explainText = explainTextZeroContact;\n } else {\n this.resultText = `${matchedExposures.length}件の新規陽性登録者が近くにいた記録が確認されました。`;\n }\n } else if (this.os === 'android') {\n const exposeData = JSON.parse(this.exposeJsonText);\n const matchedExposures = exposeData.reduce((acc, exposure) => {\n if (exposure.matchesCount !== 0) {\n delete exposure.timestamp;\n acc.push(exposure);\n }\n return acc;\n }, []);\n\n if (matchedExposures.length === 0) {\n this.resultText = '新規陽性登録者が近くにいた記録はありませんでした。';\n this.explainText = explainTextZeroContact;\n } else {\n this.resultText = `${matchedExposures.length}件の新規陽性登録者が近くにいた記録が確認されました。`;\n this.resultJsonText = matchedExposures.map(e => JSON.stringify(e,null,2)).join('\\n');\n }\n }\n } catch (error) {\n alert('データフォーマットエラー');\n }\n },\n clearJson() {\n this.exposeJsonText = '';\n },\n addCalendarLog() {\n this.$gtag.event('addCalendar');\n },\n showNotes() {\n this.panel = [0];\n },\n onFileChange(event) {\n const { files } = event.target;\n if (files.length <= 0) return;\n\n const file = files[0];\n const reader = new FileReader();\n reader.onload = () => {\n this.exposeJsonText = reader.result as string;\n this.checkJson();\n }\n reader.readAsText(file);\n }\n }\n});\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExposeChecker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExposeChecker.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ExposeChecker.vue?vue&type=template&id=3052f9c4&\"\nimport script from \"./ExposeChecker.vue?vue&type=script&lang=ts&\"\nexport * from \"./ExposeChecker.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VExpansionPanel } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelContent } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelHeader } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanels } from 'vuetify/lib/components/VExpansionPanel';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\ninstallComponents(component, {VBtn,VCol,VContainer,VExpansionPanel,VExpansionPanelContent,VExpansionPanelHeader,VExpansionPanels,VIcon,VImg,VLayout,VRadio,VRadioGroup,VRow,VTextarea})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport ExposeChecker from './components/ExposeChecker.vue';\n\nexport default {\n name: 'App',\n components: {\n ExposeChecker,\n },\n data: () => ({\n dialog: false,\n }),\n};\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=15c10365&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VApp,VAppBar,VBtn,VCard,VCardActions,VCardText,VCardTitle,VCol,VDialog,VDivider,VIcon,VImg,VMain,VRow,VSpacer})\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n breakpoint: {\n thresholds: {\n xs: 355,\n },\n },\n })\n ","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker';\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n );\n },\n registered () {\n console.log('Service worker has been registered.');\n },\n cached () {\n console.log('Content has been cached for offline use.');\n },\n updatefound () {\n console.log('New content is downloading.');\n },\n updated () {\n console.log('New content is available; please refresh.');\n },\n offline () {\n console.log('No internet connection found. App is running in offline mode.');\n },\n error (error) {\n console.error('Error during service worker registration:', error);\n }\n });\n}\n","import Vue from 'vue';\nimport VueGtag from 'vue-gtag';\n\nimport App from './App.vue';\nimport vuetify from './plugins/vuetify';\nimport './service-worker';\n\nVue.config.productionTip = false;\n\nVue.use(VueGtag, {\n config: {\n id: 'G-S63S935HFP',\n }\n});\n\nnew Vue({\n vuetify,\n render: h => h(App),\n}).$mount('#app');\n","module.exports = __webpack_public_path__ + \"img/instruction-ios-01.e28c8dc6.png\";"],"sourceRoot":""}
--------------------------------------------------------------------------------