Jinsu Park

Add: front build

......@@ -42,8 +42,10 @@ frontend를 예시로하겠습니다. backend의 경우 `frontend` 를 `server`
```bash
# docker 설치 후
$ cd frontend
$ docker build . -t umi0410/khuwitch-frontend
$ docker push umi0410/khuwitch-frontend
# frontend의 경우에만 SPA build
$ npm run build
$ docker build . -t umi0410/khuwitch-frontend &&\
docker push umi0410/khuwitch-frontend
```
### 배포
......@@ -53,8 +55,13 @@ $ docker push umi0410/khuwitch-frontend
# 서버 접속 후 docker 설치 후 docker-compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ curl http://khuhub.khu.ac.kr/2016101168/khuwitch/raw/queueingmp3/docker-compose.yml -o /tmp/docker-compose.yml
$ sudo docker-compose pull && sudo docker-compose /tmp/docker-compose.yml up -d # or docker-compose up -d
$ curl http://khuhub.khu.ac.kr/khuwitch/khuwitch/raw/master/docker-compose.yml -o docker-compose.yml
# 실제 배포
$ docker-compose down && \
docker rmi -f umi0410/khuwitch-frontend umi0410/khuwitch-server && \
docker-compose pull && \
docker-compose up # or docker-compose up -d
```
### 개발을 위해 실행하기
......
version: "3.8"
services:
react:
image: umi0410/khuwitch-react
frontend:
image: umi0410/khuwitch-frontend
ports:
- "8000:8000"
express:
image: umi0410/khuwitch-express
- "8000:80"
server:
image: umi0410/khuwitch-server
ports:
- "3303:3303"
\ No newline at end of file
......
# docker build . -t umi0410/khuwitch-react
# docker push umi0410/khuwitch-react
FROM node:13
COPY node_modules node_modules
COPY package.json package.json
RUN npm i
COPY . .
ENV PORT 8000
ENTRYPOINT ["npm"]
CMD ["start"]
\ No newline at end of file
# FROM node:13
# COPY node_modules node_modules
# COPY package.json package.json
# RUN npm i
# COPY . .
# ENV PORT 8000
# ENTRYPOINT ["npm"]
# CMD ["start"]
FROM nginx
COPY build /usr/share/nginx/html
......
{
"files": {
"main.css": "/static/css/main.3ac34ffc.chunk.css",
"main.js": "/static/js/main.25f9a19b.chunk.js",
"main.js.map": "/static/js/main.25f9a19b.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.ca9ba9f9.js",
"runtime-main.js.map": "/static/js/runtime-main.ca9ba9f9.js.map",
"static/js/2.2708567f.chunk.js": "/static/js/2.2708567f.chunk.js",
"static/js/2.2708567f.chunk.js.map": "/static/js/2.2708567f.chunk.js.map",
"static/js/3.699475c0.chunk.js": "/static/js/3.699475c0.chunk.js",
"static/js/3.699475c0.chunk.js.map": "/static/js/3.699475c0.chunk.js.map",
"index.html": "/index.html",
"static/css/main.3ac34ffc.chunk.css.map": "/static/css/main.3ac34ffc.chunk.css.map",
"static/js/2.2708567f.chunk.js.LICENSE.txt": "/static/js/2.2708567f.chunk.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.ca9ba9f9.js",
"static/js/2.2708567f.chunk.js",
"static/css/main.3ac34ffc.chunk.css",
"static/js/main.25f9a19b.chunk.js"
]
}
\ No newline at end of file
No preview for this file type
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Khuwitch</title><link href="/static/css/main.3ac34ffc.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"699475c0"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpkhuwitch=this.webpackJsonpkhuwitch||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([])</script><script src="/static/js/2.2708567f.chunk.js"></script><script src="/static/js/main.25f9a19b.chunk.js"></script></body></html>
\ No newline at end of file
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{background-color:#282c34;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.login{display:grid;background-color:#0e0e10;height:100vh;place-items:center}.login>img{height:300px}.login>a{color:#fff;padding:30px;border-radius:100px;text-decoration:none;font-size:30px;font-weight:700;background-color:#9147ff}.body{display:flex;justify-content:center;background-color:#14141e}.channel__list{flex-grow:1;flex-direction:column;flex:0.3 1;height:100vh;color:#fff}.channel__list,.channel__list__title{display:flex;min-width:500px;background-color:#0e0e0e;box-sizing:border-box}.channel__list__title{padding:25px;width:30vw;font-size:20px;font-weight:700;position:fixed}.channel__list>ul{list-style:none;overflow:auto;padding-top:50px}.channel__list>ul>li>hr{border:2px solid #282828}.channel{flex-direction:row;height:100px;background-color:#0e0e0e}.channel,.channel__url{display:flex;align-items:center}.channel__url{flex-grow:1;text-decoration:none;font-size:14px;color:#fff;box-sizing:border-box;padding-top:20px;padding-bottom:20px}.channel__box{display:flex;flex-basis:80%;flex-direction:row;justify-content:space-between}.channel__thumbnail{background-color:#fff}.channel__icon,.channel__thumbnail{height:25px;width:25px;border-radius:70%;overflow:hidden;margin-right:30px}.channel__info{flex-basis:70%;margin-right:20px}.channel__name{align-content:center;font-size:16px}.channel__game{font-size:12px;color:grey}.channel__view{text-align:right}.pause__icon,.play__icon{margin-left:10px;margin-right:10px}
/*# sourceMappingURL=main.3ac34ffc.chunk.css.map */
\ No newline at end of file
{"version":3,"sources":["webpack://src/index.css","webpack://src/App.css","webpack://src/Login.css","webpack://src/Body.css","webpack://src/Channel.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF,CCZA,KACE,iBACF,CAEA,UACE,aAAc,CACd,mBACF,CAEA,8CACE,UACE,2CACF,CACF,CAEA,YACE,wBAAyB,CACzB,gBAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BAA6B,CAC7B,UACF,CAEA,UACE,aACF,CAEA,yBACE,GACE,sBACF,CACA,GACE,uBACF,CACF,CCrCA,OACI,YAAa,CACb,wBAAyB,CACzB,YAAa,CACb,kBACJ,CAEA,WACI,YACJ,CAEA,SACI,UAAY,CACZ,YAAa,CACb,mBAAoB,CACpB,oBAAqB,CACrB,cAAe,CACf,eAAiB,CACjB,wBACJ,CCnBA,MACI,YAAa,CACb,sBAAuB,CACvB,wBACJ,CCJA,eAEI,WAAY,CACZ,qBAAsB,CACtB,UAAS,CAET,YAAa,CACb,UAGJ,CAEA,qCAXI,YAAa,CAIb,eAAgB,CAGhB,wBAAyB,CACzB,qBAaJ,CAVA,sBAEI,YAAa,CACb,UAAW,CAGX,cAAe,CACf,eAAiB,CACjB,cAEJ,CAEA,kBACI,eAAgB,CAChB,aAAc,CACd,gBACJ,CAEA,wBACI,wBACJ,CAEA,SAGI,kBAAmB,CACnB,YAAa,CACb,wBACJ,CAEA,uBAPI,YAAa,CACb,kBAgBJ,CAVA,cAGI,WAAY,CACZ,oBAAqB,CACrB,cAAe,CACf,UAAW,CACX,qBAAsB,CACtB,gBAAiB,CACjB,mBACJ,CAEA,cACI,YAAa,CACb,cAAe,CACf,kBAAmB,CACnB,6BACJ,CAEA,oBAMI,qBACJ,CAEA,mCARI,WAAY,CACZ,UAAW,CACX,iBAAkB,CAClB,eAAgB,CAChB,iBAUJ,CAEA,eACI,cAAe,CACf,iBACJ,CAEA,eACI,oBAAqB,CACrB,cACJ,CAEA,eACI,cAAe,CACf,UACJ,CAEA,eACI,gBACJ,CAOA,yBACI,gBAAiB,CACjB,iBACJ","file":"main.3ac34ffc.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n",".App {\n text-align: center;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n",".login {\n display: grid;\n background-color: #0e0e10;\n height: 100vh;\n place-items: center;\n}\n\n.login > img {\n height: 300px;\n}\n\n.login > a {\n color: white;\n padding: 30px;\n border-radius: 100px;\n text-decoration: none;\n font-size: 30px;\n font-weight: bold;\n background-color: #9147ff;\n}",".body {\n display: flex;\n justify-content: center;\n background-color: #14141e;\n}",".channel__list {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n flex: 0.3;\n min-width: 500px;\n height: 100vh;\n color: white;\n background-color: #0e0e0e;\n box-sizing: border-box;\n}\n\n.channel__list__title {\n display: flex;\n padding: 25px;\n width: 30vw;\n min-width: 500px;\n background-color: #0e0e0e;\n font-size: 20px;\n font-weight: bold;\n position: fixed;\n box-sizing: border-box;\n}\n\n.channel__list > ul {\n list-style: none;\n overflow: auto;\n padding-top: 50px;\n}\n\n.channel__list > ul > li > hr {\n border: 2px solid #282828;\n}\n\n.channel {\n display: flex;\n align-items: center;\n flex-direction: row;\n height: 100px;\n background-color: #0e0e0e;\n}\n\n.channel__url {\n display: flex;\n align-items: center;\n flex-grow: 1;\n text-decoration: none;\n font-size: 14px;\n color:white;\n box-sizing: border-box;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n\n.channel__box {\n display: flex;\n flex-basis: 80%;\n flex-direction: row;\n justify-content: space-between;\n}\n\n.channel__thumbnail {\n height: 25px;\n width: 25px;\n border-radius: 70%;\n overflow: hidden;\n margin-right: 30px;\n background-color: white;\n}\n\n.channel__icon {\n height: 25px;\n width: 25px;\n border-radius: 70%;\n overflow: hidden;\n margin-right: 30px;\n}\n\n.channel__info {\n flex-basis: 70%;\n margin-right: 20px;\n}\n\n.channel__name {\n align-content: center;\n font-size: 16px;\n}\n\n.channel__game {\n font-size: 12px;\n color: gray;\n}\n\n.channel__view {\n text-align: right;\n}\n\n.play__icon {\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.pause__icon {\n margin-left: 10px;\n margin-right: 10px;\n}\n\n\n\n\n"]}
\ No newline at end of file
This diff could not be displayed because it is too large.
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/*! https://mths.be/punycode v1.4.1 by @mathias */
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
/**
* A better abstraction over CSS.
*
* @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present
* @website https://github.com/cssinjs/jss
* @license MIT
*/
/** @license React v0.20.1
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.1
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.1
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.1
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
This diff could not be displayed because it is too large.
(this.webpackJsonpkhuwitch=this.webpackJsonpkhuwitch||[]).push([[3],{542:function(t,n,e){"use strict";e.r(n),e.d(n,"getCLS",(function(){return v})),e.d(n,"getFCP",(function(){return h})),e.d(n,"getFID",(function(){return g})),e.d(n,"getLCP",(function(){return y})),e.d(n,"getTTFB",(function(){return F}));var i,a,r=function(){return"".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)},o=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:r(),isFinal:!1}},u=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},c=!1,s=!1,d=function(t){c=!t.persisted},f=function(){addEventListener("pagehide",d),addEventListener("beforeunload",(function(){}))},p=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s||(f(),s=!0),addEventListener("visibilitychange",(function(n){var e=n.timeStamp;"hidden"===document.visibilityState&&t({timeStamp:e,isUnloading:c})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||"hidden"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},v=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=o("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=u("layout-shift",a);r&&(n=l(t,i,r,e),p((function(t){var e=t.isUnloading;r.takeRecords().map(a),e&&(i.isFinal=!0),n()})))},m=function(){return void 0===i&&(i="hidden"===document.visibilityState?0:1/0,p((function(t){var n=t.timeStamp;return i=n}),!0)),{get timeStamp(){return i}}},h=function(t){var n,e=o("FCP"),i=m(),a=u("paint",(function(t){"first-contentful-paint"===t.name&&t.startTime<i.timeStamp&&(e.value=t.startTime,e.isFinal=!0,e.entries.push(t),n())}));a&&(n=l(t,e,a))},g=function(t){var n=o("FID"),e=m(),i=function(t){t.startTime<e.timeStamp&&(n.value=t.processingStart-t.startTime,n.entries.push(t),n.isFinal=!0,r())},a=u("first-input",i),r=l(t,n,a);a?p((function(){a.takeRecords().map(i),a.disconnect()}),!0):window.perfMetrics&&window.perfMetrics.onFirstInputDelay&&window.perfMetrics.onFirstInputDelay((function(t,i){i.timeStamp<e.timeStamp&&(n.value=t,n.isFinal=!0,n.entries=[{entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+t}],r())}))},S=function(){return a||(a=new Promise((function(t){return["scroll","keydown","pointerdown"].map((function(n){addEventListener(n,t,{once:!0,passive:!0,capture:!0})}))}))),a},y=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=o("LCP"),a=m(),r=function(t){var e=t.startTime;e<a.timeStamp?(i.value=e,i.entries.push(t)):i.isFinal=!0,n()},c=u("largest-contentful-paint",r);if(c){n=l(t,i,c,e);var s=function(){i.isFinal||(c.takeRecords().map(r),i.isFinal=!0,n())};S().then(s),p(s,!0)}},F=function(t){var n,e=o("TTFB");n=function(){try{var n=performance.getEntriesByType("navigation")[0]||function(){var t=performance.timing,n={entryType:"navigation",startTime:0};for(var e in t)"navigationStart"!==e&&"toJSON"!==e&&(n[e]=Math.max(t[e]-t.navigationStart,0));return n}();e.value=e.delta=n.responseStart,e.entries=[n],e.isFinal=!0,t(e)}catch(t){}},"complete"===document.readyState?setTimeout(n,0):addEventListener("pageshow",n)}}}]);
//# sourceMappingURL=3.699475c0.chunk.js.map
\ No newline at end of file
{"version":3,"sources":["../node_modules/web-vitals/dist/web-vitals.es5.min.js"],"names":["v","t","n","e","concat","Date","now","Math","floor","random","i","arguments","length","name","value","delta","entries","id","isFinal","a","PerformanceObserver","supportedEntryTypes","includes","getEntries","map","observe","type","buffered","r","o","s","persisted","u","addEventListener","c","timeStamp","document","visibilityState","isUnloading","capture","once","l","disconnect","p","hadRecentInput","push","takeRecords","d","startTime","f","processingStart","window","perfMetrics","onFirstInputDelay","entryType","target","cancelable","m","Promise","passive","g","then","h","performance","getEntriesByType","timing","max","navigationStart","responseStart","readyState","setTimeout"],"mappings":"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","file":"static/js/3.699475c0.chunk.js","sourcesContent":["var t,n,e=function(){return\"\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)},i=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:e(),isFinal:!1}},a=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},r=!1,o=!1,s=function(t){r=!t.persisted},u=function(){addEventListener(\"pagehide\",s),addEventListener(\"beforeunload\",(function(){}))},c=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o||(u(),o=!0),addEventListener(\"visibilitychange\",(function(n){var e=n.timeStamp;\"hidden\"===document.visibilityState&&t({timeStamp:e,isUnloading:r})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||\"hidden\"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},p=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=i(\"CLS\",0),o=function(t){t.hadRecentInput||(r.value+=t.value,r.entries.push(t),n())},s=a(\"layout-shift\",o);s&&(n=l(t,r,s,e),c((function(t){var e=t.isUnloading;s.takeRecords().map(o),e&&(r.isFinal=!0),n()})))},d=function(){return void 0===t&&(t=\"hidden\"===document.visibilityState?0:1/0,c((function(n){var e=n.timeStamp;return t=e}),!0)),{get timeStamp(){return t}}},v=function(t){var n,e=i(\"FCP\"),r=d(),o=a(\"paint\",(function(t){\"first-contentful-paint\"===t.name&&t.startTime<r.timeStamp&&(e.value=t.startTime,e.isFinal=!0,e.entries.push(t),n())}));o&&(n=l(t,e,o))},f=function(t){var n=i(\"FID\"),e=d(),r=function(t){t.startTime<e.timeStamp&&(n.value=t.processingStart-t.startTime,n.entries.push(t),n.isFinal=!0,s())},o=a(\"first-input\",r),s=l(t,n,o);o?c((function(){o.takeRecords().map(r),o.disconnect()}),!0):window.perfMetrics&&window.perfMetrics.onFirstInputDelay&&window.perfMetrics.onFirstInputDelay((function(t,i){i.timeStamp<e.timeStamp&&(n.value=t,n.isFinal=!0,n.entries=[{entryType:\"first-input\",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+t}],s())}))},m=function(){return n||(n=new Promise((function(t){return[\"scroll\",\"keydown\",\"pointerdown\"].map((function(n){addEventListener(n,t,{once:!0,passive:!0,capture:!0})}))}))),n},g=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=i(\"LCP\"),o=d(),s=function(t){var e=t.startTime;e<o.timeStamp?(r.value=e,r.entries.push(t)):r.isFinal=!0,n()},u=a(\"largest-contentful-paint\",s);if(u){n=l(t,r,u,e);var p=function(){r.isFinal||(u.takeRecords().map(s),r.isFinal=!0,n())};m().then(p),c(p,!0)}},h=function(t){var n,e=i(\"TTFB\");n=function(){try{var n=performance.getEntriesByType(\"navigation\")[0]||function(){var t=performance.timing,n={entryType:\"navigation\",startTime:0};for(var e in t)\"navigationStart\"!==e&&\"toJSON\"!==e&&(n[e]=Math.max(t[e]-t.navigationStart,0));return n}();e.value=e.delta=n.responseStart,e.entries=[n],e.isFinal=!0,t(e)}catch(t){}},\"complete\"===document.readyState?setTimeout(n,0):addEventListener(\"pageshow\",n)};export{p as getCLS,v as getFCP,f as getFID,g as getLCP,h as getTTFB};\n"],"sourceRoot":""}
\ No newline at end of file
(this.webpackJsonpkhuwitch=this.webpackJsonpkhuwitch||[]).push([[0],{40:function(e,n){},531:function(e,n,t){"use strict";t.r(n);var a=t(3),i=t(2),c=t.n(i),s=t(78),l=t.n(s);t(95),t(96),t(97);t(98);var o=t(79),h=t(80),m=t(87),r=t(86),u=(t(99),t(82)),w=t.n(u),d=t(85),g=t.n(d),v=t(84),p=t.n(v),j=t(81),b=t.n(j),f=t(15),_=t.n(f);_.a.config.region="ap-northeast-2",_.a.config.credentials=new _.a.CognitoIdentityCredentials({IdentityPoolId:"ap-northeast-2:03db97c9-a857-45f3-be6e-3cf84d6f619b"});var x=new _.a.Polly({signatureVersion:"v4",region:"ap-northeast-2"}),O=[],y=new Audio;function k(e){var n={Text:e,OutputFormat:"mp3",VoiceId:"Seoyeon"};new _.a.Polly.Presigner(n,x).getSynthesizeSpeechUrl(n,(function(e,n){e||O.push(n)}))}console.log("\ud14c\uc2a4\ud2b8\uc6a9 TTS \ub370\uc774\ud130\ub97c \uc8fc\uc785\ud569\ub2c8\ub2e4."),k("\uc804\uc5d0 data hazards\uc5d0\uc11c 3\uac00\uc9c0 data-dependence\ub97c \ubc30\uc6e0\ub2e4. mips\uc778 \uacbd\uc6b0\uc5d0\ub294 in-order\uc774\ub77c True data dependency \ubb38\uc81c\ubc16\uc5d0 \uc548\uc0dd\uacbc\uc5c8\ub2e4\n\n\uadfc\ub370 out-of-order \uad00\uc810\uc5d0\uc11c\ub294 3\uac1c\uc758 \uba85\ub839\uc5b4\uac00 \ub3d9\uc2dc\uc5d0 fetch\ub418\ub294 \uacbd\uc6b0\ub97c \uc0dd\uac01\ud574\ubcf4\uc790. \n\n\ub9cc\uc57d 1, 3 line \uc21c\uc11c \ubc14\ub00c\uba74 \ub2f9\uc5f0\ud788 \uacb0\uacfc\uac00 \uc774\uc0c1\ud574\uc9c4\ub2e4. \uc804\uc5d0 \uace0\ub824\ud558\uc9c0 \ubabb\ud588\ub358 output dependency \uc640 anti dependency \uace0\ub824\ud574\uc918\uc57c\ud55c\ub2e4. "),k("\ubcf5\uc7a1\ud55c \ube0c\ub79c\uce58"),k("\ube75\uc0c1 \uc544\uc8fc\uba38\ub2c8\ub294 \ub9d0\uc500\ud558\uc168\ub2e4."),k("\ub2c8\uac00\uac00\ub77c \ud558\uc640\uc774");var P={enableAudio:function(){setInterval((function(){if(y.paused){var e=O.shift();e&&(console.log(e),y.setAttribute("src",e),y.play())}}),500)},enqueueTTS:k};P.enableAudio();var N=b.a.connect("http://localhost:3303");N.on("connect",(function(e){N.emit("joinRoom","umi0410","\uc9c4\uc218\ubd07")})),N.on("chat message",(function(e,n){console.log(n),console.log("got message"),P.enqueueTTS(n)}));function T(e){var n=e.channel;return Object(a.jsxs)("div",{className:"channel",children:[Object(a.jsxs)("a",{href:n.url,className:"channel__url",children:[n.thumbnail&&Object(a.jsx)("img",{className:"channel__thumbnail",src:n.thumbnail,alt:""}),!n.thumbnail&&Object(a.jsx)(w.a,{className:"channel__icon"}),Object(a.jsxs)("div",{className:"channel__box",children:[Object(a.jsxs)("div",{className:"channel__info",children:[Object(a.jsx)("div",{className:"channel__name",children:n.name}),Object(a.jsx)("div",{className:"channel__game",children:n.game})]}),Object(a.jsx)("div",{className:"channel__view",children:n.view})]})]}),n.isPlay&&Object(a.jsx)(p.a,{className:"pause__icon",onClick:e.onClick}),!n.isPlay&&Object(a.jsx)(g.a,{className:"play__icon",onClick:e.onClick})]})}var S=function(e){Object(m.a)(t,e);var n=Object(r.a)(t);function t(e){var a;Object(o.a)(this,t);return(a=n.call(this,e)).state={channels:[{name:"umi0410 \uc9c4\uc218",view:123124124,game:"game2",url:"https://www.twitch.tv/umi0410"},{name:"name1",view:999,game:"game1",url:"https://www.twitch.tv",thumbnail:"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg"},{name:"name2",view:123124124,game:"game2",url:"https://www.twitch.tv"},{name:"name1",view:999,game:"game1",url:"https://www.twitch.tv",thumbnail:"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg"},{name:"name2",view:123124124,game:"game2",url:"https://www.twitch.tv"},{name:"name1",view:999,game:"game1",url:"https://www.twitch.tv",thumbnail:"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg"},{name:"name2",view:123124124,game:"game2",url:"https://www.twitch.tv"},{name:"name1",view:999,game:"game1",url:"https://www.twitch.tv",thumbnail:"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg"},{name:"name2",view:123124124,game:"game2",url:"https://www.twitch.tv"},{name:"name1",view:999,game:"game1",url:"https://www.twitch.tv",thumbnail:"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg"},{name:"name2",view:123124124,game:"game2",url:"https://www.twitch.tv"}],xisPlaying:null},a}return Object(h.a)(t,[{key:"changeState",value:function(e,n){var t=this.state.channels;!0===e.isPlay?(t[n].isPlay=!1,this.setState({channels:t,xisPlaying:null})):(null!==this.state.xisPlaying?(t[this.state.xisPlaying].isPlay=!1,t[n].isPlay=!0):t[n].isPlay=!0,this.setState({channels:t,xisPlaying:n}))}},{key:"render",value:function(){var e=this;return Object(a.jsxs)("div",{className:"channel__list",children:[Object(a.jsx)("div",{className:"channel__list__title",children:" CHANNEL LIST"}),Object(a.jsx)("ul",{children:this.state.channels.map((function(n,t){return Object(a.jsxs)("li",{children:[Object(a.jsx)(T,{channel:n,onClick:function(){return e.changeState(n,t)}}),Object(a.jsx)("hr",{})]},t)}))})]})}}]),t}(c.a.Component);var C=function(){return Object(a.jsx)("div",{className:"body",children:Object(a.jsx)(S,{})})};var I=function(){return Object(a.jsxs)("div",{className:"app",children:[!1,Object(a.jsx)(C,{})]})},A=function(e){e&&e instanceof Function&&t.e(3).then(t.bind(null,542)).then((function(n){var t=n.getCLS,a=n.getFID,i=n.getFCP,c=n.getLCP,s=n.getTTFB;t(e),a(e),i(e),c(e),s(e)}))};l.a.render(Object(a.jsx)(c.a.StrictMode,{children:Object(a.jsx)(I,{})}),document.getElementById("root")),A()},95:function(e,n,t){},96:function(e,n,t){},97:function(e,n,t){},98:function(e,n,t){},99:function(e,n,t){}},[[531,1,2]]]);
//# sourceMappingURL=main.25f9a19b.chunk.js.map
\ No newline at end of file
{"version":3,"sources":["Login.js","tts.js","Channel.js","Body.js","App.js","reportWebVitals.js","index.js"],"names":["Login","AWS","config","region","credentials","CognitoIdentityCredentials","IdentityPoolId","polly","Polly","signatureVersion","audioQueue","audio","Audio","enqueueTTS","text","params","Presigner","getSynthesizeSpeechUrl","error","url","push","console","log","enableAudio","setInterval","paused","audioFile","shift","setAttribute","play","tts","socket","io","connect","on","event","emit","name","msg","Channel","props","channel","className","href","thumbnail","src","alt","game","view","isPlay","onClick","ChannelList","state","channels","xisPlaying","index","this","setState","map","changeState","React","Component","Body","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.25f9a19b.chunk.js","sourcesContent":["import React from \"react\";\nimport \"./Login.css\";\n\nfunction Login(){ \n const OAuthUrl = `https://id.twitch.tv/oauth2/authorize?response_type=code&approval_prompt=auto&redirect_uri=http://localhost:3303/join&client_id=2d1gvcqyiyrk180qvnkec2fl23sv1o`; // oauth 인증용 url\n return (\n <div className=\"login\">\n <img \n src=\"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"\n alt=\"\"\n />\n <a href={OAuthUrl}>Login to Twitch</a>\n </div>\n );\n}\n\nexport default Login;","import AWS from 'aws-sdk'\n// Polly를 사용하기 위한 자격증명을 설정한다.\nAWS.config.region = 'ap-northeast-2'; \nAWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: 'ap-northeast-2:03db97c9-a857-45f3-be6e-3cf84d6f619b'});\nconst polly = new AWS.Polly({\n signatureVersion: 'v4',\n region: 'ap-northeast-2',\n});\n\nconst audioQueue = []\n// test data\n// const audioQueue = [\"https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3\", \"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3\", \"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3\"]\n\nconst audio = new Audio()\n\n// queue에서 작업(재생할 내용)을 0.5초마다 폴링하는 방식\nfunction enableAudio(){\n setInterval(()=>{\n // 앞선 tts 재생이 종료된 경우에만 새 tts를 실행\n if( !audio.paused){ return;}\n\n let audioFile = audioQueue.shift()\n // 재생할 게 있으면 재생\n if (audioFile){\n console.log(audioFile)\n audio.setAttribute(\"src\", audioFile)\n audio.play()\n }\n }, 500)\n}\n\nfunction enqueueTTS(text){\n let params = {\n 'Text': text,\n 'OutputFormat': 'mp3',\n 'VoiceId': 'Seoyeon'\n };\n let tts = new AWS.Polly.Presigner(params, polly)\n\n // tts로 변환한 음성 파일을 얻는다.\n tts.getSynthesizeSpeechUrl(params, function(error, url) {\n if (error) {\n } else {\n audioQueue.push(url)\n }\n })\n}\n\nconsole.log(\"테스트용 TTS 데이터를 주입합니다.\")\nenqueueTTS(`전에 data hazards에서 3가지 data-dependence를 배웠다. mips인 경우에는 in-order이라 True data dependency 문제밖에 안생겼었다\n\n근데 out-of-order 관점에서는 3개의 명령어가 동시에 fetch되는 경우를 생각해보자. \n\n만약 1, 3 line 순서 바뀌면 당연히 결과가 이상해진다. 전에 고려하지 못했던 output dependency 와 anti dependency 고려해줘야한다. `)\nenqueueTTS(\"복잡한 브랜치\")\nenqueueTTS(\"빵상 아주머니는 말씀하셨다.\")\nenqueueTTS(\"니가가라 하와이\")\n\nexport default {\n enableAudio,\n enqueueTTS, \n}\n","import React from \"react\";\nimport \"./Channel.css\";\nimport \"@material-ui/icons\"\nimport PersonIcon from \"@material-ui/icons/Person\";\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport PauseIcon from '@material-ui/icons/Pause';\nimport { WatchOutlined } from \"@material-ui/icons\";\nimport io from 'socket.io-client'\nimport tts from './tts';\n\n// audioQueue에서 하나씩 뽑아서 재생한다.\ntts.enableAudio()\n\nconst socket = io.connect(\"http://localhost:3303\")\nsocket.on(\"connect\", event=>{\n // 테스트용으로 umi0410에게 입장.\n // 다른 거 아무거나 채널이름을 넣으면 되겠지만, 그렇게 하고싶으면 백엔드에서 인자설정을 해줘야함.\n socket.emit(\"joinRoom\", 'umi0410', '진수봇')\n})\n\n// 말해야할 메시지가 왔을 때. 이건 따로 Component와 묶지 않아도 알아서 실행됩니다.\nsocket.on('chat message', (name, msg)=>{\n console.log(msg)\n console.log(\"got message\")\n //tts를 audio로 변경해 audioQueue에 집어넣는다.\n tts.enqueueTTS(msg)\n})\n\n// 해당 채널을 재생하고자할 때 실행시켜주세요.\nconst listen = (channelName)=>{\n socket.emit(\"joinRoom\", channelName, \"dummy name\") // name이 뭔지 대연이도 잘 모름.\n}\n\n// 해당 채널을 재생 안하도록 할 때 실행시켜주세요.\nconst quit = (channelName)=>{\n socket.emit(\"leaveRoom\". channelName, \"dummy name\") // name이 뭔지 대연이도 잘 모름.\n}\n\nexport function Channel(props) {\n const channel = props.channel;\n\n return (\n <div className=\"channel\">\n <a href={channel.url} className=\"channel__url\">\n {channel.thumbnail && <img className=\"channel__thumbnail\" src={channel.thumbnail} alt=\"\"></img>}\n {!channel.thumbnail && <PersonIcon className=\"channel__icon\"/>}\n <div className=\"channel__box\">\n <div className=\"channel__info\">\n <div className=\"channel__name\">{channel.name}</div>\n <div className=\"channel__game\">{channel.game}</div>\n </div>\n <div className=\"channel__view\">{channel.view}</div>\n </div>\n </a>\n {channel.isPlay && <PauseIcon className=\"pause__icon\" onClick={props.onClick} />}\n {!channel.isPlay && <PlayArrowIcon className=\"play__icon\" onClick={props.onClick} />}\n </div>\n );\n}\n\nexport class ChannelList extends React.Component {\n constructor(props) {\n super(props);\n \n // data for test\n const test = [\n {\"name\": \"umi0410 진수\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv/umi0410\"},\n {\"name\": \"name1\", \"view\": 999, \"game\": \"game1\" ,\"url\": \"https://www.twitch.tv\", \"thumbnail\": \"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"},\n {\"name\": \"name2\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv\"},\n {\"name\": \"name1\", \"view\": 999, \"game\": \"game1\" ,\"url\": \"https://www.twitch.tv\", \"thumbnail\": \"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"},\n {\"name\": \"name2\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv\"},\n {\"name\": \"name1\", \"view\": 999, \"game\": \"game1\" ,\"url\": \"https://www.twitch.tv\", \"thumbnail\": \"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"},\n {\"name\": \"name2\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv\"},\n {\"name\": \"name1\", \"view\": 999, \"game\": \"game1\" ,\"url\": \"https://www.twitch.tv\", \"thumbnail\": \"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"},\n {\"name\": \"name2\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv\"},\n {\"name\": \"name1\", \"view\": 999, \"game\": \"game1\" ,\"url\": \"https://www.twitch.tv\", \"thumbnail\": \"https://upload.wikimedia.org/wikipedia/commons/2/26/Twitch_logo.svg\"},\n {\"name\": \"name2\", \"view\": 123124124, \"game\": \"game2\" , \"url\": \"https://www.twitch.tv\"},\n \n ]\n\n this.state = {\n channels: test,\n xisPlaying: null,\n }\n }\n\n changeState(channel, index){\n const channels = this.state.channels;\n // 버튼을 누른 채널이 재생중일때\n if (channel.isPlay === true) {\n channels[index].isPlay = false;\n this.setState({\n channels: channels,\n xisPlaying: null,\n });\n }\n\n // 버튼을 누른 채널이 재생중이 아닐 때\n else {\n // xisPlaying이 null이 아닐 때\n if (this.state.xisPlaying !== null) {\n // 기존에 재생되던 채널의 isPlay를 false로, 클릭 이벤트가 발생한 채널의 isPlay를 true로 변경\n channels[this.state.xisPlaying].isPlay = false;\n channels[index].isPlay = true;\n }\n \n // xisPlaying이 null일 때\n else {\n channels[index].isPlay = true;\n }\n \n this.setState({\n channels: channels,\n xisPlaying: index,\n });\n }\n }\n\n render() {\n return (\n <div className=\"channel__list\">\n <div className=\"channel__list__title\"> CHANNEL LIST</div>\n <ul>\n {this.state.channels.map((channel, index) => (\n <li key={index}>\n <Channel \n channel={channel}\n onClick={ () => this.changeState(channel, index)}\n />\n <hr />\n </li>\n ))}\n </ul>\n </div>\n \n );\n }\n}","import React from \"react\";\nimport \"./Body.css\";\nimport {ChannelList} from \"./Channel.js\"\n\nfunction Body(){\n return (\n <div className=\"body\">\n <ChannelList />\n </div>\n );\n}\n\nexport default Body;","import './App.css';\nimport Login from \"./Login\";\nimport Body from \"./Body\";\n\nfunction App() {\n // let accessToken = null;\n let accessToken = 1;\n\n return (\n <div className=\"app\">\n {!accessToken && <Login />}\n {accessToken && <Body />}\n </div>\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}
\ No newline at end of file
!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"699475c0"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpkhuwitch=this.webpackJsonpkhuwitch||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([]);
//# sourceMappingURL=runtime-main.ca9ba9f9.js.map
\ No newline at end of file
{"version":3,"sources":["../webpack/bootstrap"],"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","1","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.ca9ba9f9.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\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"3\":\"699475c0\"}[chunkId] + \".chunk.js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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 \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonpkhuwitch\"] = this[\"webpackJsonpkhuwitch\"] || [];\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// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
\ No newline at end of file