frp/assets/frps/static/js/app.bb942a48.js.map
2020-12-03 20:23:43 +08:00

1 line
97 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7e02","webpack:///./src/components/Overview.vue?e1d0","webpack:///./src/App.vue?bb67","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue?bff9","webpack:///./src/components/Overview.vue?51be","webpack:///./src/utils/chart.js","webpack:///src/components/Overview.vue","webpack:///./src/components/Overview.vue?8e3f","webpack:///./src/components/Overview.vue?fd59","webpack:///./src/components/ProxiesTcp.vue?d4b7","webpack:///./src/components/Traffic.vue?4feb","webpack:///src/components/Traffic.vue","webpack:///./src/components/Traffic.vue?39ca","webpack:///./src/components/Traffic.vue","webpack:///./src/utils/proxy.js","webpack:///src/components/ProxiesTcp.vue","webpack:///./src/components/ProxiesTcp.vue?16ff","webpack:///./src/components/ProxiesTcp.vue","webpack:///./src/components/ProxiesUdp.vue?a4ae","webpack:///src/components/ProxiesUdp.vue","webpack:///./src/components/ProxiesUdp.vue?94b0","webpack:///./src/components/ProxiesUdp.vue","webpack:///./src/components/ProxiesHttp.vue?344c","webpack:///src/components/ProxiesHttp.vue","webpack:///./src/components/ProxiesHttp.vue?dfc7","webpack:///./src/components/ProxiesHttp.vue","webpack:///./src/components/ProxiesHttps.vue?2e93","webpack:///src/components/ProxiesHttps.vue","webpack:///./src/components/ProxiesHttps.vue?8d2a","webpack:///./src/components/ProxiesHttps.vue","webpack:///./src/components/ProxiesStcp.vue?f03e","webpack:///src/components/ProxiesStcp.vue","webpack:///./src/components/ProxiesStcp.vue?5258","webpack:///./src/components/ProxiesStcp.vue","webpack:///./src/router/index.js","webpack:///./src/utils/fetch.js","webpack:///./src/store/index.js","webpack:///./src/main.js"],"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","staticClass","_v","on","handleSelect","slot","_e","staticRenderFns","computed","serverInfo","$store","state","methods","open","component","_s","version","bind_port","bind_udp_port","vhost_http_port","vhost_https_port","subdomain_host","max_pool_count","max_ports_per_client","heart_beat_timeout","client_counts","cur_conns","proxy_counts","staticStyle","DrawTrafficChart","elementId","trafficIn","trafficOut","myChart","echarts","init","document","getElementById","showLoading","option","title","text","subtext","x","tooltip","trigger","formatter","v","Humanize","fileSize","percent","series","type","radius","center","itemStyle","emphasis","shadowBlur","shadowOffsetX","shadowColor","setOption","hideLoading","DrawProxyChart","proxy_type_count","tcp","udp","http","https","stcp","xtcp","DrawProxyTrafficChart","trafficInArr","trafficOutArr","params","width","height","reverse","now","Date","getFullYear","getMonth","getDate","dates","axisPointer","html","colorEl","color","seriesName","legend","grid","left","right","bottom","containLabel","xAxis","yAxis","axisLabel","mounted","initData","console","log","total_traffic_in","total_traffic_out","proxies","prop","order","scopedSlots","_u","fn","props","row","addr","encryption","compression","last_start_time","last_close_time","formatTrafficIn","formatTrafficOut","scope","status","proxyName","String","required","BaseProxy","proxyStats","conf","use_encryption","use_compression","conns","traffic_in","today_traffic_in","traffic_out","today_traffic_out","TcpProxy","remote_port","port","UdpProxy","HttpProxy","custom_domains","host_header_rewrite","locations","sub_domain","subdomain","HttpsProxy","StcpProxy","components","Traffic","ref","directives","rawName","arg","fetchData2","Vue","use","Router","routes","path","Overview","ProxiesTcp","ProxiesUdp","ProxiesHttp","ProxiesHttps","ProxiesStcp","api","Promise","resolve","fetch","assign","credentials","then","res","Message","warning","json","undefined","catch","err","$message","error","message","Vuex","store","Store","mutations","SET_SERVER_INFO","actions","fetchServerInfo","commit","locale","lang","Button","Form","FormItem","Row","Col","Table","TableColumn","Popover","Menu","Submenu","MenuItem","Tag","$fetch","config","productionTip","router","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,6ECvJT,W,oCCAA,W,yJCAI,G,oBAAS,WAAa,IAAIyC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,QAAQ,CAACF,EAAG,SAAS,CAACG,YAAY,6BAA6B,CAACH,EAAG,SAAS,CAACA,EAAG,IAAI,CAACG,YAAY,QAAQD,MAAM,CAAC,KAAO,MAAM,CAACN,EAAIQ,GAAG,YAAY,GAAGJ,EAAG,UAAU,CAACA,EAAG,SAAS,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,WAAW,GAAK,GAAG,GAAK,IAAI,CAACF,EAAG,UAAU,CAACE,MAAM,CAAC,iBAAiB,IAAI,KAAO,WAAW,MAAQ,QAAQ,OAAS,IAAIG,GAAG,CAAC,OAAST,EAAIU,eAAe,CAACN,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,MAAM,CAACN,EAAIQ,GAAG,cAAcJ,EAAG,aAAa,CAACE,MAAM,CAAC,MAAQ,aAAa,CAACF,EAAG,WAAW,CAACO,KAAK,SAAS,CAACX,EAAIQ,GAAG,aAAaJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,iBAAiB,CAACN,EAAIQ,GAAG,SAASJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,iBAAiB,CAACN,EAAIQ,GAAG,SAASJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,kBAAkB,CAACN,EAAIQ,GAAG,UAAUJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,mBAAmB,CAACN,EAAIQ,GAAG,WAAWJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,kBAAkB,CAACN,EAAIQ,GAAG,WAAW,GAAGJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACN,EAAIQ,GAAG,WAAW,IAAI,GAAGJ,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,GAAG,GAAK,KAAK,CAACF,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,YAAY,CAAEN,EAAc,WAAEI,EAAG,eAAeJ,EAAIY,MAAM,MAAM,IAAI,OACjpCC,EAAkB,G,wBCkCtB,GACEC,SAAU,CACRC,WADJ,WAEM,OAAOd,KAAKe,OAAOC,MAAMF,aAG7B,QANF,WAMA,wJACA,qCADA,8CAGEG,QAAS,CACPR,aADJ,SACA,KACkB,KAARpB,GACFO,OAAOsB,KAAK,sCC/C0S,I,wBCQ1TC,EAAY,eACd,EACA,EACAP,GACA,EACA,KACA,KACA,MAIa,EAAAO,E,oBCnBX,EAAS,WAAa,IAAIpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,SAAS,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,KAAK,CAACF,EAAG,MAAM,CAACG,YAAY,UAAU,CAACH,EAAG,UAAU,CAACG,YAAY,cAAcD,MAAM,CAAC,iBAAiB,SAAS,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,YAAY,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIsB,cAAclB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,aAAa,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIuB,gBAAgBnB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIwB,oBAAoBpB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,cAAc,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIyB,sBAAsBrB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI0B,uBAAuBtB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,mBAAmB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI2B,qBAAqBvB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,kBAAkB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI4B,qBAAqBxB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,yBAAyB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI6B,2BAA2BzB,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,sBAAsB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI8B,yBAAyB1B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,kBAAkB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAI+B,oBAAoB3B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,wBAAwB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIgC,gBAAgB5B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,iBAAiB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAGrB,EAAIiC,oBAAoB,IAAI,KAAK7B,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,KAAK,CAACF,EAAG,MAAM,CAAC8B,YAAY,CAAC,MAAQ,QAAQ,OAAS,QAAQ,gBAAgB,QAAQ5B,MAAM,CAAC,GAAK,aAAaF,EAAG,MAAM,CAAC8B,YAAY,CAAC,MAAQ,QAAQ,OAAS,SAAS5B,MAAM,CAAC,GAAK,gBAAgB,IAAI,IACjrD,EAAkB,G,oHCQtB,SAAS6B,EAAiBC,EAAWC,EAAWC,GAC9C,IAAMC,EAAUC,IAAQC,KAAKC,SAASC,eAAeP,GAAY,YACjEG,EAAQK,cAER,IAAMC,EAAS,CACbC,MAAO,CACLC,KAAM,kBACNC,QAAS,QACTC,EAAG,UAELC,QAAS,CACPC,QAAS,OACTC,UAAW,SAASC,GAClB,OAAOC,IAASC,SAASF,EAAElH,KAAK6C,OAAS,KAAOqE,EAAEG,QAAU,OAGhEC,OAAQ,CACN,CACEC,KAAM,MACNC,OAAQ,MACRC,OAAQ,CAAC,MAAO,OAChBzH,KAAM,CACJ,CACE6C,MAAOqD,EACP9D,KAAM,cAER,CACES,MAAOsD,EACP/D,KAAM,gBAGVsF,UAAW,CACTC,SAAU,CACRC,WAAY,GACZC,cAAe,EACfC,YAAa,0BAMvB1B,EAAQ2B,UAAUrB,GAClBN,EAAQ4B,cAGV,SAASC,EAAehC,EAAWrB,GACM,MAAnCA,EAAWsD,iBAAiBC,MAC9BvD,EAAWsD,iBAAiBC,IAAM,GAEG,MAAnCvD,EAAWsD,iBAAiBE,MAC9BxD,EAAWsD,iBAAiBE,IAAM,GAEI,MAApCxD,EAAWsD,iBAAiBG,OAC9BzD,EAAWsD,iBAAiBG,KAAO,GAEI,MAArCzD,EAAWsD,iBAAiBI,QAC9B1D,EAAWsD,iBAAiBI,MAAQ,GAEE,MAApC1D,EAAWsD,iBAAiBK,OAC9B3D,EAAWsD,iBAAiBK,KAAO,GAEG,MAApC3D,EAAWsD,iBAAiBM,OAC9B5D,EAAWsD,iBAAiBM,KAAO,GAErC,IAAMpC,EAAUC,IAAQC,KAAKC,SAASC,eAAeP,GAAY,YACjEG,EAAQK,cAER,IAAMC,EAAS,CACbC,MAAO,CACLC,KAAM,UACNC,QAAS,MACTC,EAAG,UAELC,QAAS,CACPC,QAAS,OACTC,UAAW,SAASC,GAClB,OAAOA,EAAElH,KAAK6C,QAGlByE,OAAQ,CACN,CACEC,KAAM,MACNC,OAAQ,MACRC,OAAQ,CAAC,MAAO,OAChBzH,KAAM,CACJ,CACE6C,MAAO+B,EAAWsD,iBAAiBC,IACnC/F,KAAM,OAER,CACES,MAAO+B,EAAWsD,iBAAiBE,IACnChG,KAAM,OAER,CACES,MAAO+B,EAAWsD,iBAAiBG,KACnCjG,KAAM,QAER,CACES,MAAO+B,EAAWsD,iBAAiBI,MACnClG,KAAM,SAER,CACES,MAAO+B,EAAWsD,iBAAiBK,KACnCnG,KAAM,QAER,CACES,MAAO+B,EAAWsD,iBAAiBM,KACnCpG,KAAM,SAGVsF,UAAW,CACTC,SAAU,CACRC,WAAY,GACZC,cAAe,EACfC,YAAa,0BAMvB1B,EAAQ2B,UAAUrB,GAClBN,EAAQ4B,cAIV,SAASS,EAAsBxC,EAAWyC,EAAcC,GACtD,IAAMC,EAAS,CACbC,MAAO,QACPC,OAAQ,SAGJ1C,EAAUC,IAAQC,KAAKC,SAASC,eAAeP,GAAY,WAAY2C,GAC7ExC,EAAQK,cAERiC,EAAeA,EAAaK,UAC5BJ,EAAgBA,EAAcI,UAC9B,IAAIC,EAAM,IAAIC,KACdD,EAAM,IAAIC,KAAKD,EAAIE,cAAeF,EAAIG,WAAYH,EAAII,UAAY,GAElE,IADA,IAAMC,EAAQ,GACL/I,EAAI,EAAGA,EAAI,EAAGA,IACrB+I,EAAMvI,KAAKkI,EAAIE,cAAgB,KAAOF,EAAIG,WAAa,GAAK,IAAMH,EAAII,WACtEJ,EAAM,IAAIC,KAAKD,EAAIE,cAAeF,EAAIG,WAAYH,EAAII,UAAY,GAGpE,IAAM1C,EAAS,CACbK,QAAS,CACPC,QAAS,OACTsC,YAAa,CACX/B,KAAM,UAERN,UAAW,SAASjH,GAClB,IAAIuJ,EAAO,GACPvJ,EAAKQ,OAAS,IAChB+I,GAAQvJ,EAAK,GAAGoC,KAAO,SAHD,uBAKRpC,GALQ,IAKxB,2BAAsB,KAAXkH,EAAW,QACdsC,EACJ,+GAAsHtC,EAAEuC,MAAQ,YAClIF,GAAQC,EAAUtC,EAAEwC,WAAa,KAAOvC,IAASC,SAASF,EAAErE,OAAS,SAR/C,8BAUxB,OAAO0G,IAGXI,OAAQ,CACN3J,KAAM,CAAC,aAAc,gBAEvB4J,KAAM,CACJC,KAAM,KACNC,MAAO,KACPC,OAAQ,KACRC,cAAc,GAEhBC,MAAO,CACL,CACE1C,KAAM,WACNvH,KAAMqJ,IAGVa,MAAO,CACL,CACE3C,KAAM,QACN4C,UAAW,CACTlD,UAAW,SAASpE,GAClB,OAAOsE,IAASC,SAASvE,OAKjCyE,OAAQ,CACN,CACElF,KAAM,aACNmF,KAAM,MACNvH,KAAM0I,GAER,CACEtG,KAAM,cACNmF,KAAM,MACNvH,KAAM2I,KAIZvC,EAAQ2B,UAAUrB,GAClBN,EAAQ4B,cC5JV,OACEhI,KADF,WAEI,MAAO,CACLmF,QAAS,GACTC,UAAW,GACXC,cAAe,GACfC,gBAAiB,GACjBC,iBAAkB,GAClBC,eAAgB,GAChBC,eAAgB,GAChBC,qBAAsB,GACtBC,mBAAoB,GACpBC,cAAe,GACfC,UAAW,GACXC,aAAc,KAGlBnB,SAAU,CACRC,WADJ,WAEM,OAAOd,KAAKe,OAAOC,MAAMF,aAG7BwF,QAtBF,WAuBItG,KAAKuG,YAEPtF,QAAS,CACPsF,SADJ,WAEMC,QAAQC,MAAMzG,KAAKc,WAAYd,KAAKc,YAC/Bd,KAAKc,aAEVd,KAAKqB,QAAUrB,KAAKc,WAAWO,QAC/BrB,KAAKsB,UAAYtB,KAAKc,WAAWQ,UACjCtB,KAAKuB,cAAgBvB,KAAKc,WAAWS,cACV,IAAvBvB,KAAKuB,gBACPvB,KAAKuB,cAAgB,WAEvBvB,KAAKwB,gBAAkBxB,KAAKc,WAAWU,gBACV,IAAzBxB,KAAKwB,kBACPxB,KAAKwB,gBAAkB,WAEzBxB,KAAKyB,iBAAmBzB,KAAKc,WAAWW,iBACV,IAA1BzB,KAAKyB,mBACPzB,KAAKyB,iBAAmB,WAE1BzB,KAAK0B,eAAiB1B,KAAKc,WAAWY,eACtC1B,KAAK2B,eAAiB3B,KAAKc,WAAWa,eACtC3B,KAAK4B,qBAAuB5B,KAAKc,WAAWc,qBACV,IAA9B5B,KAAK4B,uBACP5B,KAAK4B,qBAAuB,YAE9B5B,KAAK6B,mBAAqB7B,KAAKc,WAAWe,mBAC1C7B,KAAK8B,cAAgB9B,KAAKc,WAAWgB,cACrC9B,KAAK+B,UAAY/B,KAAKc,WAAWiB,UACjC/B,KAAKgC,aAAe,EACoB,MAApChC,KAAKc,WAAWsD,mBAC0B,MAAxCpE,KAAKc,WAAWsD,iBAAiBC,MACnCrE,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBC,KAEZ,MAAxCrE,KAAKc,WAAWsD,iBAAiBE,MACnCtE,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBE,KAEX,MAAzCtE,KAAKc,WAAWsD,iBAAiBG,OACnCvE,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBG,MAEV,MAA1CvE,KAAKc,WAAWsD,iBAAiBI,QACnCxE,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBI,OAEX,MAAzCxE,KAAKc,WAAWsD,iBAAiBK,OACnCzE,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBK,MAEX,MAAzCzE,KAAKc,WAAWsD,iBAAiBM,OACnC1E,KAAKgC,cAAgBhC,KAAKc,WAAWsD,iBAAiBM,OAG1DxC,EAAiB,UAAWlC,KAAKc,WAAW4F,iBAAkB1G,KAAKc,WAAW6F,mBAC9ExC,EAAe,UAAWnE,KAAKc,gBClI6S,ICQ9U,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,OAIa,I,QCnBX,EAAS,WAAa,IAAIf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAAC8B,YAAY,CAAC,MAAQ,QAAQ5B,MAAM,CAAC,KAAON,EAAI6G,QAAQ,eAAe,CAAEC,KAAM,OAAQC,MAAO,eAAgB,CAAC3G,EAAG,kBAAkB,CAACE,MAAM,CAAC,KAAO,UAAU0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASC,GAAO,MAAO,CAAC/G,EAAG,aAAa,CAAC8B,YAAY,CAAC,cAAc,OAAO5B,MAAM,CAAC,UAAY,QAAQ,MAAQ,MAAM,QAAU,UAAU,CAACF,EAAG,mBAAmB,CAACE,MAAM,CAAC,aAAa6G,EAAMC,IAAI7I,QAAQ6B,EAAG,YAAY,CAAC8B,YAAY,CAAC,gBAAgB,QAAQ5B,MAAM,CAAC,KAAO,YAAY,KAAO,UAAU,KAAO,QAAQ,KAAO,OAAO,KAAO6G,EAAMC,IAAI7I,MAAMoC,KAAK,aAAa,CAACX,EAAIQ,GAAG,2BAA2B,GAAGJ,EAAG,UAAU,CAACG,YAAY,oBAAoBD,MAAM,CAAC,iBAAiB,OAAO,OAAS,KAAK,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI7I,WAAW6B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI1D,WAAWtD,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIC,WAAWjH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIE,iBAAiBlH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIG,kBAAkBnH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAII,sBAAsBpH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIK,uBAAuB,UAAUrH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,QAAQ,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,aAAa,KAAO,aAAa,UAAYN,EAAI0H,gBAAgB,SAAW,MAAMtH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,cAAc,UAAYN,EAAI2H,iBAAiB,SAAW,MAAMvH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,SAAS,KAAO,SAAS,SAAW,IAAI0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASU,GAAO,MAAO,CAAuB,WAArBA,EAAMR,IAAIS,OAAqBzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,YAAY,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,WAAWzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,WAAW,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,mBAAmB,IAAI,IACxwE,EAAkB,GCDlB,EAAS,WAAa,IAAI7H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC8B,YAAY,CAAC,MAAQ,QAAQ,OAAS,SAAS5B,MAAM,CAAC,GAAKN,EAAI8H,cACrK,EAAkB,GCKtB,GACEX,MAAO,CACLW,UAAW,CACTpE,KAAMqE,OACNC,UAAU,IAGdzB,QAPF,WAQItG,KAAKuG,YAEPtF,QAAS,CACP,SADJ,WACA,8KACA,yCADA,UACA,EADA,OAEA,EAFA,iDAIA,0CAJA,gDCjBiV,ICO7U,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,I,4CClBT+G,EACJ,WAAYC,GAAY,uBACtBjI,KAAK1B,KAAO2J,EAAW3J,KACA,MAAnB2J,EAAWC,MACblI,KAAKqH,WAAaY,EAAWC,KAAKC,eAClCnI,KAAKsH,YAAcW,EAAWC,KAAKE,kBAEnCpI,KAAKqH,WAAa,GAClBrH,KAAKsH,YAAc,IAErBtH,KAAKqI,MAAQJ,EAAWlG,UACxB/B,KAAKsI,WAAaL,EAAWM,iBAC7BvI,KAAKwI,YAAcP,EAAWQ,kBAC9BzI,KAAKuH,gBAAkBU,EAAWV,gBAClCvH,KAAKwH,gBAAkBS,EAAWT,gBAClCxH,KAAK4H,OAASK,EAAWL,QAIvBc,E,wDACJ,WAAYT,GAAY,oCACtB,cAAMA,GACN,EAAKxE,KAAO,MACW,MAAnBwE,EAAWC,MACb,EAAKd,KAAO,IAAMa,EAAWC,KAAKS,YAClC,EAAKC,KAAOX,EAAWC,KAAKS,cAE5B,EAAKvB,KAAO,GACZ,EAAKwB,KAAO,IARQ,E,UADHZ,GAcjBa,E,wDACJ,WAAYZ,GAAY,oCACtB,cAAMA,GACN,EAAKxE,KAAO,MACW,MAAnBwE,EAAWC,MACb,EAAKd,KAAO,IAAMa,EAAWC,KAAKS,YAClC,EAAKC,KAAOX,EAAWC,KAAKS,cAE5B,EAAKvB,KAAO,GACZ,EAAKwB,KAAO,IARQ,E,UADHZ,GAcjBc,E,wDACJ,WAAYb,EAAYW,EAAMlH,GAAgB,oCAC5C,cAAMuG,GACN,EAAKxE,KAAO,OACZ,EAAKmF,KAAOA,EACW,MAAnBX,EAAWC,MACb,EAAKa,eAAiBd,EAAWC,KAAKa,eACtC,EAAKC,oBAAsBf,EAAWC,KAAKc,oBAC3C,EAAKC,UAAYhB,EAAWC,KAAKe,UACE,KAA/BhB,EAAWC,KAAKgB,WAClB,EAAKC,UAAYlB,EAAWC,KAAKgB,WAAa,IAAMxH,EAEpD,EAAKyH,UAAY,KAGnB,EAAKJ,eAAiB,GACtB,EAAKC,oBAAsB,GAC3B,EAAKG,UAAY,GACjB,EAAKF,UAAY,IAjByB,E,UADxBjB,GAuBlBoB,E,wDACJ,WAAYnB,EAAYW,EAAMlH,GAAgB,oCAC5C,cAAMuG,GACN,EAAKxE,KAAO,QACZ,EAAKmF,KAAOA,EACW,MAAnBX,EAAWC,MACb,EAAKa,eAAiBd,EAAWC,KAAKa,eACH,KAA/Bd,EAAWC,KAAKgB,WAClB,EAAKC,UAAYlB,EAAWC,KAAKgB,WAAa,IAAMxH,EAEpD,EAAKyH,UAAY,KAGnB,EAAKJ,eAAiB,GACtB,EAAKI,UAAY,IAbyB,E,UADvBnB,GAmBnBqB,E,wDACJ,WAAYpB,GAAY,oCACtB,cAAMA,GACN,EAAKxE,KAAO,OAFU,E,UADFuE,GChCxB,GACEsB,WAAY,CACV,mBAAoBC,GAEtBrN,KAJF,WAKI,MAAO,CACL0K,QAAS,KAGbN,QATF,WAUItG,KAAKuG,YAEPtF,QAAS,CACPwG,gBADJ,SACA,KACM,OAAO,EAAb,0BAEIC,iBAJJ,SAIA,KACM,OAAO,EAAb,2BAEI,SAPJ,WAOA,oLACA,sBADA,UACA,EADA,OAEA,EAFA,iDAIA,aAJA,iBAKA,WALA,IAKA,qCACA,yBANA,8EC5EoV,ICOhV,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,I,QClBX,EAAS,WAAa,IAAI3H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAAC8B,YAAY,CAAC,MAAQ,QAAQ5B,MAAM,CAAC,KAAON,EAAI6G,QAAQ,eAAe,CAAEC,KAAM,OAAQC,MAAO,eAAgB,CAAC3G,EAAG,kBAAkB,CAACE,MAAM,CAAC,KAAO,UAAU0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASC,GAAO,MAAO,CAAC/G,EAAG,aAAa,CAACqJ,IAAI,WAAWvH,YAAY,CAAC,cAAc,OAAO5B,MAAM,CAAC,UAAY,QAAQ,MAAQ,MAAM,QAAU,UAAU,CAACF,EAAG,mBAAmB,CAACE,MAAM,CAAC,aAAa6G,EAAMC,IAAI7I,SAAS,GAAG6B,EAAG,YAAY,CAACsJ,WAAW,CAAC,CAACnL,KAAK,UAAUoL,QAAQ,qBAAqBC,IAAI,aAAa1H,YAAY,CAAC,gBAAgB,QAAQ5B,MAAM,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,SAAS,CAACN,EAAIQ,GAAG,wBAAwBJ,EAAG,UAAU,CAACG,YAAY,oBAAoBD,MAAM,CAAC,iBAAiB,OAAO,OAAS,KAAK,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI7I,WAAW6B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI1D,WAAWtD,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIC,WAAWjH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIE,iBAAiBlH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIG,kBAAkBnH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAII,sBAAsBpH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIK,uBAAuB,UAAUrH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,QAAQ,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,aAAa,KAAO,aAAa,UAAYN,EAAI0H,gBAAgB,SAAW,MAAMtH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,cAAc,UAAYN,EAAI2H,iBAAiB,SAAW,MAAMvH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,SAAS,KAAO,SAAS,SAAW,IAAI0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASU,GAAO,MAAO,CAAuB,WAArBA,EAAMR,IAAIS,OAAqBzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,YAAY,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,WAAWzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,WAAW,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,mBAAmB,IAAI,IACryE,GAAkB,GCsDtB,IACE0B,WAAY,CACV,mBAAoBC,GAEtBrN,KAJF,WAKI,MAAO,CACL0K,QAAS,KAGbN,QATF,WAUItG,KAAKuG,YAEPtF,QAAS,CACPwG,gBADJ,SACA,KACM,OAAO,EAAb,0BAEIC,iBAJJ,SAIA,KACM,OAAO,EAAb,2BAEI,SAPJ,WAOA,oLACA,sBADA,UACA,EADA,OAEA,EAFA,iDAIA,aAJA,iBAKA,WALA,IAKA,qCACA,yBANA,8EC1EoV,MCOhV,GAAY,eACd,GACA,EACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAAC8B,YAAY,CAAC,MAAQ,QAAQ5B,MAAM,CAAC,KAAON,EAAI6G,QAAQ,eAAe,CAAEC,KAAM,OAAQC,MAAO,eAAgB,CAAC3G,EAAG,kBAAkB,CAACE,MAAM,CAAC,KAAO,UAAU0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASC,GAAO,MAAO,CAAC/G,EAAG,aAAa,CAACqJ,IAAI,WAAWvH,YAAY,CAAC,cAAc,OAAO5B,MAAM,CAAC,UAAY,QAAQ,MAAQ,MAAM,QAAU,UAAU,CAACF,EAAG,mBAAmB,CAACE,MAAM,CAAC,aAAa6G,EAAMC,IAAI7I,SAAS,GAAG6B,EAAG,YAAY,CAACsJ,WAAW,CAAC,CAACnL,KAAK,UAAUoL,QAAQ,qBAAqBC,IAAI,aAAa1H,YAAY,CAAC,gBAAgB,QAAQ5B,MAAM,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,SAAS,CAACN,EAAIQ,GAAG,wBAAwBJ,EAAG,UAAU,CAACG,YAAY,oBAAoBD,MAAM,CAAC,iBAAiB,OAAO,OAAS,KAAK,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI7I,WAAW6B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI1D,WAAWtD,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,YAAY,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI4B,qBAAqB5I,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,cAAc,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIgC,gBAAgBhJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,cAAc,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI8B,gBAAgB9I,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI6B,0BAA0B7I,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIE,iBAAiBlH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIG,kBAAkBnH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAII,sBAAsBpH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIK,uBAAuB,UAAUrH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,QAAQ,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,aAAa,KAAO,aAAa,UAAYN,EAAI0H,gBAAgB,SAAW,MAAMtH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,cAAc,UAAYN,EAAI2H,iBAAiB,SAAW,MAAMvH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,SAAS,KAAO,SAAS,SAAW,IAAI0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASU,GAAO,MAAO,CAAuB,WAArBA,EAAMR,IAAIS,OAAqBzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,YAAY,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,WAAWzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,WAAW,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,mBAAmB,IAAI,IAC1mF,GAAkB,GC+DtB,IACE0B,WAAY,CACV,mBAAoBC,GAEtBrN,KAJF,WAKI,MAAO,CACL0K,QAAS,GACTpF,gBAAiB,GACjBE,eAAgB,KAGpBb,SAAU,CACRC,WADJ,WAEM,OAAOd,KAAKe,OAAOC,MAAMF,aAG7BwF,QAhBF,WAiBItG,KAAKuG,YAEPtF,QAAS,CACPwG,gBADJ,SACA,KACM,OAAO,EAAb,0BAEIC,iBAJJ,SAIA,KACM,OAAO,EAAb,2BAEI,SAPJ,WAOA,uKACA,aADA,oDAEA,+CACA,6CACA,+CAJA,iEAMA,uBANA,UAMA,EANA,OAOA,EAPA,mDASA,aATA,iBAUA,WAVA,IAUA,qCACA,4DAXA,+EC1FqV,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAAC8B,YAAY,CAAC,MAAQ,QAAQ5B,MAAM,CAAC,KAAON,EAAI6G,QAAQ,eAAe,CAAEC,KAAM,OAAQC,MAAO,eAAgB,CAAC3G,EAAG,kBAAkB,CAACE,MAAM,CAAC,KAAO,UAAU0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASC,GAAO,MAAO,CAAC/G,EAAG,aAAa,CAACqJ,IAAI,WAAWvH,YAAY,CAAC,cAAc,OAAO5B,MAAM,CAAC,UAAY,QAAQ,MAAQ,MAAM,QAAU,UAAU,CAACF,EAAG,mBAAmB,CAACE,MAAM,CAAC,aAAa6G,EAAMC,IAAI7I,SAAS,GAAG6B,EAAG,YAAY,CAACsJ,WAAW,CAAC,CAACnL,KAAK,UAAUoL,QAAQ,qBAAqBC,IAAI,aAAa1H,YAAY,CAAC,gBAAgB,QAAQ5B,MAAM,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,SAAS,CAACN,EAAIQ,GAAG,wBAAwBJ,EAAG,UAAU,CAACG,YAAY,oBAAoBD,MAAM,CAAC,iBAAiB,OAAO,OAAS,KAAK,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI7I,WAAW6B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI1D,WAAWtD,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,YAAY,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI4B,qBAAqB5I,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,cAAc,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIgC,gBAAgBhJ,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIE,iBAAiBlH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIG,kBAAkBnH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAII,sBAAsBpH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIK,uBAAuB,UAAUrH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,QAAQ,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,aAAa,KAAO,aAAa,UAAYN,EAAI0H,gBAAgB,SAAW,MAAMtH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,cAAc,UAAYN,EAAI2H,iBAAiB,SAAW,MAAMvH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,SAAS,KAAO,SAAS,SAAW,IAAI0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASU,GAAO,MAAO,CAAuB,WAArBA,EAAMR,IAAIS,OAAqBzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,YAAY,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,WAAWzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,WAAW,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,mBAAmB,IAAI,IACt5E,GAAkB,GCyDtB,IACE0B,WAAY,CACV,mBAAoBC,GAEtBrN,KAJF,WAKI,MAAO,CACL0K,QAAS,GACTnF,iBAAkB,GAClBC,eAAgB,KAGpBb,SAAU,CACRC,WADJ,WAEM,OAAOd,KAAKe,OAAOC,MAAMF,aAG7BwF,QAhBF,WAiBItG,KAAKuG,YAEPtF,QAAS,CACPwG,gBADJ,SACA,KACM,OAAO,EAAb,0BAEIC,iBAJJ,SAIA,KACM,OAAO,EAAb,2BAEI,SAPJ,WAOA,uKACA,aADA,oDAGA,iDACA,6CACA,iDALA,iEAOA,wBAPA,UAOA,EAPA,OAQA,EARA,mDAUA,aAVA,iBAWA,WAXA,IAWA,qCACA,6DAZA,+ECpFsV,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAAC8B,YAAY,CAAC,MAAQ,QAAQ5B,MAAM,CAAC,KAAON,EAAI6G,QAAQ,eAAe,CAAEC,KAAM,OAAQC,MAAO,eAAgB,CAAC3G,EAAG,kBAAkB,CAACE,MAAM,CAAC,KAAO,UAAU0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASC,GAAO,MAAO,CAAC/G,EAAG,aAAa,CAACqJ,IAAI,WAAWvH,YAAY,CAAC,cAAc,OAAO5B,MAAM,CAAC,UAAY,QAAQ,MAAQ,MAAM,QAAU,UAAU,CAACF,EAAG,mBAAmB,CAACE,MAAM,CAAC,aAAa6G,EAAMC,IAAI7I,SAAS,GAAG6B,EAAG,YAAY,CAACsJ,WAAW,CAAC,CAACnL,KAAK,UAAUoL,QAAQ,qBAAqBC,IAAI,aAAa1H,YAAY,CAAC,gBAAgB,QAAQ5B,MAAM,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,OAAO,KAAO6G,EAAMC,IAAI7I,MAAMkC,GAAG,CAAC,MAAQT,EAAI6J,aAAa,CAAC7J,EAAIQ,GAAG,0BAA0BJ,EAAG,UAAU,CAACG,YAAY,oBAAoBD,MAAM,CAAC,iBAAiB,OAAO,OAAS,KAAK,CAACF,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI7I,WAAW6B,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAI1D,WAAWtD,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIE,iBAAiBlH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,gBAAgB,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIG,kBAAkBnH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAII,sBAAsBpH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQ,eAAe,CAACF,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIqB,GAAG8F,EAAMC,IAAIK,uBAAuB,UAAUrH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAO,OAAO,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,QAAQ,SAAW,MAAMF,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,aAAa,KAAO,aAAa,UAAYN,EAAI0H,gBAAgB,SAAW,MAAMtH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,cAAc,KAAO,cAAc,UAAYN,EAAI2H,iBAAiB,SAAW,MAAMvH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,SAAS,KAAO,SAAS,SAAW,IAAI0G,YAAYhH,EAAIiH,GAAG,CAAC,CAAC3H,IAAI,UAAU4H,GAAG,SAASU,GAAO,MAAO,CAAuB,WAArBA,EAAMR,IAAIS,OAAqBzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,YAAY,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,WAAWzH,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,WAAW,CAACN,EAAIQ,GAAGR,EAAIqB,GAAGuG,EAAMR,IAAIS,mBAAmB,IAAI,IACprE,GAAkB,GCoDtB,IACE0B,WAAY,CACV,mBAAoBC,GAEtBrN,KAJF,WAKI,MAAO,CACL0K,QAAS,KAGbN,QATF,WAUItG,KAAKuG,YAEPtF,QAAS,CACPwG,gBADJ,SACA,KACM,OAAO,EAAb,0BAEIC,iBAJJ,SAIA,KACM,OAAO,EAAb,2BAEI,SAPJ,WAOA,oLACA,uBADA,UACA,EADA,OAEA,EAFA,iDAIA,aAJA,iBAKA,WALA,IAKA,qCACA,yBANA,8ECxEqV,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCTfmC,aAAIC,IAAIC,QAEO,WAAIA,OAAO,CACxBC,OAAQ,CACN,CACEC,KAAM,IACN3L,KAAM,WACN6C,UAAW+I,GAEb,CACED,KAAM,eACN3L,KAAM,aACN6C,UAAWgJ,GAEb,CACEF,KAAM,eACN3L,KAAM,aACN6C,UAAWiJ,IAEb,CACEH,KAAM,gBACN3L,KAAM,cACN6C,UAAWkJ,IAEb,CACEJ,KAAM,iBACN3L,KAAM,eACN6C,UAAWmJ,IAEb,CACEL,KAAM,gBACN3L,KAAM,cACN6C,UAAWoJ,O,aCvCF,I,UAAA,SAASC,GAAgB,WAAXhI,EAAW,uDAAJ,GAClC,OAAO,IAAIiI,SAAQ,SAAAC,GACjBC,MAAM,QAAD,OAASH,GAAO7N,OAAOiO,OAAO,CAAEC,YAAa,WAAarI,IAC5DsI,MAAK,SAAAC,GACJ,GAAIA,EAAInD,OAAS,KAAOmD,EAAInD,QAAU,IAGpC,OAFAoD,aAAQC,QAAQ,0CAChBP,IAIFA,EAAQK,EAAMA,EAAIG,YAASC,MAE5BC,OAAM,SAAAC,GACL,EAAKC,SAASC,MAAMF,EAAIG,SACxBd,YCbRb,aAAIC,IAAI2B,SAER,IAAMC,GAAQ,IAAID,QAAKE,MAAM,CAC3B3K,MAAO,CACLF,WAAY,MAEd8K,UAAW,CACTC,gBADS,SACO7K,EAAOF,GACrBE,EAAMF,WAAaA,IAGvBgL,QAAS,CACDC,gBADC,YAC2B,4JAAVC,EAAU,EAAVA,OAAU,SACbrB,GAAM,cADO,cAC1BO,EAD0B,OAEhCc,EAAO,kBAAmBd,GAAQ,MAFF,kBAGzBA,GAHyB,iDAQvBQ,M,UCVfO,IAAOnC,IAAIoC,KAEXrC,aAAIC,IAAIqC,aACRtC,aAAIC,IAAIsC,WACRvC,aAAIC,IAAIuC,eACRxC,aAAIC,IAAIwC,UACRzC,aAAIC,IAAIyC,UACR1C,aAAIC,IAAI0C,YACR3C,aAAIC,IAAI2C,kBACR5C,aAAIC,IAAI4C,cACR7C,aAAIC,IAAI6C,WACR9C,aAAIC,IAAI8C,cACR/C,aAAIC,IAAI+C,eACRhD,aAAIC,IAAIgD,UACRjD,aAAIjN,UAAU0O,SAAWN,aAGzBnB,aAAIjN,UAAUmQ,OAASpC,GAEvBd,aAAImD,OAAOC,eAAgB,EAE3B,IAAIpD,aAAI,CACNqD,UACAxB,SACAyB,OAAQ,SAAAC,GAAC,OAAIA,EAAEC,MACdC,OAAO,S","file":"js/app.bb942a48.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","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overview.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',{staticClass:\"grid-content header-color\"},[_c('el-row',[_c('a',{staticClass:\"brand\",attrs:{\"href\":\"#\"}},[_vm._v(\"frp\")])])],1),_c('section',[_c('el-row',[_c('el-col',{attrs:{\"id\":\"side-nav\",\"xs\":24,\"md\":4}},[_c('el-menu',{attrs:{\"default-active\":\"1\",\"mode\":\"vertical\",\"theme\":\"light\",\"router\":\"\"},on:{\"select\":_vm.handleSelect}},[_c('el-menu-item',{attrs:{\"index\":\"/\"}},[_vm._v(\"Overview\")]),_c('el-submenu',{attrs:{\"index\":\"/proxies\"}},[_c('template',{slot:\"title\"},[_vm._v(\"Proxies\")]),_c('el-menu-item',{attrs:{\"index\":\"/proxies/tcp\"}},[_vm._v(\"TCP\")]),_c('el-menu-item',{attrs:{\"index\":\"/proxies/udp\"}},[_vm._v(\"UDP\")]),_c('el-menu-item',{attrs:{\"index\":\"/proxies/http\"}},[_vm._v(\"HTTP\")]),_c('el-menu-item',{attrs:{\"index\":\"/proxies/https\"}},[_vm._v(\"HTTPS\")]),_c('el-menu-item',{attrs:{\"index\":\"/proxies/stcp\"}},[_vm._v(\"STCP\")])],2),_c('el-menu-item',{attrs:{\"index\":\"\"}},[_vm._v(\"Help\")])],1)],1),_c('el-col',{attrs:{\"xs\":24,\"md\":20}},[_c('div',{attrs:{\"id\":\"content\"}},[(_vm.serverInfo)?_c('router-view'):_vm._e()],1)])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"app\">\n <header class=\"grid-content header-color\">\n <el-row>\n <a class=\"brand\" href=\"#\">frp</a>\n </el-row>\n </header>\n <section>\n <el-row>\n <el-col id=\"side-nav\" :xs=\"24\" :md=\"4\">\n <el-menu default-active=\"1\" mode=\"vertical\" theme=\"light\" router @select=\"handleSelect\">\n <el-menu-item index=\"/\">Overview</el-menu-item>\n <el-submenu index=\"/proxies\">\n <template slot=\"title\">Proxies</template>\n <el-menu-item index=\"/proxies/tcp\">TCP</el-menu-item>\n <el-menu-item index=\"/proxies/udp\">UDP</el-menu-item>\n <el-menu-item index=\"/proxies/http\">HTTP</el-menu-item>\n <el-menu-item index=\"/proxies/https\">HTTPS</el-menu-item>\n <el-menu-item index=\"/proxies/stcp\">STCP</el-menu-item>\n </el-submenu>\n <el-menu-item index=\"\">Help</el-menu-item>\n </el-menu>\n </el-col>\n\n <el-col :xs=\"24\" :md=\"20\">\n <div id=\"content\">\n <router-view v-if=\"serverInfo\" />\n </div>\n </el-col>\n </el-row>\n </section>\n </div>\n</template>\n\n<script>\nexport default {\n computed: {\n serverInfo() {\n return this.$store.state.serverInfo\n }\n },\n async created() {\n this.$store.dispatch('fetchServerInfo')\n },\n methods: {\n handleSelect(key, path) {\n if (key === '') {\n window.open('https://github.com/fatedier/frp')\n }\n }\n }\n}\n</script>\n\n<style>\nbody {\n background-color: #fafafa;\n margin: 0px;\n font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, sans-serif;\n}\n\nheader {\n width: 100%;\n height: 60px;\n}\n\n.header-color {\n background: #58b7ff;\n}\n\n#content {\n margin-top: 20px;\n padding-right: 40px;\n}\n\n.brand {\n color: #fff;\n background-color: transparent;\n margin-left: 20px;\n float: left;\n line-height: 25px;\n font-size: 25px;\n padding: 15px 15px;\n height: 30px;\n text-decoration: none;\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../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=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../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=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=9e37d2de&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-row',[_c('el-col',{attrs:{\"md\":12}},[_c('div',{staticClass:\"source\"},[_c('el-form',{staticClass:\"server_info\",attrs:{\"label-position\":\"left\"}},[_c('el-form-item',{attrs:{\"label\":\"Version\"}},[_c('span',[_vm._v(_vm._s(_vm.version))])]),_c('el-form-item',{attrs:{\"label\":\"BindPort\"}},[_c('span',[_vm._v(_vm._s(_vm.bind_port))])]),_c('el-form-item',{attrs:{\"label\":\"BindUdpPort\"}},[_c('span',[_vm._v(_vm._s(_vm.bind_udp_port))])]),_c('el-form-item',{attrs:{\"label\":\"Http Port\"}},[_c('span',[_vm._v(_vm._s(_vm.vhost_http_port))])]),_c('el-form-item',{attrs:{\"label\":\"Https Port\"}},[_c('span',[_vm._v(_vm._s(_vm.vhost_https_port))])]),_c('el-form-item',{attrs:{\"label\":\"Subdomain Host\"}},[_c('span',[_vm._v(_vm._s(_vm.subdomain_host))])]),_c('el-form-item',{attrs:{\"label\":\"Max PoolCount\"}},[_c('span',[_vm._v(_vm._s(_vm.max_pool_count))])]),_c('el-form-item',{attrs:{\"label\":\"Max Ports Per Client\"}},[_c('span',[_vm._v(_vm._s(_vm.max_ports_per_client))])]),_c('el-form-item',{attrs:{\"label\":\"HeartBeat Timeout\"}},[_c('span',[_vm._v(_vm._s(_vm.heart_beat_timeout))])]),_c('el-form-item',{attrs:{\"label\":\"Client Counts\"}},[_c('span',[_vm._v(_vm._s(_vm.client_counts))])]),_c('el-form-item',{attrs:{\"label\":\"Current Connections\"}},[_c('span',[_vm._v(_vm._s(_vm.cur_conns))])]),_c('el-form-item',{attrs:{\"label\":\"Proxy Counts\"}},[_c('span',[_vm._v(_vm._s(_vm.proxy_counts))])])],1)],1)]),_c('el-col',{attrs:{\"md\":12}},[_c('div',{staticStyle:{\"width\":\"400px\",\"height\":\"250px\",\"margin-bottom\":\"30px\"},attrs:{\"id\":\"traffic\"}}),_c('div',{staticStyle:{\"width\":\"400px\",\"height\":\"250px\"},attrs:{\"id\":\"proxies\"}})])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Humanize from 'humanize-plus'\nimport echarts from 'echarts/lib/echarts'\n\nimport 'echarts/theme/macarons'\nimport 'echarts/lib/chart/bar'\nimport 'echarts/lib/chart/pie'\nimport 'echarts/lib/component/tooltip'\nimport 'echarts/lib/component/title'\n\nfunction DrawTrafficChart(elementId, trafficIn, trafficOut) {\n const myChart = echarts.init(document.getElementById(elementId), 'macarons')\n myChart.showLoading()\n\n const option = {\n title: {\n text: 'Network Traffic',\n subtext: 'today',\n x: 'center'\n },\n tooltip: {\n trigger: 'item',\n formatter: function(v) {\n return Humanize.fileSize(v.data.value) + ' (' + v.percent + '%)'\n }\n },\n series: [\n {\n type: 'pie',\n radius: '55%',\n center: ['50%', '60%'],\n data: [\n {\n value: trafficIn,\n name: 'Traffic In'\n },\n {\n value: trafficOut,\n name: 'Traffic Out'\n }\n ],\n itemStyle: {\n emphasis: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n }\n myChart.setOption(option)\n myChart.hideLoading()\n}\n\nfunction DrawProxyChart(elementId, serverInfo) {\n if (serverInfo.proxy_type_count.tcp == null) {\n serverInfo.proxy_type_count.tcp = 0\n }\n if (serverInfo.proxy_type_count.udp == null) {\n serverInfo.proxy_type_count.udp = 0\n }\n if (serverInfo.proxy_type_count.http == null) {\n serverInfo.proxy_type_count.http = 0\n }\n if (serverInfo.proxy_type_count.https == null) {\n serverInfo.proxy_type_count.https = 0\n }\n if (serverInfo.proxy_type_count.stcp == null) {\n serverInfo.proxy_type_count.stcp = 0\n }\n if (serverInfo.proxy_type_count.xtcp == null) {\n serverInfo.proxy_type_count.xtcp = 0\n }\n const myChart = echarts.init(document.getElementById(elementId), 'macarons')\n myChart.showLoading()\n\n const option = {\n title: {\n text: 'Proxies',\n subtext: 'now',\n x: 'center'\n },\n tooltip: {\n trigger: 'item',\n formatter: function(v) {\n return v.data.value\n }\n },\n series: [\n {\n type: 'pie',\n radius: '55%',\n center: ['50%', '60%'],\n data: [\n {\n value: serverInfo.proxy_type_count.tcp,\n name: 'TCP'\n },\n {\n value: serverInfo.proxy_type_count.udp,\n name: 'UDP'\n },\n {\n value: serverInfo.proxy_type_count.http,\n name: 'HTTP'\n },\n {\n value: serverInfo.proxy_type_count.https,\n name: 'HTTPS'\n },\n {\n value: serverInfo.proxy_type_count.stcp,\n name: 'STCP'\n },\n {\n value: serverInfo.proxy_type_count.xtcp,\n name: 'XTCP'\n }\n ],\n itemStyle: {\n emphasis: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n }\n myChart.setOption(option)\n myChart.hideLoading()\n}\n\n// 7 days\nfunction DrawProxyTrafficChart(elementId, trafficInArr, trafficOutArr) {\n const params = {\n width: '600px',\n height: '400px'\n }\n\n const myChart = echarts.init(document.getElementById(elementId), 'macarons', params)\n myChart.showLoading()\n\n trafficInArr = trafficInArr.reverse()\n trafficOutArr = trafficOutArr.reverse()\n let now = new Date()\n now = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 6)\n const dates = []\n for (let i = 0; i < 7; i++) {\n dates.push(now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate())\n now = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1)\n }\n\n const option = {\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow'\n },\n formatter: function(data) {\n let html = ''\n if (data.length > 0) {\n html += data[0].name + '<br/>'\n }\n for (const v of data) {\n const colorEl =\n '<span style=\"display:inline-block;margin-right:5px;' + 'border-radius:10px;width:9px;height:9px;background-color:' + v.color + '\"></span>'\n html += colorEl + v.seriesName + ': ' + Humanize.fileSize(v.value) + '<br/>'\n }\n return html\n }\n },\n legend: {\n data: ['Traffic In', 'Traffic Out']\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true\n },\n xAxis: [\n {\n type: 'category',\n data: dates\n }\n ],\n yAxis: [\n {\n type: 'value',\n axisLabel: {\n formatter: function(value) {\n return Humanize.fileSize(value)\n }\n }\n }\n ],\n series: [\n {\n name: 'Traffic In',\n type: 'bar',\n data: trafficInArr\n },\n {\n name: 'Traffic Out',\n type: 'bar',\n data: trafficOutArr\n }\n ]\n }\n myChart.setOption(option)\n myChart.hideLoading()\n}\n\nexport { DrawTrafficChart, DrawProxyChart, DrawProxyTrafficChart }\n","<template>\n <div>\n <el-row>\n <el-col :md=\"12\">\n <div class=\"source\">\n <el-form label-position=\"left\" class=\"server_info\">\n <el-form-item label=\"Version\">\n <span>{{ version }}</span>\n </el-form-item>\n <el-form-item label=\"BindPort\">\n <span>{{ bind_port }}</span>\n </el-form-item>\n <el-form-item label=\"BindUdpPort\">\n <span>{{ bind_udp_port }}</span>\n </el-form-item>\n <el-form-item label=\"Http Port\">\n <span>{{ vhost_http_port }}</span>\n </el-form-item>\n <el-form-item label=\"Https Port\">\n <span>{{ vhost_https_port }}</span>\n </el-form-item>\n <el-form-item label=\"Subdomain Host\">\n <span>{{ subdomain_host }}</span>\n </el-form-item>\n <el-form-item label=\"Max PoolCount\">\n <span>{{ max_pool_count }}</span>\n </el-form-item>\n <el-form-item label=\"Max Ports Per Client\">\n <span>{{ max_ports_per_client }}</span>\n </el-form-item>\n <el-form-item label=\"HeartBeat Timeout\">\n <span>{{ heart_beat_timeout }}</span>\n </el-form-item>\n <el-form-item label=\"Client Counts\">\n <span>{{ client_counts }}</span>\n </el-form-item>\n <el-form-item label=\"Current Connections\">\n <span>{{ cur_conns }}</span>\n </el-form-item>\n <el-form-item label=\"Proxy Counts\">\n <span>{{ proxy_counts }}</span>\n </el-form-item>\n </el-form>\n </div>\n </el-col>\n <el-col :md=\"12\">\n <div id=\"traffic\" style=\"width: 400px; height: 250px; margin-bottom: 30px\" />\n <div id=\"proxies\" style=\"width: 400px; height: 250px\" />\n </el-col>\n </el-row>\n </div>\n</template>\n\n<script>\nimport { DrawTrafficChart, DrawProxyChart } from '../utils/chart.js'\nexport default {\n data() {\n return {\n version: '',\n bind_port: '',\n bind_udp_port: '',\n vhost_http_port: '',\n vhost_https_port: '',\n subdomain_host: '',\n max_pool_count: '',\n max_ports_per_client: '',\n heart_beat_timeout: '',\n client_counts: '',\n cur_conns: '',\n proxy_counts: ''\n }\n },\n computed: {\n serverInfo() {\n return this.$store.state.serverInfo\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n initData() {\n console.log(!!this.serverInfo, this.serverInfo)\n if (!this.serverInfo) return\n\n this.version = this.serverInfo.version\n this.bind_port = this.serverInfo.bind_port\n this.bind_udp_port = this.serverInfo.bind_udp_port\n if (this.bind_udp_port === 0) {\n this.bind_udp_port = 'disable'\n }\n this.vhost_http_port = this.serverInfo.vhost_http_port\n if (this.vhost_http_port === 0) {\n this.vhost_http_port = 'disable'\n }\n this.vhost_https_port = this.serverInfo.vhost_https_port\n if (this.vhost_https_port === 0) {\n this.vhost_https_port = 'disable'\n }\n this.subdomain_host = this.serverInfo.subdomain_host\n this.max_pool_count = this.serverInfo.max_pool_count\n this.max_ports_per_client = this.serverInfo.max_ports_per_client\n if (this.max_ports_per_client === 0) {\n this.max_ports_per_client = 'no limit'\n }\n this.heart_beat_timeout = this.serverInfo.heart_beat_timeout\n this.client_counts = this.serverInfo.client_counts\n this.cur_conns = this.serverInfo.cur_conns\n this.proxy_counts = 0\n if (this.serverInfo.proxy_type_count != null) {\n if (this.serverInfo.proxy_type_count.tcp != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.tcp\n }\n if (this.serverInfo.proxy_type_count.udp != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.udp\n }\n if (this.serverInfo.proxy_type_count.http != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.http\n }\n if (this.serverInfo.proxy_type_count.https != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.https\n }\n if (this.serverInfo.proxy_type_count.stcp != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.stcp\n }\n if (this.serverInfo.proxy_type_count.xtcp != null) {\n this.proxy_counts += this.serverInfo.proxy_type_count.xtcp\n }\n }\n DrawTrafficChart('traffic', this.serverInfo.total_traffic_in, this.serverInfo.total_traffic_out)\n DrawProxyChart('proxies', this.serverInfo)\n }\n }\n}\n</script>\n\n<style>\n.source {\n border: 1px solid #eaeefb;\n border-radius: 4px;\n transition: 0.2s;\n padding: 24px;\n}\n\n.server_info {\n margin-left: 40px;\n font-size: 0px;\n}\n\n.server_info label {\n width: 150px;\n color: #99a9bf;\n}\n\n.server_info .el-form-item {\n margin-right: 0;\n margin-bottom: 0;\n width: 100%;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Overview.vue?vue&type=template&id=741f043c&\"\nimport script from \"./Overview.vue?vue&type=script&lang=js&\"\nexport * from \"./Overview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Overview.vue?vue&type=style&index=0&lang=css&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.proxies,\"default-sort\":{ prop: 'name', order: 'ascending' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c('el-popover',{staticStyle:{\"margin-left\":\"0px\"},attrs:{\"placement\":\"right\",\"width\":\"600\",\"trigger\":\"click\"}},[_c('my-traffic-chart',{attrs:{\"proxy-name\":props.row.name}}),_c('el-button',{staticStyle:{\"margin-bottom\":\"10px\"},attrs:{\"slot\":\"reference\",\"type\":\"primary\",\"size\":\"small\",\"icon\":\"view\",\"name\":props.row.name},slot:\"reference\"},[_vm._v(\" Traffic Statistics \")])],1),_c('el-form',{staticClass:\"demo-table-expand\",attrs:{\"label-position\":\"left\",\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"Name\"}},[_c('span',[_vm._v(_vm._s(props.row.name))])]),_c('el-form-item',{attrs:{\"label\":\"Type\"}},[_c('span',[_vm._v(_vm._s(props.row.type))])]),_c('el-form-item',{attrs:{\"label\":\"Addr\"}},[_c('span',[_vm._v(_vm._s(props.row.addr))])]),_c('el-form-item',{attrs:{\"label\":\"Encryption\"}},[_c('span',[_vm._v(_vm._s(props.row.encryption))])]),_c('el-form-item',{attrs:{\"label\":\"Compression\"}},[_c('span',[_vm._v(_vm._s(props.row.compression))])]),_c('el-form-item',{attrs:{\"label\":\"Last Start\"}},[_c('span',[_vm._v(_vm._s(props.row.last_start_time))])]),_c('el-form-item',{attrs:{\"label\":\"Last Close\"}},[_c('span',[_vm._v(_vm._s(props.row.last_close_time))])])],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"Name\",\"prop\":\"name\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Port\",\"prop\":\"port\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Connections\",\"prop\":\"conns\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic In\",\"prop\":\"traffic_in\",\"formatter\":_vm.formatTrafficIn,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic Out\",\"prop\":\"traffic_out\",\"formatter\":_vm.formatTrafficOut,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"status\",\"prop\":\"status\",\"sortable\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.status === 'online')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(scope.row.status))]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(_vm._s(scope.row.status))])]}}])})],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('div',{staticStyle:{\"width\":\"600px\",\"height\":\"400px\"},attrs:{\"id\":_vm.proxyName}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :id=\"proxyName\" style=\"width: 600px; height: 400px\" />\n</template>\n\n<script>\nimport { DrawProxyTrafficChart } from '../utils/chart.js'\nexport default {\n props: {\n proxyName: {\n type: String,\n required: true\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n async initData() {\n const json = await this.$fetch(`traffic/${this.proxyName}`)\n if (!json) return\n\n DrawProxyTrafficChart(this.proxyName, json.traffic_in, json.traffic_out)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Traffic.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Traffic.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Traffic.vue?vue&type=template&id=727c3110&\"\nimport script from \"./Traffic.vue?vue&type=script&lang=js&\"\nexport * from \"./Traffic.vue?vue&type=script&lang=js&\"\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","class BaseProxy {\n constructor(proxyStats) {\n this.name = proxyStats.name\n if (proxyStats.conf != null) {\n this.encryption = proxyStats.conf.use_encryption\n this.compression = proxyStats.conf.use_compression\n } else {\n this.encryption = ''\n this.compression = ''\n }\n this.conns = proxyStats.cur_conns\n this.traffic_in = proxyStats.today_traffic_in\n this.traffic_out = proxyStats.today_traffic_out\n this.last_start_time = proxyStats.last_start_time\n this.last_close_time = proxyStats.last_close_time\n this.status = proxyStats.status\n }\n}\n\nclass TcpProxy extends BaseProxy {\n constructor(proxyStats) {\n super(proxyStats)\n this.type = 'tcp'\n if (proxyStats.conf != null) {\n this.addr = ':' + proxyStats.conf.remote_port\n this.port = proxyStats.conf.remote_port\n } else {\n this.addr = ''\n this.port = ''\n }\n }\n}\n\nclass UdpProxy extends BaseProxy {\n constructor(proxyStats) {\n super(proxyStats)\n this.type = 'udp'\n if (proxyStats.conf != null) {\n this.addr = ':' + proxyStats.conf.remote_port\n this.port = proxyStats.conf.remote_port\n } else {\n this.addr = ''\n this.port = ''\n }\n }\n}\n\nclass HttpProxy extends BaseProxy {\n constructor(proxyStats, port, subdomain_host) {\n super(proxyStats)\n this.type = 'http'\n this.port = port\n if (proxyStats.conf != null) {\n this.custom_domains = proxyStats.conf.custom_domains\n this.host_header_rewrite = proxyStats.conf.host_header_rewrite\n this.locations = proxyStats.conf.locations\n if (proxyStats.conf.sub_domain !== '') {\n this.subdomain = proxyStats.conf.sub_domain + '.' + subdomain_host\n } else {\n this.subdomain = ''\n }\n } else {\n this.custom_domains = ''\n this.host_header_rewrite = ''\n this.subdomain = ''\n this.locations = ''\n }\n }\n}\n\nclass HttpsProxy extends BaseProxy {\n constructor(proxyStats, port, subdomain_host) {\n super(proxyStats)\n this.type = 'https'\n this.port = port\n if (proxyStats.conf != null) {\n this.custom_domains = proxyStats.conf.custom_domains\n if (proxyStats.conf.sub_domain !== '') {\n this.subdomain = proxyStats.conf.sub_domain + '.' + subdomain_host\n } else {\n this.subdomain = ''\n }\n } else {\n this.custom_domains = ''\n this.subdomain = ''\n }\n }\n}\n\nclass StcpProxy extends BaseProxy {\n constructor(proxyStats) {\n super(proxyStats)\n this.type = 'stcp'\n }\n}\n\nexport { BaseProxy, TcpProxy, UdpProxy, HttpProxy, HttpsProxy, StcpProxy }\n","<template>\n <div>\n <el-table :data=\"proxies\" :default-sort=\"{ prop: 'name', order: 'ascending' }\" style=\"width: 100%\">\n <el-table-column type=\"expand\">\n <template slot-scope=\"props\">\n <el-popover placement=\"right\" width=\"600\" style=\"margin-left: 0px\" trigger=\"click\">\n <my-traffic-chart :proxy-name=\"props.row.name\" />\n\n <el-button slot=\"reference\" type=\"primary\" size=\"small\" icon=\"view\" :name=\"props.row.name\" style=\"margin-bottom: 10px\">\n Traffic Statistics\n </el-button>\n </el-popover>\n\n <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n <el-form-item label=\"Name\">\n <span>{{ props.row.name }}</span>\n </el-form-item>\n <el-form-item label=\"Type\">\n <span>{{ props.row.type }}</span>\n </el-form-item>\n <el-form-item label=\"Addr\">\n <span>{{ props.row.addr }}</span>\n </el-form-item>\n <el-form-item label=\"Encryption\">\n <span>{{ props.row.encryption }}</span>\n </el-form-item>\n <el-form-item label=\"Compression\">\n <span>{{ props.row.compression }}</span>\n </el-form-item>\n <el-form-item label=\"Last Start\">\n <span>{{ props.row.last_start_time }}</span>\n </el-form-item>\n <el-form-item label=\"Last Close\">\n <span>{{ props.row.last_close_time }}</span>\n </el-form-item>\n </el-form>\n </template>\n </el-table-column>\n <el-table-column label=\"Name\" prop=\"name\" sortable />\n <el-table-column label=\"Port\" prop=\"port\" sortable />\n <el-table-column label=\"Connections\" prop=\"conns\" sortable />\n <el-table-column label=\"Traffic In\" prop=\"traffic_in\" :formatter=\"formatTrafficIn\" sortable />\n <el-table-column label=\"Traffic Out\" prop=\"traffic_out\" :formatter=\"formatTrafficOut\" sortable />\n <el-table-column label=\"status\" prop=\"status\" sortable>\n <template slot-scope=\"scope\">\n <el-tag v-if=\"scope.row.status === 'online'\" type=\"success\">{{ scope.row.status }}</el-tag>\n <el-tag v-else type=\"danger\">{{ scope.row.status }}</el-tag>\n </template>\n </el-table-column>\n </el-table>\n </div>\n</template>\n\n<script>\nimport Humanize from 'humanize-plus'\nimport Traffic from './Traffic.vue'\nimport { TcpProxy } from '../utils/proxy.js'\nexport default {\n components: {\n 'my-traffic-chart': Traffic\n },\n data() {\n return {\n proxies: []\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n formatTrafficIn(row, column) {\n return Humanize.fileSize(row.traffic_in)\n },\n formatTrafficOut(row, column) {\n return Humanize.fileSize(row.traffic_out)\n },\n async initData() {\n const json = await this.$fetch('proxy/tcp')\n if (!json) return\n\n this.proxies = []\n for (const proxyStats of json.proxies) {\n this.proxies.push(new TcpProxy(proxyStats))\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesTcp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesTcp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProxiesTcp.vue?vue&type=template&id=7b2e90dc&\"\nimport script from \"./ProxiesTcp.vue?vue&type=script&lang=js&\"\nexport * from \"./ProxiesTcp.vue?vue&type=script&lang=js&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.proxies,\"default-sort\":{ prop: 'name', order: 'ascending' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c('el-popover',{ref:\"popover4\",staticStyle:{\"margin-left\":\"0px\"},attrs:{\"placement\":\"right\",\"width\":\"600\",\"trigger\":\"click\"}},[_c('my-traffic-chart',{attrs:{\"proxy-name\":props.row.name}})],1),_c('el-button',{directives:[{name:\"popover\",rawName:\"v-popover:popover4\",arg:\"popover4\"}],staticStyle:{\"margin-bottom\":\"10px\"},attrs:{\"type\":\"primary\",\"size\":\"small\",\"icon\":\"view\"}},[_vm._v(\"Traffic Statistics\")]),_c('el-form',{staticClass:\"demo-table-expand\",attrs:{\"label-position\":\"left\",\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"Name\"}},[_c('span',[_vm._v(_vm._s(props.row.name))])]),_c('el-form-item',{attrs:{\"label\":\"Type\"}},[_c('span',[_vm._v(_vm._s(props.row.type))])]),_c('el-form-item',{attrs:{\"label\":\"Addr\"}},[_c('span',[_vm._v(_vm._s(props.row.addr))])]),_c('el-form-item',{attrs:{\"label\":\"Encryption\"}},[_c('span',[_vm._v(_vm._s(props.row.encryption))])]),_c('el-form-item',{attrs:{\"label\":\"Compression\"}},[_c('span',[_vm._v(_vm._s(props.row.compression))])]),_c('el-form-item',{attrs:{\"label\":\"Last Start\"}},[_c('span',[_vm._v(_vm._s(props.row.last_start_time))])]),_c('el-form-item',{attrs:{\"label\":\"Last Close\"}},[_c('span',[_vm._v(_vm._s(props.row.last_close_time))])])],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"Name\",\"prop\":\"name\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Port\",\"prop\":\"port\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Connections\",\"prop\":\"conns\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic In\",\"prop\":\"traffic_in\",\"formatter\":_vm.formatTrafficIn,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic Out\",\"prop\":\"traffic_out\",\"formatter\":_vm.formatTrafficOut,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"status\",\"prop\":\"status\",\"sortable\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.status === 'online')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(scope.row.status))]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(_vm._s(scope.row.status))])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <el-table :data=\"proxies\" :default-sort=\"{ prop: 'name', order: 'ascending' }\" style=\"width: 100%\">\n <el-table-column type=\"expand\">\n <template slot-scope=\"props\">\n <el-popover ref=\"popover4\" placement=\"right\" width=\"600\" style=\"margin-left: 0px\" trigger=\"click\">\n <my-traffic-chart :proxy-name=\"props.row.name\" />\n </el-popover>\n\n <el-button v-popover:popover4 type=\"primary\" size=\"small\" icon=\"view\" style=\"margin-bottom: 10px\">Traffic Statistics</el-button>\n\n <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n <el-form-item label=\"Name\">\n <span>{{ props.row.name }}</span>\n </el-form-item>\n <el-form-item label=\"Type\">\n <span>{{ props.row.type }}</span>\n </el-form-item>\n <el-form-item label=\"Addr\">\n <span>{{ props.row.addr }}</span>\n </el-form-item>\n <el-form-item label=\"Encryption\">\n <span>{{ props.row.encryption }}</span>\n </el-form-item>\n <el-form-item label=\"Compression\">\n <span>{{ props.row.compression }}</span>\n </el-form-item>\n <el-form-item label=\"Last Start\">\n <span>{{ props.row.last_start_time }}</span>\n </el-form-item>\n <el-form-item label=\"Last Close\">\n <span>{{ props.row.last_close_time }}</span>\n </el-form-item>\n </el-form>\n </template>\n </el-table-column>\n <el-table-column label=\"Name\" prop=\"name\" sortable />\n <el-table-column label=\"Port\" prop=\"port\" sortable />\n <el-table-column label=\"Connections\" prop=\"conns\" sortable />\n <el-table-column label=\"Traffic In\" prop=\"traffic_in\" :formatter=\"formatTrafficIn\" sortable />\n <el-table-column label=\"Traffic Out\" prop=\"traffic_out\" :formatter=\"formatTrafficOut\" sortable />\n <el-table-column label=\"status\" prop=\"status\" sortable>\n <template slot-scope=\"scope\">\n <el-tag v-if=\"scope.row.status === 'online'\" type=\"success\">{{ scope.row.status }}</el-tag>\n <el-tag v-else type=\"danger\">{{ scope.row.status }}</el-tag>\n </template>\n </el-table-column>\n </el-table>\n </div>\n</template>\n\n<script>\nimport Humanize from 'humanize-plus'\nimport Traffic from './Traffic.vue'\nimport { UdpProxy } from '../utils/proxy.js'\nexport default {\n components: {\n 'my-traffic-chart': Traffic\n },\n data() {\n return {\n proxies: []\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n formatTrafficIn(row, column) {\n return Humanize.fileSize(row.traffic_in)\n },\n formatTrafficOut(row, column) {\n return Humanize.fileSize(row.traffic_out)\n },\n async initData() {\n const json = await this.$fetch('proxy/udp')\n if (!json) return\n\n this.proxies = []\n for (const proxyStats of json.proxies) {\n this.proxies.push(new UdpProxy(proxyStats))\n }\n }\n }\n}\n</script>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesUdp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesUdp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProxiesUdp.vue?vue&type=template&id=c2219320&\"\nimport script from \"./ProxiesUdp.vue?vue&type=script&lang=js&\"\nexport * from \"./ProxiesUdp.vue?vue&type=script&lang=js&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.proxies,\"default-sort\":{ prop: 'name', order: 'ascending' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c('el-popover',{ref:\"popover4\",staticStyle:{\"margin-left\":\"0px\"},attrs:{\"placement\":\"right\",\"width\":\"600\",\"trigger\":\"click\"}},[_c('my-traffic-chart',{attrs:{\"proxy-name\":props.row.name}})],1),_c('el-button',{directives:[{name:\"popover\",rawName:\"v-popover:popover4\",arg:\"popover4\"}],staticStyle:{\"margin-bottom\":\"10px\"},attrs:{\"type\":\"primary\",\"size\":\"small\",\"icon\":\"view\"}},[_vm._v(\"Traffic Statistics\")]),_c('el-form',{staticClass:\"demo-table-expand\",attrs:{\"label-position\":\"left\",\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"Name\"}},[_c('span',[_vm._v(_vm._s(props.row.name))])]),_c('el-form-item',{attrs:{\"label\":\"Type\"}},[_c('span',[_vm._v(_vm._s(props.row.type))])]),_c('el-form-item',{attrs:{\"label\":\"Domains\"}},[_c('span',[_vm._v(_vm._s(props.row.custom_domains))])]),_c('el-form-item',{attrs:{\"label\":\"SubDomain\"}},[_c('span',[_vm._v(_vm._s(props.row.subdomain))])]),_c('el-form-item',{attrs:{\"label\":\"locations\"}},[_c('span',[_vm._v(_vm._s(props.row.locations))])]),_c('el-form-item',{attrs:{\"label\":\"HostRewrite\"}},[_c('span',[_vm._v(_vm._s(props.row.host_header_rewrite))])]),_c('el-form-item',{attrs:{\"label\":\"Encryption\"}},[_c('span',[_vm._v(_vm._s(props.row.encryption))])]),_c('el-form-item',{attrs:{\"label\":\"Compression\"}},[_c('span',[_vm._v(_vm._s(props.row.compression))])]),_c('el-form-item',{attrs:{\"label\":\"Last Start\"}},[_c('span',[_vm._v(_vm._s(props.row.last_start_time))])]),_c('el-form-item',{attrs:{\"label\":\"Last Close\"}},[_c('span',[_vm._v(_vm._s(props.row.last_close_time))])])],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"Name\",\"prop\":\"name\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Port\",\"prop\":\"port\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Connections\",\"prop\":\"conns\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic In\",\"prop\":\"traffic_in\",\"formatter\":_vm.formatTrafficIn,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic Out\",\"prop\":\"traffic_out\",\"formatter\":_vm.formatTrafficOut,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"status\",\"prop\":\"status\",\"sortable\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.status === 'online')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(scope.row.status))]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(_vm._s(scope.row.status))])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <el-table :data=\"proxies\" :default-sort=\"{ prop: 'name', order: 'ascending' }\" style=\"width: 100%\">\n <el-table-column type=\"expand\">\n <template slot-scope=\"props\">\n <el-popover ref=\"popover4\" placement=\"right\" width=\"600\" style=\"margin-left: 0px\" trigger=\"click\">\n <my-traffic-chart :proxy-name=\"props.row.name\" />\n </el-popover>\n\n <el-button v-popover:popover4 type=\"primary\" size=\"small\" icon=\"view\" style=\"margin-bottom: 10px\">Traffic Statistics</el-button>\n\n <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n <el-form-item label=\"Name\">\n <span>{{ props.row.name }}</span>\n </el-form-item>\n <el-form-item label=\"Type\">\n <span>{{ props.row.type }}</span>\n </el-form-item>\n <el-form-item label=\"Domains\">\n <span>{{ props.row.custom_domains }}</span>\n </el-form-item>\n <el-form-item label=\"SubDomain\">\n <span>{{ props.row.subdomain }}</span>\n </el-form-item>\n <el-form-item label=\"locations\">\n <span>{{ props.row.locations }}</span>\n </el-form-item>\n <el-form-item label=\"HostRewrite\">\n <span>{{ props.row.host_header_rewrite }}</span>\n </el-form-item>\n <el-form-item label=\"Encryption\">\n <span>{{ props.row.encryption }}</span>\n </el-form-item>\n <el-form-item label=\"Compression\">\n <span>{{ props.row.compression }}</span>\n </el-form-item>\n <el-form-item label=\"Last Start\">\n <span>{{ props.row.last_start_time }}</span>\n </el-form-item>\n <el-form-item label=\"Last Close\">\n <span>{{ props.row.last_close_time }}</span>\n </el-form-item>\n </el-form>\n </template>\n </el-table-column>\n <el-table-column label=\"Name\" prop=\"name\" sortable />\n <el-table-column label=\"Port\" prop=\"port\" sortable />\n <el-table-column label=\"Connections\" prop=\"conns\" sortable />\n <el-table-column label=\"Traffic In\" prop=\"traffic_in\" :formatter=\"formatTrafficIn\" sortable />\n <el-table-column label=\"Traffic Out\" prop=\"traffic_out\" :formatter=\"formatTrafficOut\" sortable />\n <el-table-column label=\"status\" prop=\"status\" sortable>\n <template slot-scope=\"scope\">\n <el-tag v-if=\"scope.row.status === 'online'\" type=\"success\">{{ scope.row.status }}</el-tag>\n <el-tag v-else type=\"danger\">{{ scope.row.status }}</el-tag>\n </template>\n </el-table-column>\n </el-table>\n </div>\n</template>\n\n<script>\nimport Humanize from 'humanize-plus'\nimport Traffic from './Traffic.vue'\nimport { HttpProxy } from '../utils/proxy.js'\nexport default {\n components: {\n 'my-traffic-chart': Traffic\n },\n data() {\n return {\n proxies: [],\n vhost_http_port: '',\n subdomain_host: ''\n }\n },\n computed: {\n serverInfo() {\n return this.$store.state.serverInfo\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n formatTrafficIn(row, column) {\n return Humanize.fileSize(row.traffic_in)\n },\n formatTrafficOut(row, column) {\n return Humanize.fileSize(row.traffic_out)\n },\n async initData() {\n if (!this.serverInfo) return\n this.vhost_http_port = this.serverInfo.vhost_http_port\n this.subdomain_host = this.serverInfo.subdomain_host\n if (this.vhost_http_port == null || this.vhost_http_port === 0) return\n\n const json = await this.$fetch('proxy/http')\n if (!json) return\n\n this.proxies = []\n for (const proxyStats of json.proxies) {\n this.proxies.push(new HttpProxy(proxyStats, this.vhost_http_port, this.subdomain_host))\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesHttp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesHttp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProxiesHttp.vue?vue&type=template&id=680539ac&\"\nimport script from \"./ProxiesHttp.vue?vue&type=script&lang=js&\"\nexport * from \"./ProxiesHttp.vue?vue&type=script&lang=js&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.proxies,\"default-sort\":{ prop: 'name', order: 'ascending' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c('el-popover',{ref:\"popover4\",staticStyle:{\"margin-left\":\"0px\"},attrs:{\"placement\":\"right\",\"width\":\"600\",\"trigger\":\"click\"}},[_c('my-traffic-chart',{attrs:{\"proxy-name\":props.row.name}})],1),_c('el-button',{directives:[{name:\"popover\",rawName:\"v-popover:popover4\",arg:\"popover4\"}],staticStyle:{\"margin-bottom\":\"10px\"},attrs:{\"type\":\"primary\",\"size\":\"small\",\"icon\":\"view\"}},[_vm._v(\"Traffic Statistics\")]),_c('el-form',{staticClass:\"demo-table-expand\",attrs:{\"label-position\":\"left\",\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"Name\"}},[_c('span',[_vm._v(_vm._s(props.row.name))])]),_c('el-form-item',{attrs:{\"label\":\"Type\"}},[_c('span',[_vm._v(_vm._s(props.row.type))])]),_c('el-form-item',{attrs:{\"label\":\"Domains\"}},[_c('span',[_vm._v(_vm._s(props.row.custom_domains))])]),_c('el-form-item',{attrs:{\"label\":\"SubDomain\"}},[_c('span',[_vm._v(_vm._s(props.row.subdomain))])]),_c('el-form-item',{attrs:{\"label\":\"Encryption\"}},[_c('span',[_vm._v(_vm._s(props.row.encryption))])]),_c('el-form-item',{attrs:{\"label\":\"Compression\"}},[_c('span',[_vm._v(_vm._s(props.row.compression))])]),_c('el-form-item',{attrs:{\"label\":\"Last Start\"}},[_c('span',[_vm._v(_vm._s(props.row.last_start_time))])]),_c('el-form-item',{attrs:{\"label\":\"Last Close\"}},[_c('span',[_vm._v(_vm._s(props.row.last_close_time))])])],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"Name\",\"prop\":\"name\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Port\",\"prop\":\"port\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Connections\",\"prop\":\"conns\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic In\",\"prop\":\"traffic_in\",\"formatter\":_vm.formatTrafficIn,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic Out\",\"prop\":\"traffic_out\",\"formatter\":_vm.formatTrafficOut,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"status\",\"prop\":\"status\",\"sortable\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.status === 'online')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(scope.row.status))]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(_vm._s(scope.row.status))])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <el-table :data=\"proxies\" :default-sort=\"{ prop: 'name', order: 'ascending' }\" style=\"width: 100%\">\n <el-table-column type=\"expand\">\n <template slot-scope=\"props\">\n <el-popover ref=\"popover4\" placement=\"right\" width=\"600\" style=\"margin-left: 0px\" trigger=\"click\">\n <my-traffic-chart :proxy-name=\"props.row.name\" />\n </el-popover>\n\n <el-button v-popover:popover4 type=\"primary\" size=\"small\" icon=\"view\" style=\"margin-bottom: 10px\">Traffic Statistics</el-button>\n\n <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n <el-form-item label=\"Name\">\n <span>{{ props.row.name }}</span>\n </el-form-item>\n <el-form-item label=\"Type\">\n <span>{{ props.row.type }}</span>\n </el-form-item>\n <el-form-item label=\"Domains\">\n <span>{{ props.row.custom_domains }}</span>\n </el-form-item>\n <el-form-item label=\"SubDomain\">\n <span>{{ props.row.subdomain }}</span>\n </el-form-item>\n <el-form-item label=\"Encryption\">\n <span>{{ props.row.encryption }}</span>\n </el-form-item>\n <el-form-item label=\"Compression\">\n <span>{{ props.row.compression }}</span>\n </el-form-item>\n <el-form-item label=\"Last Start\">\n <span>{{ props.row.last_start_time }}</span>\n </el-form-item>\n <el-form-item label=\"Last Close\">\n <span>{{ props.row.last_close_time }}</span>\n </el-form-item>\n </el-form>\n </template>\n </el-table-column>\n <el-table-column label=\"Name\" prop=\"name\" sortable />\n <el-table-column label=\"Port\" prop=\"port\" sortable />\n <el-table-column label=\"Connections\" prop=\"conns\" sortable />\n <el-table-column label=\"Traffic In\" prop=\"traffic_in\" :formatter=\"formatTrafficIn\" sortable />\n <el-table-column label=\"Traffic Out\" prop=\"traffic_out\" :formatter=\"formatTrafficOut\" sortable />\n <el-table-column label=\"status\" prop=\"status\" sortable>\n <template slot-scope=\"scope\">\n <el-tag v-if=\"scope.row.status === 'online'\" type=\"success\">{{ scope.row.status }}</el-tag>\n <el-tag v-else type=\"danger\">{{ scope.row.status }}</el-tag>\n </template>\n </el-table-column>\n </el-table>\n </div>\n</template>\n\n<script>\nimport Humanize from 'humanize-plus'\nimport Traffic from './Traffic.vue'\nimport { HttpsProxy } from '../utils/proxy.js'\nexport default {\n components: {\n 'my-traffic-chart': Traffic\n },\n data() {\n return {\n proxies: [],\n vhost_https_port: '',\n subdomain_host: ''\n }\n },\n computed: {\n serverInfo() {\n return this.$store.state.serverInfo\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n formatTrafficIn(row, column) {\n return Humanize.fileSize(row.traffic_in)\n },\n formatTrafficOut(row, column) {\n return Humanize.fileSize(row.traffic_out)\n },\n async initData() {\n if (!this.serverInfo) return\n\n this.vhost_https_port = this.serverInfo.vhost_https_port\n this.subdomain_host = this.serverInfo.subdomain_host\n if (this.vhost_https_port == null || this.vhost_https_port === 0) return\n\n const json = await this.$fetch('proxy/https')\n if (!json) return\n\n this.proxies = []\n for (const proxyStats of json.proxies) {\n this.proxies.push(new HttpsProxy(proxyStats, this.vhost_https_port, this.subdomain_host))\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesHttps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesHttps.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProxiesHttps.vue?vue&type=template&id=cb1a920a&\"\nimport script from \"./ProxiesHttps.vue?vue&type=script&lang=js&\"\nexport * from \"./ProxiesHttps.vue?vue&type=script&lang=js&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-table',{staticStyle:{\"width\":\"100%\"},attrs:{\"data\":_vm.proxies,\"default-sort\":{ prop: 'name', order: 'ascending' }}},[_c('el-table-column',{attrs:{\"type\":\"expand\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [_c('el-popover',{ref:\"popover4\",staticStyle:{\"margin-left\":\"0px\"},attrs:{\"placement\":\"right\",\"width\":\"600\",\"trigger\":\"click\"}},[_c('my-traffic-chart',{attrs:{\"proxy-name\":props.row.name}})],1),_c('el-button',{directives:[{name:\"popover\",rawName:\"v-popover:popover4\",arg:\"popover4\"}],staticStyle:{\"margin-bottom\":\"10px\"},attrs:{\"type\":\"primary\",\"size\":\"small\",\"icon\":\"view\",\"name\":props.row.name},on:{\"click\":_vm.fetchData2}},[_vm._v(\" Traffic Statistics \")]),_c('el-form',{staticClass:\"demo-table-expand\",attrs:{\"label-position\":\"left\",\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"Name\"}},[_c('span',[_vm._v(_vm._s(props.row.name))])]),_c('el-form-item',{attrs:{\"label\":\"Type\"}},[_c('span',[_vm._v(_vm._s(props.row.type))])]),_c('el-form-item',{attrs:{\"label\":\"Encryption\"}},[_c('span',[_vm._v(_vm._s(props.row.encryption))])]),_c('el-form-item',{attrs:{\"label\":\"Compression\"}},[_c('span',[_vm._v(_vm._s(props.row.compression))])]),_c('el-form-item',{attrs:{\"label\":\"Last Start\"}},[_c('span',[_vm._v(_vm._s(props.row.last_start_time))])]),_c('el-form-item',{attrs:{\"label\":\"Last Close\"}},[_c('span',[_vm._v(_vm._s(props.row.last_close_time))])])],1)]}}])}),_c('el-table-column',{attrs:{\"label\":\"Name\",\"prop\":\"name\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Connections\",\"prop\":\"conns\",\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic In\",\"prop\":\"traffic_in\",\"formatter\":_vm.formatTrafficIn,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"Traffic Out\",\"prop\":\"traffic_out\",\"formatter\":_vm.formatTrafficOut,\"sortable\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"status\",\"prop\":\"status\",\"sortable\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.status === 'online')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(scope.row.status))]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(_vm._s(scope.row.status))])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <el-table :data=\"proxies\" :default-sort=\"{ prop: 'name', order: 'ascending' }\" style=\"width: 100%\">\n <el-table-column type=\"expand\">\n <template slot-scope=\"props\">\n <el-popover ref=\"popover4\" placement=\"right\" width=\"600\" style=\"margin-left: 0px\" trigger=\"click\">\n <my-traffic-chart :proxy-name=\"props.row.name\" />\n </el-popover>\n\n <el-button v-popover:popover4 type=\"primary\" size=\"small\" icon=\"view\" :name=\"props.row.name\" style=\"margin-bottom: 10px\" @click=\"fetchData2\">\n Traffic Statistics\n </el-button>\n\n <el-form label-position=\"left\" inline class=\"demo-table-expand\">\n <el-form-item label=\"Name\">\n <span>{{ props.row.name }}</span>\n </el-form-item>\n <el-form-item label=\"Type\">\n <span>{{ props.row.type }}</span>\n </el-form-item>\n <el-form-item label=\"Encryption\">\n <span>{{ props.row.encryption }}</span>\n </el-form-item>\n <el-form-item label=\"Compression\">\n <span>{{ props.row.compression }}</span>\n </el-form-item>\n <el-form-item label=\"Last Start\">\n <span>{{ props.row.last_start_time }}</span>\n </el-form-item>\n <el-form-item label=\"Last Close\">\n <span>{{ props.row.last_close_time }}</span>\n </el-form-item>\n </el-form>\n </template>\n </el-table-column>\n <el-table-column label=\"Name\" prop=\"name\" sortable />\n <el-table-column label=\"Connections\" prop=\"conns\" sortable />\n <el-table-column label=\"Traffic In\" prop=\"traffic_in\" :formatter=\"formatTrafficIn\" sortable />\n <el-table-column label=\"Traffic Out\" prop=\"traffic_out\" :formatter=\"formatTrafficOut\" sortable />\n <el-table-column label=\"status\" prop=\"status\" sortable>\n <template slot-scope=\"scope\">\n <el-tag v-if=\"scope.row.status === 'online'\" type=\"success\">{{ scope.row.status }}</el-tag>\n <el-tag v-else type=\"danger\">{{ scope.row.status }}</el-tag>\n </template>\n </el-table-column>\n </el-table>\n </div>\n</template>\n\n<script>\nimport Humanize from 'humanize-plus'\nimport Traffic from './Traffic.vue'\nimport { StcpProxy } from '../utils/proxy.js'\nexport default {\n components: {\n 'my-traffic-chart': Traffic\n },\n data() {\n return {\n proxies: []\n }\n },\n mounted() {\n this.initData()\n },\n methods: {\n formatTrafficIn(row, column) {\n return Humanize.fileSize(row.traffic_in)\n },\n formatTrafficOut(row, column) {\n return Humanize.fileSize(row.traffic_out)\n },\n async initData() {\n const json = await this.$fetch('proxy/stcp')\n if (!json) return\n\n this.proxies = []\n for (const proxyStats of json.proxies) {\n this.proxies.push(new StcpProxy(proxyStats))\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesStcp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProxiesStcp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProxiesStcp.vue?vue&type=template&id=c583efaa&\"\nimport script from \"./ProxiesStcp.vue?vue&type=script&lang=js&\"\nexport * from \"./ProxiesStcp.vue?vue&type=script&lang=js&\"\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","import Vue from 'vue'\nimport Router from 'vue-router'\nimport Overview from '../components/Overview.vue'\nimport ProxiesTcp from '../components/ProxiesTcp.vue'\nimport ProxiesUdp from '../components/ProxiesUdp.vue'\nimport ProxiesHttp from '../components/ProxiesHttp.vue'\nimport ProxiesHttps from '../components/ProxiesHttps.vue'\nimport ProxiesStcp from '../components/ProxiesStcp.vue'\n\nVue.use(Router)\n\nexport default new Router({\n routes: [\n {\n path: '/',\n name: 'Overview',\n component: Overview\n },\n {\n path: '/proxies/tcp',\n name: 'ProxiesTcp',\n component: ProxiesTcp\n },\n {\n path: '/proxies/udp',\n name: 'ProxiesUdp',\n component: ProxiesUdp\n },\n {\n path: '/proxies/http',\n name: 'ProxiesHttp',\n component: ProxiesHttp\n },\n {\n path: '/proxies/https',\n name: 'ProxiesHttps',\n component: ProxiesHttps\n },\n {\n path: '/proxies/stcp',\n name: 'ProxiesStcp',\n component: ProxiesStcp\n }\n ]\n})\n","import { Message } from 'element-ui'\n\nexport default function(api, init = {}) {\n return new Promise(resolve => {\n fetch(`/api/${api}`, Object.assign({ credentials: 'include' }, init))\n .then(res => {\n if (res.status < 200 || res.status >= 300) {\n Message.warning('Get server info from frps failed!')\n resolve()\n return\n }\n\n resolve(res ? res.json() : undefined)\n })\n .catch(err => {\n this.$message.error(err.message)\n resolve()\n })\n })\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport fetch from '@/utils/fetch'\nVue.use(Vuex)\n\nconst store = new Vuex.Store({\n state: {\n serverInfo: null\n },\n mutations: {\n SET_SERVER_INFO(state, serverInfo) {\n state.serverInfo = serverInfo\n }\n },\n actions: {\n async fetchServerInfo({ commit }) {\n const json = await fetch('serverinfo')\n commit('SET_SERVER_INFO', json || null)\n return json\n }\n }\n})\n\nexport default store\n","import Vue from 'vue'\n// import ElementUI from 'element-ui'\nimport { Button, Form, FormItem, Row, Col, Table, TableColumn, Popover, Menu, Submenu, MenuItem, Tag, Message } from 'element-ui'\nimport lang from 'element-ui/lib/locale/lang/en'\nimport locale from 'element-ui/lib/locale'\nimport 'element-ui/lib/theme-chalk/index.css'\nimport './utils/less/custom.less'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from '@/store'\nimport 'whatwg-fetch'\n\nlocale.use(lang)\n\nVue.use(Button)\nVue.use(Form)\nVue.use(FormItem)\nVue.use(Row)\nVue.use(Col)\nVue.use(Table)\nVue.use(TableColumn)\nVue.use(Popover)\nVue.use(Menu)\nVue.use(Submenu)\nVue.use(MenuItem)\nVue.use(Tag)\nVue.prototype.$message = Message\n\nimport fetch from '@/utils/fetch'\nVue.prototype.$fetch = fetch\n\nVue.config.productionTip = false\n\nnew Vue({\n router,\n store,\n render: h => h(App)\n}).$mount('#app')\n"],"sourceRoot":""}