{"version":3,"sources":["helper/auth/CheckAuth.js","contexts/AuthContext.js","components/SidebarMenu.js","contexts/ThemeContext.js","contexts/BroadCastContext.js","components/TextAreaTarget.js","components/LoadingSpinner.js","components/broadcast/DrawerItemKoleksi.js","components/broadcast/DrawerKontak.js","components/broadcast/Tujuan.js","components/broadcast/TextEditor.js","components/broadcast/WYSIWYG.js","components/Heading.js","components/broadcast/TanggalKirim.js","components/broadcast/StartBroadcast.js","components/LoadingMainContent.js","components/broadcast/BroadcastContents.js","components/broadcast/BroadcastPage.js","components/pagenotfound/PageNotFound.js","components/jadwal_pesan/JadwalPesan.js","components/auto_reply/AutoReply.js","components/scrape_data/ScrapeData.js","components/template/Template.js","components/pengaturan/Pengaturan.js","components/label/Label.js","components/label/TambahLabel.js","components/label/UbahLabel.js","components/broadcast/LaporanBroadcast.js","components/broadcast/StatusLaporanBroadcast.js","components/Main.js","contexts/WAAuthContext.js","components/notifications/Alert.js","components/authentication/QRCode.js","contexts/WADataContext.js","components/AccountInformation.js","MainPage.js","helper/auth/CreateAuthentication.js","components/authentication/Login.js","components/Loading.js","App.js","reportWebVitals.js","index.js"],"names":["a","Promise","resolve","reject","fetch","process","credentials","then","response","json","data","status","errorName","message","catch","error","console","log","name","CheckAuth","AuthContext","createContext","AuthContextProvider","props","useState","loading","setLoading","loggedInUser","setLoggedInUser","errorMessage","setErrorMessage","useEffect","user","Cookies","remove","finally","Provider","value","children","SidebarMenu","className","exact","to","icon","faBullhorn","faClock","faTags","faReply","faCloudDownloadAlt","faFile","faCog","ThemeContext","ThemeContextProvider","showSidebar","setShowSidebar","showPopup","setShowPopup","popupMessage","setPopupMessage","showPopupMessage","BroadCastContext","BroadCastContextProvider","loadingBroadcast","setLoadingBroadcast","targetContacts","setTargetContacts","targetContactsError","setTargetContactsError","textContents","setTextContents","textContentsError","setTextContentsError","files","setFiles","filesError","setFilesError","activeContent","setActiveContent","sendNow","setSendNow","date","Date","hour","schedule","setSchedule","scheduleError","setScheduleError","useContext","resetData","validateTargets","errors","targets","split","filter","target","res","length","forEach","match","push","validate","window","scrollTo","top","behavior","e","body","FormData","file","append","method","reqSendFile","resSendFile","doBroadCast","Error","contacts","contents","year","getFullYear","month","getMonth","day","getDate","headers","JSON","stringify","req","startBroadcast","TextAreaTarget","placeholder","onChange","map","i","LoadingSpinner","DrawerItemKoleksi","labels","onClick","join","DrawerKontak","jsx","display","setDisplay","setLabels","setError","getLabels","Tujuan","readXlsxFile","result","alert","readFile","id","faUserPlus","size","onError","code","accepts","maxFileSize","minFileSize","multiple","clickable","faFileExcel","TextEditor","textareaRef","useRef","start","end","cursorPosition","setCursorPosition","handleStyle","c","currentContent","tmpContent","ref","onBlur","current","selectionStart","selectionEnd","tmpArr","WYSIWYG","toJSX","textContent","replace","RegExp","symbol","tag","regex","m","formatted","featuredImage","setFeaturedImage","includes","extension","arrayBuffer","buffer","blob","Blob","url","URL","createObjectURL","setTimeout","maxFiles","color","faTimesCircle","item","index","faTimes","removeContent","undefined","faPlusCircle","src","alt","dangerouslySetInnerHTML","__html","Heading","judul","deskripsi","TanggalKirim","type","checked","selected","minDate","maxDate","addDays","isClearable","disabled","withPortal","StartBroadcast","LoadingMainContent","BroadcastContents","faFolder","BroadcastPage","PageNotFound","JadwalPesan","mounted","setMounted","broadcasts","setBroadcasts","broadcast","_id","removeBroadcast","faTrash","AutoReply","ScrapeData","groups","setGroups","textAreaValues","setTextAreaValues","download","group","participants","participan","importGroupParticipants","faWhatsapp","Template","Pengaturan","Label","confirm","filteredLabels","label","faEdit","removeLabel","faTrashAlt","TambahLabel","labelName","setLabelName","targetContact","setTargetContact","successMessage","setSuccessMessage","onSubmit","preventDefault","targetErrors","validateTarget","contact","createLabel","required","xmlns","fill","viewBox","strokeLinecap","strokeLinejoin","strokeWidth","d","UbahLabel","useParams","setLabel","location","getLabel","updateLabel","locale","items_per_page","jump_to","jump_to_confirm","page","prev_page","next_page","prev_5","next_5","prev_3","next_3","LaporanBroadcast","totalBroadcasts","setTotalBroadcasts","setPage","limit","totalData","getData","badge","pageSize","total","StatusLaporanBroadcast","setData","success","failed","Main","path","component","WAAuthContext","WAAuthProvider","isWaConnected","setIsWaConnected","socket","setSocket","checkWAConnection","err","io","on","onAny","eventName","reload","Alert","QRCode","qrUrl","setQrUrl","qr","toDataURL","watchEmit","removeAllListeners","WADataContext","WADataProvider","setName","phoneNumber","setPhoneNumber","profilePicUrl","setProfilePicUrl","pushname","me","profilePic","getWAClientInfo","width","height","faSignOutAlt","MainPage","AccountInformation","faBars","email","password","CreateAuthentication","Login","setEmail","setPassword","Loading","App","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","require","config","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"6PAAA,sBAAAA,EAAA,+EAEW,IAAIC,SAAQ,SAACC,EAASC,GAGzB,IACIC,MAAM,GAAD,OAAIC,6BAAJ,gBAAoD,CACrDC,YAAa,YAEhBC,MAAK,SAAAC,GAAQ,OAAIA,EAASC,UAC1BF,MAAK,SAAAG,GACiB,OAAhBA,EAAKC,OACJR,EAAO,CACHS,UAAW,eACXC,QAASH,EAAKG,UAGlBX,EAAQQ,EAAKA,SAGpBI,OAAM,SAAAC,GACHC,QAAQC,IAAIF,GACZZ,EAAO,CACHS,UAAW,eACXC,QAASE,EAAMG,UAIzB,MAAOH,GACLC,QAAQC,IAAIF,GACZ,IAAIF,EAAUE,EAAMF,QAEL,kBAAZA,IACCA,EAAU,8CAGdV,EAAO,CACHS,UAAW,eACXC,QAAS,oDAtCzB,4C,sBA4CeM,M,mECxCFC,EAAcC,0BAEdC,EAAsB,SAAAC,GAE/B,MAA8BC,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAAwCF,mBAAS,MAAjD,mBAAOG,EAAP,KAAqBC,EAArB,KACA,EAAwCJ,mBAAS,IAAjD,mBAAOK,EAAP,KAAqBC,EAArB,KAgBA,OAdAC,qBAAU,WACNZ,IACaZ,MAAK,SAAAG,GACFkB,EAAgBlB,EAAKsB,SAExBlB,OAAM,SAAAC,GACHkB,IAAQC,OAAO,SACfJ,EAAgBf,EAAMF,YAEzBsB,SAAQ,WACLT,GAAW,QAE5B,IAGC,cAACN,EAAYgB,SAAb,CAAsBC,MAAO,CAACZ,UAASC,aAAYC,eAAcC,kBAAiBC,eAAcC,mBAAhG,SACKP,EAAMe,Y,+BCoBJC,MA1Cf,WACI,OACI,qBAAIC,UAAU,kDAAd,UACI,6BACI,eAAC,IAAD,CAASC,OAAO,EAAMC,GAAG,IAAzB,UACI,cAAC,IAAD,CAAiBC,KAAMC,IAAYJ,UAAU,SADjD,IAC0D,kDAG9D,6BACI,eAAC,IAAD,CAASE,GAAG,UAAZ,UACI,cAAC,IAAD,CAAiBC,KAAME,IAASL,UAAU,SAD9C,IACuD,qDAG3D,6BACI,eAAC,IAAD,CAASE,GAAG,SAAZ,UACI,cAAC,IAAD,CAAiBC,KAAMG,IAAQN,UAAU,SAD7C,IACsD,qDAG1D,6BACI,eAAC,IAAD,CAASE,GAAG,QAAZ,UACI,cAAC,IAAD,CAAiBC,KAAMI,IAASP,UAAU,SAD9C,IACuD,mDAG3D,6BACI,eAAC,IAAD,CAASE,GAAG,UAAZ,UACI,cAAC,IAAD,CAAiBC,KAAMK,IAAoBR,UAAU,SADzD,IACkE,oDAGtE,6BACI,eAAC,IAAD,CAASE,GAAG,YAAZ,UACI,cAAC,IAAD,CAAiBC,KAAMM,IAAQT,UAAU,SAD7C,IACsD,iDAG1D,6BACI,eAAC,IAAD,CAASE,GAAG,cAAZ,UACI,cAAC,IAAD,CAAiBC,KAAMO,IAAOV,UAAU,SAD5C,IACqD,uD,iBCvCxDW,EAAe9B,0BAErB,SAAS+B,EAAqB7B,GAEjC,MAAsCC,oBAAS,GAA/C,mBAAO6B,EAAP,KAAoBC,EAApB,KACA,EAAkC9B,oBAAS,GAA3C,mBAAO+B,EAAP,KAAkBC,EAAlB,KACA,EAAwChC,mBAAS,IAAjD,mBAAOiC,EAAP,KAAqBC,EAArB,KAOA,OACI,cAACP,EAAaf,SAAd,CAAuBC,MAAO,CAACgB,cAAaC,iBAAgBC,YAAWC,eAAcC,eAAcC,kBAAiBC,iBANxH,SAA0B9C,GACtB2C,GAAa,GACbE,EAAgB7C,KAIhB,SACKU,EAAMe,WCbZ,IAAMsB,EAAmBvC,0BAEnBwC,EAA2B,SAAAtC,GAEpC,MAAgDC,oBAAS,GAAzD,mBAAOsC,EAAP,KAAyBC,EAAzB,KACA,EAA4CvC,mBAAS,IAArD,mBAAOwC,EAAP,KAAuBC,EAAvB,KACA,EAAsDzC,mBAAS,IAA/D,mBAAO0C,EAAP,KAA4BC,EAA5B,KACA,EAAwC3C,mBAAS,CAAC,mBAAlD,mBAAO4C,EAAP,KAAqBC,EAArB,KACA,EAAkD7C,mBAAS,IAA3D,mBAAO8C,EAAP,KAA0BC,EAA1B,KACA,EAA0B/C,mBAAS,IAAnC,mBAAOgD,EAAP,KAAcC,EAAd,KACA,EAAoCjD,mBAAS,IAA7C,mBAAOkD,EAAP,KAAmBC,EAAnB,KACA,EAA0CnD,mBAAS,GAAnD,mBAAOoD,EAAP,KAAsBC,EAAtB,KACA,EAA8BrD,oBAAS,GAAvC,mBAAOsD,EAAP,KAAgBC,EAAhB,KACA,EAAgCvD,mBAAS,CACrCN,KAAM,GACN8D,KAAM,IAAIC,KACVC,KAAM,IAHV,mBAAOC,EAAP,KAAiBC,EAAjB,KAKA,EAA0C5D,mBAAS,IAAnD,mBAAO6D,EAAP,KAAsBC,EAAtB,KACO3B,EAAoB4B,qBAAWpC,GAA/BQ,iBAEP,SAAS6B,KACLvB,EAAkB,IAClBE,EAAuB,IACvBE,EAAgB,CAAC,KACjBE,EAAqB,IACrBE,EAAS,IACTE,EAAc,IACdE,EAAiB,GACjBE,GAAW,GACXK,EAAY,CACRlE,KAAM,GACN8D,KAAM,IAAIC,KACVC,KAAM,IAId,SAASO,KACL,IAAMC,EAAS,GACTC,EAAU3B,EAAe4B,MAAM,MAAMC,QAAO,SAAAC,GAAM,OAAIA,KACtDC,EAAM,GAEZ,OAAIJ,EAAQK,QAMZL,EAAQM,SAAQ,SAAAH,GACRA,EAAOF,MAAM,KAAK,GAAGM,MAAM,2CAA2CR,EAAOS,KAAKL,MAIvFJ,EAAOM,QACND,EAAIpF,OAAS,SACboF,EAAIL,OAASA,GAEbK,EAAIpF,OAAS,KAGVoF,IAjBHA,EAAIpF,OAAS,SACboF,EAAIL,OAAS,CAAC,sBACPK,GA3C8B,8CA6D7C,wCAAA/F,EAAA,kEAGQ+D,GAAoB,GAIG,QADjBqC,EAAWX,MACL9E,OAPpB,uBAQYwD,EAAuBiC,EAASV,QAChCW,OAAOC,SAAS,CACZC,IAAK,IACLC,SAAU,WAX1B,6BAeQrC,EAAuB,MAGpBK,EAAMwB,OAAO,GAlBxB,wBAmBYrB,EAAc,cAnB1B,gCAwBkCP,EAAayB,QAAO,SAAAY,GAAC,OAAIA,KAC9BT,OAAO,GAzBpC,wBA0BYzB,EAAqB,yBA1BjC,8BA6BQA,EAAqB,IAGjBO,GAAYK,EAASjE,KAhCjC,wBAiCYoE,EAAiB,6BAjC7B,8BAoCQA,EAAiB,KAIVd,EAAMwB,OAxCrB,2BA2C0BU,EAAO,IAAIC,SA3CrC,cA6CuCnC,GA7CvC,IA6CoB,2BAAWoC,EAAe,QACtBF,EAAKG,OAAO,QAASD,GA9C7C,+CAiD8CxG,MAAM,GAAD,OAAIC,6BAAJ,WAA+C,CAC1EC,YAAa,UACbwG,OAAQ,OACRJ,KAAMA,IApD9B,eAiD0BK,EAjD1B,iBAuD8CA,EAAYtG,OAvD1D,WAyD8C,QAFpBuG,EAvD1B,QAyDmCrG,OAzDnC,kCA0D8BsG,GAAYnC,EAASK,EAAUnB,EAAgBI,EAAc4C,EAAYxC,OA1DvG,sCA4D8B,IAAI0C,MAAM,yCA5DxC,2DAgEoBvC,EAAc,KAAM9D,SAAW,0BAhEnD,iDAoEsBoG,GAAYnC,EAASK,EAAUnB,EAAgBI,GApErE,0DAuEQpD,QAAQC,IAAR,MACA0C,EAAiB,KAAM9C,SAAW,4BAxE1C,yBA0EQkD,GAAoB,GA1E5B,sFA7D6C,+BA4I9BkD,GA5I8B,yFA4I7C,WAA2BnC,EAASK,EAAUgC,EAAUC,EAAU5C,GAAlE,qBAAAxE,EAAA,6DACUgF,EAAO,IAAIC,KAAKE,EAASH,MACzB0B,EAAO,CACTxF,KAAMiE,EAASjE,KACfiG,SAAUA,EAASvB,MAAM,MACzBpB,QACA4C,WACAtC,UACAK,SAAU,CACNkC,KAAMrC,EAAKsC,cACXC,MAAOvC,EAAKwC,WACZC,IAAKzC,EAAK0C,UACVxC,KAAMC,EAASD,OAZ3B,kBAiB0B9E,MAAM,GAAD,OAAIC,6BAAJ,iBAAqD,CACxEsH,QAAS,CACL,eAAgB,oBAEpBjB,KAAMkB,KAAKC,UAAUnB,GACrBI,OAAQ,OACRxG,YAAa,YAvBzB,cAiBcwH,EAjBd,gBAyB0BA,EAAIrH,OAzB9B,UA2B0B,QAFZsF,EAzBd,QA2BepF,OA3Bf,uBA4BkB,IAAIuG,MAAMnB,EAAIlF,SAAW,qCA5B3C,QA8BY8C,EAAiB,6BACjB6B,KA/BZ,0DAqCQ7B,EAAiB,6BAAD,OAA8B,KAAM9C,UArC5D,2DA5I6C,sBAqL7C,OACI,cAAC+C,EAAiBxB,SAAlB,CAA2BC,MAAO,CAAC2B,iBAAgBC,oBAAmBG,eAAcC,kBAAiBG,QAAOC,WAAUK,UAASC,aAAYI,WAAUC,cAAaK,mBAAiBsC,eAtL1I,4CAsL0J7D,sBAAqBI,oBAAmBI,aAAYC,gBAAeU,gBAAevB,mBAAkBc,gBAAeC,oBAAtT,SACKtD,EAAMe,YC5JJ0F,MA7Bf,YAAkC,IAATzG,EAAQ,EAARA,MAEdyC,EAAqCzC,EAArCyC,eAAgBC,EAAqB1C,EAArB0C,kBAChBC,EAAuBqB,qBAAW3B,GAAlCM,oBAYP,OACI,sBAAK1B,UAAU,MAAf,UACI,0BAAUA,UAAU,6CAA6CyF,YAAY,oBACzEC,SAXZ,SAA8BzB,GAC1BxC,EAAkBwC,EAAEX,OAAOzD,QAUaA,MAAO2B,IAEnCE,EAAoB8B,OAAS,sBAAKxD,UAAU,kCAAf,UACzB,yDACC0B,EAAoBiE,KAAI,SAACpH,EAAOqH,GAAR,OAAc,oBAAW5F,UAAU,oBAArB,eAA4CzB,IAApCqH,SAC1C,S,QChBdC,MATf,WACI,OACI,sBAAK7F,UAAU,kDAAf,UACI,qBAAKA,UAAU,6EADnB,iBCiBO8F,MAnBf,YAAqC,IAAT/G,EAAQ,EAARA,MAEjBgH,EAA6BhH,EAA7BgH,OAAQtE,EAAqB1C,EAArB0C,kBAMf,OACI,gCACI,yCACA,qBAAKzB,UAAU,yBACf,qBAAKA,UAAU,sCAAf,SACK+F,EAAOJ,KAAI,SAAC1B,EAAE2B,GAAH,OAAS,wBAAgB5F,UAAU,yBAAyBgG,QAAS,kBAT/DrB,EAS0FV,EAAEU,cARtHlD,EAAkBkD,EAASsB,KAAK,OADpC,IAA8BtB,GASG,SAAqGV,EAAEvF,MAA1FkH,YC2CnCM,MArDf,YAAiE,IA2BzDC,EA3BeC,EAAyC,EAAzCA,QAASC,EAAgC,EAAhCA,WAAY5E,EAAoB,EAApBA,kBAExC,EAA4BzC,mBAAS,CAAC,KAAtC,mBAAO+G,EAAP,KAAeO,EAAf,KACA,EAA+BtH,oBAAS,GAAxC,mBAAOC,EAAP,KAAiBC,EAAjB,KACA,EAA2BF,oBAAS,GAApC,mBAAOT,EAAP,KAAegI,EAAf,KAqCA,OAnCAhH,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,6DACI0B,GAAW,GADf,kBAG0BtB,MAAM,GAAD,OAAIC,6BAAJ,UAA6C,CAChEC,YAAa,YAJzB,cAGcwH,EAHd,gBAM0BA,EAAIrH,OAN9B,OAMcsF,EANd,OAQQ+C,EAAU,YAAI/C,EAAIrF,OAR1B,kDAUQM,QAAQC,IAAR,MACA8H,GAAS,GAXjB,yBAaQrH,GAAW,GAbnB,8EADY,uBAAC,WAAD,wBAkBZsH,KACD,IAKCL,EADDlH,EACO,cAAC,EAAD,IACDV,EACC,qGAGF,qBAAKyB,UAAU,YAAf,SACI,cAAC,EAAD,CAAmBjB,MAAO,CAACgH,SAAQtE,yBAMvC,sBAAKzB,UAAS,kFAA6EoG,GAA3F,UACI,qBAAKpG,UAAU,mCAAmCgG,QAAS,kBAAMK,GAAW,MAC5E,qBAAKrG,UAAU,wDAAf,SACI,qBAAKA,UAAU,0CAAf,SACKmG,U,0BCqCVM,MA9Ef,WAEI,MAA8BzH,oBAAS,GAAvC,mBAAOoH,EAAP,KAAgBC,EAAhB,KACA,EAA4CtD,qBAAW3B,GAAhDI,EAAP,EAAOA,eAAgBC,EAAvB,EAAuBA,kBACvB,EAA0BzC,mBAAS,IAAnC,mBAAOgD,EAAP,KAAcC,EAAd,KAiCA,OArBA1C,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,+EAE6BkJ,YAAa1E,EAAM,IAFhD,OAEc2E,EAFd,OAGcxD,EAAUwD,EAAOhB,KAAI,SAAArC,GACvB,OAAOA,EAAO2C,KAAK,KAAO,QAG9BxE,EAAkB0B,EAAQ8C,KAAK,KAPvC,gDASQpC,OAAO+C,MAAP,oEAA0E,KAAMvI,QAAhF,MATR,0DADY,sBAcT2D,EAAMwB,QAdI,WAAD,wBAeRqD,KAEL,CAAC7E,IAKI,sBAAK8E,GAAG,SAAR,UAEI,cAAC,EAAD,CAAcV,QAAO,UAAKA,EAAU,QAAQ,UAAYC,WAAYA,EAAY5E,kBAAmBA,IAUnG,sBAAKzB,UAAU,4BAAf,UACI,qBAAKA,UAAU,kBAAf,SACI,cAAC,EAAD,CAAgBjB,MAAO,CAACsH,aAAY7E,iBAAgBC,yBAExD,sBAAKzB,UAAU,wDAAf,UACI,sBAAKA,UAAU,OAAf,UACI,wBAAOA,UAAU,2CAA2CgG,QAAS,kBAAKK,GAAW,IAArF,UACI,cAAC,IAAD,CAAiBlG,KAAM4G,IAAY/G,UAAU,OAAOgH,KAAK,OAD7D,oBAIA,cAAC,IAAD,CAAOtB,SApD/B,SAAuB1D,GACnBC,EAASD,IAmD2CiF,QAhDxD,SAAsB1I,EAAO6F,GACzB5F,QAAQC,IAAI,cAAgBF,EAAM2I,KAAO,KAAO3I,EAAMF,UA+CqB8I,QAAS,CAAC,OAAO,SACpEC,YAAa,IAAUC,YAAa,EAAGC,UAAU,EAAOC,WAAS,EADrE,SAEI,yBAAQvH,UAAU,sCAAlB,UACI,cAAC,IAAD,CAAiBG,KAAMqH,IAAaxH,UAAU,OAAOgH,KAAK,OAD9D,wBAMR,mBAAGhH,UAAU,OAAb,SAAoB,iEACpB,mBAAGA,UAAU,OAAb,SAAoB,yEACpB,oBAAGA,UAAU,OAAb,UAAoB,qDAApB,KAAsD,6CACtD,mBAAGA,UAAU,OAAb,SAAoB,8FCc7ByH,MA7Ff,YAA8B,IAAT1I,EAAQ,EAARA,MAEVqD,EAAgDrD,EAAhDqD,cAAeR,EAAiC7C,EAAjC6C,aAAcC,EAAmB9C,EAAnB8C,gBAE9B6F,EAAcC,mBACpB,EAA4C3I,mBAAS,CACjD4I,MAAO,EACPC,IAAK,IAFT,mBAAOC,EAAP,KAAuBC,EAAvB,KAsBA,SAASC,EAAYC,GAEjB,IAAIC,EAAiBtG,EAAaQ,GAAegB,MAAM,IAChDwE,EAAcE,EAAdF,MAAOC,EAAOC,EAAPD,IACXD,IAAUC,IAEbK,EAAeN,GAAf,UAAqD,MAA1BM,EAAeN,EAAM,GAAW,GAAG,KAA9D,OAAoEK,GAApE,OAAwEC,EAAeN,IACvFM,EAAeL,GAAf,UAAyBI,GAAzB,OAAmD,MAAtBC,EAAeL,GAAa,GAAG,KAA5D,OAAkEK,EAAeL,IAAQ,KACzFK,EAAiBA,EAAejC,KAAK,IAGrCpE,GAAgB,SAAAoG,GACZ,IAAIE,EAAU,YAAOF,GAErB,OADAE,EAAW/F,GAAiB8F,EACrBC,MAmCf,OACI,sBAAKnI,UAAU,SAAf,UACI,sBAAKA,UAAU,qDAAf,UACI,qBAAKA,UAAU,qBAAf,0BACA,qBAAKA,UAAU,+BAA+BgG,QAAS,kBAAMgC,EAAY,MAAzE,eACA,qBAAKhI,UAAU,4BAA4BgG,QAAS,kBAAMgC,EAAY,MAAtE,eACA,qBAAKhI,UAAU,kCAAkCgG,QAAS,kBAAMgC,EAAY,MAA5E,eACA,qBAAKhI,UAAU,qBAAqBgG,QAtChD,WACI,IAAIkC,EAAiBtG,EAAaQ,GAAegB,MAAM,IAChDyE,EAAOC,EAAPD,IAEPK,EAAeL,GAAf,gBAA+BK,EAAeL,IAAQ,IACtDK,EAAiBA,EAAejC,KAAK,IAGrCpE,GAAgB,SAAAoG,GACZ,IAAIE,EAAU,YAAOF,GAErB,OADAE,EAAW/F,GAAiB8F,EACrBC,MA2BH,kBACA,qBAAKnI,UAAU,qBAAqBgG,QAvBhD,WACI,IAAIkC,EAAiBtG,EAAaQ,GAAegB,MAAM,IAChDyE,EAAOC,EAAPD,IAEPK,EAAeL,GAAf,aAA4BK,EAAeL,IAAQ,IACnDK,EAAiBA,EAAejC,KAAK,IAGrCpE,GAAgB,SAAAoG,GACZ,IAAIE,EAAU,YAAOF,GAErB,OADAE,EAAW/F,GAAiB8F,EACrBC,MAYH,sBAEJ,qBAAKnI,UAAU,kBAAf,SACI,0BAAUoI,IAAKV,EAAa7H,MAAO+B,EAAaQ,GAAgBiG,OA7E5E,SAAoBpE,GAChB,MAAuCyD,EAAYY,QAA5CC,EAAP,EAAOA,eAAgBC,EAAvB,EAAuBA,aAEvBT,EAAkB,CACdH,MAAOW,EACPV,IAAKW,KAwEmF9C,SApEhG,SAAsBzB,GAClBpC,GAAgB,SAAAoG,GACZ,IAAIQ,EAAM,YAAOR,GAEjB,OADAQ,EAAOrG,GAAiB6B,EAAEX,OAAOzD,MAC1B4I,cCyJJC,MA1Kf,WAAoB,IAAD,EAGf,EAAwI3F,qBAAW3B,GAA5IQ,EAAP,EAAOA,aAAcC,EAArB,EAAqBA,gBAAiBG,EAAtC,EAAsCA,MAAOC,EAA7C,EAA6CA,SAAUC,EAAvD,EAAuDA,WAAYC,EAAnE,EAAmEA,cAAeL,EAAlF,EAAkFA,kBAAmBM,EAArG,EAAqGA,cAAeC,EAApH,EAAoHA,iBAapH,SAASsG,EAAMC,GAEX,IAAI/I,EAAQ+I,EACZ/I,EAAQA,EAAMgJ,QAAQ,IAAIC,OAAO,QAAQ,KAAM,QA2B/C,MAvBmB,CACf,CAAEC,OAAQ,IAAKC,IAAK,KACpB,CAAED,OAAQ,IAAKC,IAAK,MACpB,CAAED,OAAQ,IAAKC,IAAK,OACpB,CAAED,OAAQ,IAAKC,IAAK,SAGbvF,SAAQ,YAAsB,IAAnBsF,EAAkB,EAAlBA,OAAQC,EAAU,EAAVA,IAC1B,GAAInJ,EAAJ,CAEA,IAAMoJ,EAAQ,IAAIH,OAAJ,YAAgBC,EAAhB,cAA4BA,EAA5B,gBAA0CA,GAAU,MAC5DrF,EAAQ7D,EAAM6D,MAAMuF,GACtBvF,GAEJA,EAAMD,SAAQ,SAAAyF,GAEV,IADA,IAAIC,EAAYD,EACRtD,EAAE,EAAGA,EAAE,EAAGA,IACduD,EAAYA,EAAUN,QAAQE,EAAlB,WAA8BnD,EAAI,EAAI,IAAM,IAA5C,OAAiDoD,EAAjD,MAEhBnJ,EAAQA,EAAMgJ,QAAQK,EAAGC,UAI1BtJ,EAMX,MAA0Cb,mBAAS,IAAnD,mBAAOoK,EAAP,KAAsBC,EAAtB,KAgDA,OAlBA9J,qBAAU,WACN,GAAGyC,EAAMwB,OAAO,CACS,CAAC,MAAO,OAAQ,OACrB8F,SAAStH,EAAM,GAAGuH,WAC9BvH,EAAM,GAAGwH,cACQzL,MAAK,SAAA0L,GACF,IAAMC,EAAO,IAAIC,KAAM,CAAEF,IACnBG,EAAMC,IAAIC,gBAAiBJ,GACjCL,EAAiBO,MAGrCP,EAAiB,OAG1B,CAACrH,IAKA,qCACI,oBAAIhC,UAAU,yBAAd,mBACA,8BACI,eAAC,IAAD,CACAA,UAAU,gEACV0F,SApDZ,SAAuB1D,GACnBC,GAAS,8BAAUD,OAoDXiF,QAjDZ,SAAsB1I,EAAO6F,GACzB,OAAQ7F,EAAM2I,MACV,KAAK,EACD/E,EAAc,gCACd4H,YAAW,WACP5H,EAAc,MACf,KACH,MACJ,KAAK,EACDA,EAAc,mBACd4H,YAAW,WACP5H,EAAc,MACf,OAsCHgF,QAAS,CAAC,YAAY,YAAY,aAAc,OAAS,UAAW,UAAW,QAAS,OAAQ,SAChGG,UAAQ,EACR0C,SAAU,EACV5C,YAAa,IACbC,YAAa,EACbE,WAAS,EATT,UAUI,cAAC,IAAD,CAAiBpH,KAAMK,IAAoByJ,MAAM,OAAOjD,KAAK,OAC7D,gCACI,mBAAGhH,UAAU,kCAAb,kDACA,mBAAGA,UAAU,kCAAb,uDAKZ,sBAAKA,UAAU,kBAAf,UACKkC,GAAc,mBAAGlC,UAAU,6BAAb,SAA2CkC,IAErDF,EAAMwB,OAAqExB,EAAM2D,KAAI,SAACvB,EAAKwB,GACxF,OAAO,iCAA0BxB,EAAK1F,KAA/B,IAAqC,cAAC,IAAD,CAAiByB,KAAM+J,IAAelE,QAAS,kBAjDzFc,EAiD4G1C,EAAK0C,QAhDnI7E,GAAS,SAAAgG,GAAC,OAAIA,EAAE5E,QAAO,SAAAe,GAAI,OAAIA,EAAK0C,KAAOA,QAD/C,IAAsBA,GAiDsHE,KAAK,SAA3G5C,EAAK0C,IAAMlB,MADjB,mBAAG5F,UAAU,UAAb,+CAMxB,sBAAKA,UAAU,8BAAf,UACI,qBAAKA,UAAU,2BAAf,SACI,sBAAKA,UAAU,aAAf,UACK4B,EAAa+D,KAAI,SAACwE,EAAMC,GACrB,OACA,sBAAKpK,UAAU,2CAAf,UACI,yBAAQA,UAAS,wBAAmBoC,IAAgBgI,EAAQ,SAAW,IAAMpE,QAAS,kBAAM3D,EAAiB+H,IAA7G,oBAA6HA,EAAM,KAClIA,EAAQ,sBAAMpK,UAAU,4BAAhB,SAA4C,cAAC,IAAD,CAAiBG,KAAMkK,IAASrE,QAAS,kBAhI1H,SAAuBoE,GACnB5L,QAAQC,IAAI2L,GACZ/H,EAAiB,GACjBR,GAAgB,SAAAoG,GAAC,OAAIA,EAAE5E,QAAO,SAACY,EAAE2B,GAAH,OAASA,IAAIwE,QA6HiFE,CAAcF,aAAoBG,IAF3EH,MAMnE,wBAAQpE,QAxI5B,WACInE,GAAgB,SAAAoG,GAAC,4BAAQA,GAAR,CAAW,SAuIZ,SAA6B,cAAC,IAAD,CAAiB9H,KAAMqK,IAAcxD,KAAK,cAG/E,qBAAKhH,UAAU,2BAAf,SACI,cAAC,EAAD,CAAYjB,MAAO,CAACqD,gBAAeR,eAAcC,uBAErD,qBAAK7B,UAAU,2BAAf,SACI,sBAAKA,UAAU,8DAAf,UACI,qBAAKA,UAAU,wDAAf,2BACA,sBAAKA,UAAU,8DAAf,UACMgC,EAAMwB,QAAU4F,EAAiB,qBAAKqB,IAAKrB,EAAesB,IAAI,kBAAqB,GADzF,UAEK9I,EAAaQ,UAFlB,aAEK,EAA6BgB,MAAM,OAAOuC,KAAI,SAAC1B,EAAG2B,GAAJ,OAC3C,qBAAK5F,UAAU,OAAf,SACI,qBAAK2K,wBAAyB,CAACC,OAAQjC,EAAM1E,OADtB2B,iBAS1C9D,GACG,mBAAG9B,UAAU,oDAAb,SAAkE8B,QChKvE+I,MAVf,YAAsC,IAApBC,EAAmB,EAAnBA,MAAOC,EAAY,EAAZA,UACrB,OACQ,sBAAK/K,UAAU,OAAf,UACI,6BAAK8K,IACL,qBAAK9K,UAAU,YACf,mBAAGA,UAAU,UAAb,SAAwB+K,Q,yCCmEzBC,MAlEf,WAEI,MAAoEjI,qBAAW3B,GAAxEkB,EAAP,EAAOA,QAASC,EAAhB,EAAgBA,WAAYI,EAA5B,EAA4BA,SAAUC,EAAtC,EAAsCA,YAAaC,EAAnD,EAAmDA,cAOnD,OACI,sBAAK7C,UAAU,OAAf,UACI,oBAAIA,UAAU,eAAd,2BACA,sBAAKA,UAAU,+BAAf,UACI,uBAAOiL,KAAK,WAAWjL,UAAU,SAAS0F,SAAU,kBAAMnD,GAAW,SAAA0F,GAAC,OAAKA,MAAIiD,QAAS5I,IAAW,IACnG,sBAAMtC,UAAU,UAAhB,+BAEJ,sBAAKA,UAAS,UAAKsC,GAAW,cAA9B,UACI,qBAAKtC,UAAU,wEAAf,SACI,cAAC,IAAD,CACImL,SAAUxI,EAASH,KACnBkD,SAAU,SAAClD,GAAD,OAAUI,GAAY,SAAAqF,GAAC,kCAASA,GAAT,IAAYzF,aAC7C4I,QAAS,IAAI3I,KACb4I,QAASC,kBAAQ,IAAI7I,KAAQ,IAC7B8I,aAAa,EACbC,SAAUlJ,EACVmJ,YAAU,MAGlB,yBAAQzL,UAAU,4DAA4DwL,SAAUlJ,EAASzC,MAAO8C,EAASD,KAAMgD,SAAU,SAACzB,GAAD,OAAOrB,GAAY,SAAAqF,GAAC,kCAASA,GAAT,IAAYvF,KAAqB,EAAfuB,EAAEX,OAAOzD,YAAhL,UACI,wBAAQ2L,SAAS,WAAjB,6BACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,2CAEJ,uBAAOP,KAAK,OAAOxF,YAAY,gBAAgBzF,UAAU,qDAAqDH,MAAO8C,EAASjE,KAAMgH,SAnDhJ,SAA4BzB,GACxB,IAAMvF,EAAOuF,EAAEX,OAAOzD,MAAMgJ,QAAS,OAAQ,KAC7CjG,GAAY,SAAAqF,GAAC,kCAASA,GAAT,IAAYvJ,kBAmDpBmE,GACG,qBAAK7C,UAAU,4DAAf,SACK6C,QCjDN6I,MAZf,WAEI,IAAOnG,EAAkBxC,qBAAW3B,GAA7BmE,eAEP,OACI,yBAAQS,QAAST,EAAgBvF,UAAU,4DAA3C,UACI,mDACA,cAAC,IAAD,CAAiBG,KAAMC,IAAYJ,UAAU,aCE1C2L,MAbf,WACI,OACI,gCACI,qBAAK3L,UAAU,sBACf,sBAAKA,UAAU,yBAAf,UACI,mBAAGA,UAAU,qBAAb,wBACA,mBAAGA,UAAU,qBAAb,wBACA,mBAAGA,UAAU,qBAAb,+BC4BD4L,MAxBf,WAEI,IAAOtK,EAAoByB,qBAAW3B,GAA/BE,iBAEP,OACI,gCACKA,EACG,cAAC,EAAD,IACF,KAEF,qBAAKtB,UAAU,6BAAf,SACI,eAAC,IAAD,CAAME,GAAG,cAAcF,UAAU,4BAAjC,UACI,cAAC,IAAD,CAAiBG,KAAM0L,IAAU7L,UAAU,SAD/C,gBAIJ,cAAC,EAAD,CAAS8K,MAAM,YAAYC,UAAU,oEACrC,cAAC,EAAD,IACA,cAAC,EAAD,IACA,cAAC,EAAD,IACA,cAAC,EAAD,QCjBGe,MAZf,WAGI,OACI,cAAC,EAAD,UACI,qBAAK9L,UAAU,YAAf,SACI,cAAC,EAAD,SCOD+L,MAdf,WACI,OACI,qBAAK/L,UAAU,OAAf,SACI,wBAAQA,UAAU,SAAlB,SAEI,sBAAKA,UAAU,kBAAf,UAAiC,uBAC7B,sBAAMA,UAAU,+BAAhB,SAA+C,2CAAyB,uBACxE,sBAAMA,UAAU,8BAAhB,yDCqGLgM,MAxGf,WAEI,MAA0BhN,mBAAS,IAAnC,mBAAOT,EAAP,KAAcgI,EAAd,KACA,EAA8BvH,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA8BF,oBAAS,GAAvC,mBAAOiN,EAAP,KAAgBC,EAAhB,KAEA,EAAoClN,mBAAS,IAA7C,mBAAOmN,EAAP,KAAmBC,EAAnB,KANmB,4CASnB,WAA+BtF,GAA/B,eAAAtJ,EAAA,sEAEQ0B,GAAW,GAFnB,SAI0BtB,MAAM,GAAD,OAAIC,6BAAJ,yBAAqDiJ,GAAM,CAC9ExC,OAAQ,SACRxG,YAAa,YANzB,cAIcwH,EAJd,gBAS0BA,EAAIrH,OAT9B,OAW0B,OAX1B,OAWeE,QACHiO,GAAc,SAAAnE,GAAC,OAAIA,EAAE5E,QAAO,SAAAgJ,GAAS,OAAIA,EAAUC,MAAQxF,QAZvE,kDAeQP,EAAS,KAAMlI,SAfvB,yBAiBQa,GAAW,GAjBnB,8EATmB,sBAwDnB,OA1BAK,qBAAU,WAoBN,OAlBA,sBAAC,8BAAA/B,EAAA,sEAEO0B,GAAW,GAFlB,SAGyBtB,MAAM,GAAD,OAAIC,6BAAJ,gCAAoE,CAACC,YAAa,YAHhH,cAGawH,EAHb,gBAIyBA,EAAIrH,OAJ7B,UAMyB,QAFZsF,EAJb,QAMcpF,OANd,uBAMqC,IAAIuG,MAAMnB,EAAIlF,SANnD,QAQU4N,GAASG,EAAc,YAAI7I,EAAIrF,OARzC,kDAWOqI,EAAS,KAAMlI,SAXtB,yBAaOa,GAAW,GAblB,4EAAD,GAkBO,WACHgN,GAAW,MAEhB,IAIC,sBAAKlM,UAAU,OAAf,UAEKf,GAAW,cAAC,EAAD,IACXV,GAAS,4DAA+BA,KAEzC,qBAAKyB,UAAU,kBAAf,SACI,wBAAOA,UAAU,eAAjB,UACI,gCACI,+BACI,+CACA,6CACA,wCACA,4BAGR,gCACKmM,EAAWxG,KAAI,SAAA0G,GACZ,MAAkDA,EAA3CC,WAAP,MAAW,GAAX,IAAkDD,EAAnC3N,YAAf,MAAoB,GAApB,IAAkD2N,EAA1B1J,gBAAxB,MAAiC,GAAjC,IAAkD0J,EAAblO,cAArC,MAA4C,GAA5C,EACA,EAAyCwE,EAAlCkC,YAAP,MAAY,EAAZ,IAAyClC,EAA1BoC,aAAf,MAAqB,EAArB,IAAyCpC,EAAjBsC,WAAxB,MAA4B,EAA5B,IAAyCtC,EAAVD,YAA/B,MAAoC,EAApC,EAEA,OACI,+BACI,6BACI,4BAAIhE,MAER,6BACI,sCAAOuG,EAAP,YAAcF,EAAd,YAAuBF,EAAvB,iBAAoCnC,OAExC,6BACI,qBAAK1C,UAAU,oBAAf,SACK7B,MAGT,6BACI,yBAAQ6B,UAAU,uBAAuBgG,QAAS,kBA3FnE,2CA2FyEuG,CAAgBD,IAAMd,SAAUvM,EAAxF,UAAiG,cAAC,IAAD,CAAiBkB,KAAMqM,IAASxM,UAAU,SAA3I,gBAbCsM,iBC1E1BG,MARf,WACI,OACI,8C,6BCsFOC,OAnFf,WACI,MAA8B1N,oBAAS,GAAvC,mBAAOiN,EAAP,KAAgBC,EAAhB,KACA,EAA8BlN,qBAA9B,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA0BF,mBAAS,IAAnC,mBAAOT,EAAP,KAAcgI,EAAd,KACA,EAA4BvH,mBAAS,IAArC,mBAAO2N,EAAP,KAAeC,EAAf,KACA,EAA4C5N,mBAAS,IAArD,mBAAO6N,EAAP,KAAuBC,EAAvB,KALkB,4CAQlB,8BAAAtP,EAAA,sEAEQ0B,GAAW,GAFnB,SAI0BtB,MAAM,GAAD,OAAIC,6BAAJ,cAAkD,CAACC,YAAa,YAJ/F,cAIcwH,EAJd,gBAK2BA,EAAIoE,OAL/B,OAKcA,EALd,OAQQqD,KAASrD,EAAM,yBARvB,kDAWQnD,EAAS,KAAMlI,SAXvB,yBAaQa,GAAW,GAbnB,8EARkB,sBA2DlB,OA1BAK,qBAAU,WAoBN,OAlBA,sBAAC,8BAAA/B,EAAA,sEAEO0B,GAAW,GAFlB,SAIyBtB,MAAM,GAAD,OAAIC,6BAAJ,cAAkD,CAACC,YAAa,YAJ9F,cAIawH,EAJb,gBAKyBA,EAAIrH,OAL7B,UAOyB,QAFZsF,EALb,QAOcpF,OAPd,uBAOqC,IAAIuG,MAAMnB,EAAIlF,SAPnD,QASU4N,GAASW,EAAU,YAAIrJ,EAAIrF,OATrC,kDAYOqI,EAAS,KAAMlI,SAZtB,yBAcOa,GAAW,GAdlB,4EAAD,GAkBO,WACHgN,GAAW,MAEhB,IAIC,sBAAKlM,UAAU,OAAf,UACKf,GAAW,cAAC,EAAD,IACXV,GAAS,2EAA8CA,KACxD,sBAAKyB,UAAU,oDAAf,UACI,0BAAUA,UAAU,gCAAgCH,MAAOgN,EAAgBnH,SAAU,SAAAzB,GAAC,OAAI6I,EAAkB7I,EAAEX,OAAOzD,UACrH,sBAAKG,UAAU,SAAf,UACI,qBAAKA,UAAU,6DAAf,SACI,qBAAKA,UAAU,yCAAf,SACK2M,EAAOhH,KAAI,SAAAqH,GAAK,OACb,qBAAoBhN,UAAU,iDAAiDgG,QAAS,kBA5CpH,SAAiCc,GAE7B,IACMmG,EADON,EAAOtJ,QAAO,SAAA2J,GAAK,OAAIA,EAAMlG,KAAOA,KAAI,GAC3BmG,aAAatH,KAAI,SAAAuH,GAAU,OAAIA,EAAWpG,GAAGtH,QAEvEsN,EAAkBG,EAAahH,KAAK,OAuCkFkH,CAAwBH,EAAMlG,KAA5H,SAAkIkG,EAAMtO,MAA9HsO,EAAMlG,WAI5B,yBAAQ9G,UAAU,4BAA4BgG,QAzE5C,2CAyEF,UACI,cAAC,IAAD,CAAiB7F,KAAMiN,KAAYpN,UAAU,OAAOgH,KAAK,OAD7D,sCCtELqG,OARf,WACI,OACI,4CCMOC,OARf,WACI,OACI,8CCkGOC,OA/Ff,WAEI,MAA8BvO,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA4BF,mBAAS,IAArC,mBAAO+G,EAAP,KAAeO,EAAf,KACA,EAA8BtH,oBAAS,GAAvC,mBAAOiN,EAAP,KAAgBC,EAAhB,KAJa,4CAMb,WAA2BpF,GAA3B,iBAAAtJ,EAAA,0DACoBqG,OAAO2J,QAAQ,gBADnC,gCAG0B5P,MAAM,GAAD,OAAIC,6BAAJ,kBAA8CiJ,GAAM,CACvExC,OAAQ,SACRxG,YAAa,YALzB,cAGcwH,EAHd,gBAO0BA,EAAIrH,OAP9B,OAS0B,OAT1B,OASeE,SACGsP,EAAiB1H,EAAO1C,QAAO,SAAAqK,GAAK,OAAIA,EAAMpB,MAAQxF,KACzDmF,GAAS3F,EAAUmH,IAXlC,4CANa,sBA+Cb,OAxBAlO,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,+EAE0BI,MAAM,GAAD,OAAIC,6BAAJ,UAA8C,CACjEC,YAAa,YAHzB,cAEcwH,EAFd,gBAK0BA,EAAIrH,OAL9B,OAKcsF,EALd,OAOW0I,GAAS3F,EAAU/C,EAAIrF,MAPlC,2EAWQgB,GAAW,GAXnB,8EADY,sBAkBZ,OAlBa,WAAD,wBAgBZsH,GAEO,WACH0F,GAAW,MAEhB,IAIC,gCACI,eAAC,IAAD,CAAMhM,GAAG,gBAAgBF,UAAU,0CAAnC,UACI,cAAC,IAAD,CAAiBG,KAAMqK,IAAcxK,UAAU,SADnD,kBAIA,wBAAOA,UAAU,eAAjB,UACI,gCACA,+BACI,4CACA,+CACA,4BAGJ,gCAEIf,EACI,6BACI,8CAEJ8G,EAAOvC,OAAsDuC,EAAOJ,KAAI,SAAA+H,GAAK,OAC7E,+BACI,6BAAKA,EAAMhP,OACX,6BAAKgP,EAAM/I,SAASnB,SACpB,+BACA,cAAC,IAAD,CAAMtD,GAAE,sBAAiBwN,EAAMpB,KAAOtM,UAAU,8BAAhD,SACI,cAAC,IAAD,CAAiBG,KAAMwN,QAE3B,wBAAQ3N,UAAU,uBAAuBgG,QAAS,kBA3E7D,2CA2EmE4H,CAAYF,EAAMpB,MAA1E,SACI,cAAC,IAAD,CAAiBnM,KAAM0N,aARtBH,EAAMpB,QADC,mBAAGtM,UAAU,OAAb,kCAgBxB,gCACA,+BACI,4CACA,+CACA,mCCmFL8N,OA5Kf,WAEI,MAA8B9O,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAAkCF,mBAAS,IAA3C,mBAAO+O,EAAP,KAAkBC,EAAlB,KACA,EAA0ChP,mBAAS,IAAnD,mBAAOiP,EAAP,KAAsBC,EAAtB,KACA,EAA4ClP,mBAAS,IAArD,mBAAOmP,EAAP,KAAuBC,EAAvB,KACA,EAAwCpP,mBAAS,IAAjD,mBAAOK,EAAP,KAAqBC,EAArB,KACA,EAA0BN,mBAAS,IAAnC,mBAAOgD,EAAP,KAAcC,EAAd,KACA,EAA8BjD,oBAAS,GAAvC,mBAAOiN,EAAP,KAAgBC,EAAhB,KA8GA,OArBA3M,qBAAU,WACN,OAAO,WACH2M,GAAW,MAEhB,IAEH3M,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,sEACyBkJ,YAAa1E,EAAM,IAD5C,OACU2E,EADV,OAEUxD,EAAUwD,EAAOhB,KAAI,SAAArC,GACvB,OAAOA,EAAO2C,KAAK,KAAO,QAG9BiI,EAAiB/K,EAAQ8C,KAAK,KANlC,4CADY,sBAUTjE,EAAMwB,QAVI,WAAD,wBAWRqD,KAEL,CAAC7E,IAGA,gCACI,oBAAIhC,UAAU,OAAd,0BACA,sBAAMqO,SArFd,SAAsBpK,GAIlB,GAHAA,EAAEqK,kBAGEP,IAAcE,EAMd,OALA3O,EAAgB,CAAC,kDACjByK,YAAW,WACJkC,GAAS3M,EAAgB,MAC7B,KAMP,IAAIiP,EAzBR,WACI,IAAMrL,EAAS,GAOf,OANgB+K,EAAc7K,MAAM,MAAMC,QAAO,SAAAC,GAAM,OAAIA,KAEnDG,SAAQ,SAAAH,GACRA,EAAOF,MAAM,KAAK,GAAGM,MAAM,2CAA2CR,EAAOS,KAAKL,MAGnFJ,EAiBYsL,GAdC,4CAwBpB,8BAAAhR,EAAA,6DACU0G,EAAO,CACTxF,KAAMqP,EACNpJ,SAAUsJ,EAAc7K,MAAM,MAAMC,QAAO,SAAAoL,GAAO,OAAIA,MAH9D,SAMQvP,GAAW,GANnB,SAQ0BtB,MAAM,GAAD,OAAIC,6BAAJ,UAA8C,CACjEsH,QAAS,CACL,eAAgB,oBAEpBjB,KAAMkB,KAAKC,UAAUnB,GACrBI,OAAQ,OACRxG,YAAa,YAdzB,cAQcwH,EARd,gBAgB0BA,EAAIrH,OAhB9B,UAkB0B,OAlB1B,OAkBeE,OAlBf,uBAkBsC,IAAIuG,MAAM,uBAlBhD,QAoBQ0J,EAAkB,6BAClBJ,EAAa,IACbE,EAAiB,IAtBzB,kDAyBQ5O,EAAgB,iDAAD,OAAkD,KAAMjB,UAzB/E,yBA2BQa,GAAW,GA3BnB,8EAxBoB,sBAejBqP,EAAa/K,OACZlE,EAAgBiP,IAGhBjP,EAAgB,IAnBA,mCAuDpBoP,KA8BI,SACI,sBAAK1O,UAAU,sBAAf,UACI,uBAAOiL,KAAK,OAAOxF,YAAY,aAAazF,UAAU,8BAA8BH,MAAOkO,EAAWrI,SAAU,SAAAzB,GAAC,OAAI+J,EAAa/J,EAAEX,OAAOzD,QAAQ8O,UAAQ,IAC3J,gCACI,sBAAK3O,UAAU,uBAAf,UACI,mBAAGA,UAAU,eAAb,mDACA,cAAC,IAAD,CACI0F,SAnH5B,SAAuB1D,GACnBC,EAASD,IAmHeiF,QAhH5B,SAAsB1I,EAAO6F,GACzB5F,QAAQC,IAAI,cAAgBF,EAAM2I,KAAO,KAAO3I,EAAMF,UAgH9B8I,QAAS,CAAC,OAAO,OAAO,SACxBC,YAAa,IACbC,YAAa,EACbC,UAAU,EACVC,WAAS,EAPb,SAQI,wBAAQvH,UAAU,yBAAyBiL,KAAK,SAAhD,oCAGR,0BAAUjL,UAAU,yCAAyCyF,YAAY,2BAA2B5F,MAAOoO,EAAevI,SArH9I,SAAsBzB,GAClBiK,EAAiBjK,EAAEX,OAAOzD,aAsHbR,EAAamE,OACV,qBAAKxD,UAAU,oBAAf,SACI,sBAAKA,UAAU,SAAf,UACA,qBAAK4O,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,YAAY9O,UAAU,8BAAlF,SACI,sBAAM+O,cAAc,QAAQC,eAAe,QAAQC,YAAY,IAAIC,EAAE,qGAEzE,wHAA0F,sBAAMlP,UAAU,YAAhB,uBAC1F,6BACKX,EAAasG,KAAI,SAAC1B,EAAG2B,GAAJ,OAAU,qBAAI5F,UAAU,YAAd,eAAqCiE,IAAN2B,gBAKnE,GACHuI,GACG,qBAAKnO,UAAU,sBAAf,SACI,sBAAKA,UAAU,SAAf,UACA,qBAAK4O,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,YAAY9O,UAAU,8BAAlF,SACI,sBAAM+O,cAAc,QAAQC,eAAe,QAAQC,YAAY,IAAIC,EAAE,gEAEzE,uBAAOlP,UAAU,YAAjB,SAA8BmO,SAKtC,wBAAQnO,UAAU,kBAAkBiL,KAAK,SAASO,SAAUvM,EAA5D,6BC4CLkQ,OA/Mf,WAEI,MAA8BnQ,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACO4H,EAAMsI,cAANtI,GACP,EAAwC9H,mBAAS,IAAjD,mBAAOK,EAAP,KAAqBC,EAArB,KACA,EAA4CN,mBAAS,IAArD,mBAAOmP,EAAP,KAAuBC,EAAvB,KACA,EAA0BpP,mBAAS,CAC/BN,KAAM,GACNiG,SAAU,KAFd,mBAAO+I,EAAP,KAAc2B,EAAd,KAIA,EAA0BrQ,mBAAS,IAAnC,mBAAOgD,EAAP,KAAcC,EAAd,KACA,EAA8BjD,oBAAS,GAAvC,mBAAOiN,EAAP,KAAgBC,EAAhB,KA8IA,OA3IA3M,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,sEAEQ0B,GAAW,GAFnB,SAG0BtB,MAAM,GAAD,OAAIC,6BAAJ,kBAA8CiJ,GAAM,CACvEhJ,YAAa,YAJzB,cAGcwH,EAHd,gBAM0BA,EAAIrH,OAN9B,UAQ0B,QAFZsF,EANd,QAQepF,OARf,uBAQsC,IAAIuG,MAAM,iBARhD,QAUQ2K,GAAS,WACL,MAAO,CACH3Q,KAAM6E,EAAIrF,KAAKQ,KACfiG,SAAUpB,EAAIrF,KAAKyG,SAASsB,KAAK,UAbjD,kDAkBQpC,OAAOyL,SAASzG,QAAQ,0BAlBhC,yBAoBQ3J,GAAW,GApBnB,8EADY,sBA2BZ,OA3Ba,WAAD,wBAyBZqQ,GAEO,WACHrD,GAAW,MAEhB,CAACpF,IAEJvH,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,sEACyBkJ,YAAa1E,EAAM,IAD5C,OACU2E,EADV,OAEUxD,EAAUwD,EAAOhB,KAAI,SAAArC,GACvB,OAAOA,EAAO2C,KAAK,KAAO,QAG9BoJ,GAAS,SAAApH,GAAC,kCAASA,GAAT,IAAYtD,SAAUxB,EAAQ8C,KAAK,SANjD,4CADY,sBAUTjE,EAAMwB,QAVI,WAAD,wBAWRqD,KAEL,CAAC7E,IA+FA,gCACI,oBAAIhC,UAAU,OAAd,wBACA,sBAAMqO,SAlEd,SAAsBpK,GAIlB,GAHAA,EAAEqK,kBAGEZ,EAAMhP,OAASgP,EAAM/I,SAMrB,OALArF,EAAgB,CAAC,kDACjByK,YAAW,WACJkC,GAAS3M,EAAgB,MAC7B,KAMP,IAAIiP,EAjCR,WACI,IAAMrL,EAAS,GAOf,OANgBwK,EAAM/I,SAASvB,MAAM,MAAMC,QAAO,SAAAC,GAAM,OAAIA,KAEpDG,SAAQ,SAAAH,GACRA,EAAOF,MAAM,KAAK,GAAGM,MAAM,2CAA2CR,EAAOS,KAAKL,MAGnFJ,EAyBYsL,GAdC,4CAuBpB,gCAAAhR,EAAA,6DACU0G,EAAO,CACTxF,KAAMgP,EAAMhP,KACZiG,SAAU+I,EAAM/I,SAASvB,MAAM,MAAMC,QAAO,SAAAoL,GAAO,OAAIA,MAH/D,SAMQvP,GAAW,GANnB,SAQ0BtB,MAAM,GAAD,OAAIC,6BAAJ,kBAA8CiJ,GAAM,CACvE3B,QAAS,CACL,eAAgB,oBAEpBjB,KAAMkB,KAAKC,UAAUnB,GACrBI,OAAQ,QACRxG,YAAa,YAdzB,cAQcwH,EARd,gBAgB0BA,EAAIrH,OAhB9B,UAgBcsF,EAhBd,OAkBQ/E,QAAQC,IAAI8E,GAEM,OAAfA,EAAIpF,OApBf,uBAoBsC,IAAIuG,MAAM,uBApBhD,QAsBQ0J,EAAkB,wBAElBrE,YAAW,WACJkC,GAASmC,EAAkB,MAC/B,KA1BX,kDA4BQ9O,EAAgB,6CAAD,OAA8C,KAAMjB,UA5B3E,yBA8BQa,GAAW,GA9BnB,8EAvBoB,sBAejBqP,EAAa/K,OACZlE,EAAgBiP,IAGhBjP,EAAgB,IAnBA,mCAyDpBkQ,KASI,SACI,sBAAKxP,UAAU,sBAAf,UACI,uBAAOiL,KAAK,OAAOxF,YAAY,aAAazF,UAAU,8BAA8B2O,UAAQ,EAAC9O,MAAO6N,EAAMhP,KAAMgH,SA5EhI,SAAoBzB,GAChBoL,GAAS,SAAApH,GAAC,kCAASA,GAAT,IAAYvJ,KAAMuF,EAAEX,OAAOzD,YA2E6G2L,SAAUvM,IAChJ,gCACI,sBAAKe,UAAU,uBAAf,UACI,mBAAGA,UAAU,eAAb,mDACA,cAAC,IAAD,CACI0F,SApG5B,SAAuB1D,GACnBC,EAASD,IAoGeiF,QAjG5B,SAAsB1I,EAAO6F,GACzB5F,QAAQC,IAAI,cAAgBF,EAAM2I,KAAO,KAAO3I,EAAMF,UAiG9B8I,QAAS,CAAC,OAAO,OAAO,SACxBC,YAAa,IACbC,YAAa,EACbC,UAAU,EACVC,WAAS,EAPb,SAQQ,wBAAQvH,UAAU,yBAAyBiL,KAAK,SAAhD,oCAGZ,0BAAUjL,UAAU,yCAAyCyF,YAAY,2BAA2B5F,MAAO6N,EAAM/I,SAAUe,SAvF/I,SAAwBzB,GACpBoL,GAAS,SAAApH,GAAC,kCAASA,GAAT,IAAYtD,SAAUV,EAAEX,OAAOzD,YAsF4H2L,SAAUvM,OAElKI,EAAamE,OACV,qBAAKxD,UAAU,oBAAf,SACI,sBAAKA,UAAU,SAAf,UACA,qBAAK4O,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,YAAY9O,UAAU,8BAAlF,SACI,sBAAM+O,cAAc,QAAQC,eAAe,QAAQC,YAAY,IAAIC,EAAE,qGAEzE,wHAA0F,sBAAMlP,UAAU,YAAhB,uBAC1F,6BACKX,EAAasG,KAAI,SAAC1B,EAAG2B,GAAJ,OAAU,qBAAI5F,UAAU,YAAd,eAAqCiE,IAAN2B,gBAKnE,GACHuI,GACG,qBAAKnO,UAAU,sBAAf,SACI,sBAAKA,UAAU,SAAf,UACA,qBAAK4O,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,YAAY9O,UAAU,8BAAlF,SACI,sBAAM+O,cAAc,QAAQC,eAAe,QAAQC,YAAY,IAAIC,EAAE,gEAEzE,uBAAOlP,UAAU,YAAjB,SAA8BmO,SAKtC,wBAAQnO,UAAU,kBAAkBiL,KAAK,SAASO,SAAUvM,EAA5D,2B,UCzMdwQ,I,OAAS,CAEXC,eAAgB,SAChBC,QAAS,qBACTC,gBAAiB,UACjBC,KAAM,GAENC,UAAW,gBACXC,UAAW,YACXC,OAAQ,mBACRC,OAAQ,eACRC,OAAQ,mBACRC,OAAQ,iBA6FGC,OA1Ff,WACI,MAA8BpR,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA0BF,mBAAS,IAAnC,mBAAcuH,GAAd,WACA,EAA8BvH,oBAAS,GAAvC,mBAAOiN,EAAP,KAGA,GAHA,KAGoCjN,mBAAS,KAA7C,mBAAOmN,EAAP,KAAmBC,EAAnB,KACA,EAA8CpN,mBAAS,GAAvD,mBAAOqR,EAAP,KAAwBC,EAAxB,KAGA,EAAwBtR,mBAAS,GAAjC,mBAAO6Q,EAAP,KAAaU,EAAb,KACA,EAA0BvR,mBAAS,GAAnC,mBAAOwR,EAAP,KAoCA,OApCA,KAMAjR,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,sEAEQ0B,GAAW,GAFnB,SAI0BtB,MAAM,GAAD,OAAIC,6BAAJ,+BAA2D2S,EAA3D,iBAAyEX,EAAzE,gCAA4G,CAC/HvL,OAAQ,MACRxG,YAAa,YANzB,cAIcwH,EAJd,gBAS0BA,EAAIrH,OAT9B,UAW0B,QAFZsF,EATd,QAWepF,OAXf,uBAWsC,IAAIuG,MAAM,iBAXhD,QAaWuH,IACCG,EAAc,YAAI7I,EAAIrF,OACtBoS,EAAmB/M,EAAIkN,YAfnC,kDAmBQxE,GAAW1F,EAAS,KAAMlI,SAnBlC,yBAqBQ4N,GAAW/M,GAAW,GArB9B,8EADY,uBAAC,WAAD,wBA0BZwR,KACD,CAACF,EAAOX,IAIP,gCACI,qBAAK7P,UAAU,6BAAf,SACI,cAAC,IAAD,CAAME,GAAG,IAAIF,UAAU,wCAAvB,uBAEJ,cAAC,EAAD,CAAS8K,MAAM,oBAAoBC,UAAU,KAC7C,wBAAO/K,UAAU,eAAjB,UACI,gCACA,+BACI,gDACA,wCACA,6CAGJ,kCACCf,GACG,6BACI,8CAGNA,GAAYkN,EAAW3I,OACrB2I,EAAWxG,KAAI,SAAA0G,GACX,IAAMlO,EAASkO,EAAUlO,OACnBwS,EAAmB,YAAXxS,EAAuB,sBAAmC,YAAXA,EAAwB,wBAA0B,oBAE/G,OAAO,+BACK,6BAAKkO,EAAU3N,MAAQ,eACvB,6BAAK2N,EAAU1H,SAASnB,SACxB,6BAAI,cAAC,IAAD,CAAMtD,GAAE,qBAAgBmM,EAAUC,KAAOtM,UAAW2Q,EAApD,SAA4DxS,QAH5DkO,EAAUC,QALA,WAgBrC,qBAAKtM,UAAU,wCAAf,SACI,cAAC,KAAD,CAAY4Q,SAAUJ,EAAOK,MAAOR,EAAiB/H,QAASuH,EAAMJ,OAAQA,GAAQ/J,SAvEjG,SAA0B4C,EAASsI,GAC/BL,EAAQjI,YCyBDwI,OAvDf,WAEI,IAAOhK,EAAMsI,cAANtI,GACP,EAA8B9H,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAAwBF,mBAAS,IAAjC,mBAAOd,EAAP,KAAa6S,EAAb,KACA,EAA0B/R,mBAAS,IAAnC,mBAAOT,EAAP,KAAcgI,EAAd,KA6BA,OA3BAhH,qBAAU,WAAM,4CACZ,8BAAA/B,EAAA,sEAEQ0B,GAAW,GAFnB,SAI0BtB,MAAM,GAAD,OAAIC,6BAAJ,yBAAqDiJ,GAAK,CAC7ExC,OAAQ,MACRxG,YAAa,YANzB,cAIcwH,EAJd,gBAS0BA,EAAIrH,OAT9B,UAW0B,QAFZsF,EATd,QAWepF,OAXf,uBAWsC,IAAIuG,MAAM,iBAXhD,QAaQqM,EAAQ,eAAIxN,EAAIrF,OAbxB,kDAeQqI,EAAS,KAAMlI,SACfG,QAAQC,IAAI,kDACZD,QAAQC,IAAR,MAjBR,yBAmBQS,GAAW,GAnBnB,8EADY,uBAAC,WAAD,wBAwBZwR,KACD,IAGC,gCACI,qBAAK1Q,UAAU,6BAAf,SACI,cAAC,IAAD,CAAME,GAAG,cAAcF,UAAU,wCAAjC,uBAEFf,GAAYV,EAWV,KAVA,qCACI,cAAC,EAAD,CAASuM,MAAM,WACd5M,EAAK8S,QAAQrL,KAAI,SAAC1B,EAAG2B,GAAJ,OAAU,mBAAW5F,UAAU,yBAArB,SAA+CiE,GAAvC2B,MAEpC,qBAAK5F,UAAU,SAEf,cAAC,EAAD,CAAS8K,MAAM,UACd5M,EAAK+S,OAAOtL,KAAI,SAAC1B,EAAG2B,GAAJ,OAAU,mBAAW5F,UAAU,uBAArB,SAA6CiE,GAArC2B,aCfxCsL,OAtBf,WAEI,OACI,8BACI,eAAC,IAAD,WACI,cAAC,IAAD,CAAOjR,OAAK,EAACkR,KAAK,IAAIC,UAAWtF,IACjC,cAAC,IAAD,CAAO7L,OAAK,EAACkR,KAAK,cAAcC,UAAWhB,KAC3C,cAAC,IAAD,CAAOnQ,OAAK,EAACkR,KAAK,kBAAkBC,UAAWN,KAC/C,cAAC,IAAD,CAAO7Q,OAAK,EAACkR,KAAK,UAAUC,UAAWpF,IACvC,cAAC,IAAD,CAAO/L,OAAK,EAACkR,KAAK,SAASC,UAAW7D,KACtC,cAAC,IAAD,CAAOtN,OAAK,EAACkR,KAAK,kBAAkBC,UAAWjC,KAC/C,cAAC,IAAD,CAAOlP,OAAK,EAACkR,KAAK,gBAAgBC,UAAWtD,KAC7C,cAAC,IAAD,CAAO7N,OAAK,EAACkR,KAAK,cAAcC,UAAW3E,IAC3C,cAAC,IAAD,CAAOxM,OAAK,EAACkR,KAAK,UAAUC,UAAW1E,KACvC,cAAC,IAAD,CAAOzM,OAAK,EAACkR,KAAK,YAAYC,UAAW/D,KACzC,cAAC,IAAD,CAAOpN,OAAK,EAACkR,KAAK,cAAcC,UAAW9D,KAC3C,cAAC,IAAD,CAAOrN,OAAK,EAACkR,KAAK,IAAIC,UAAWrF,U,UC1BpCsF,GAAgBxS,0BAEtB,SAASyS,GAAevS,GAE3B,MAA0CC,oBAAS,GAAnD,mBAAOuS,EAAP,KAAsBC,EAAtB,KACOrS,EAAgB4D,qBAAWnE,GAA3BO,aACP,EAA8BH,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA4BF,wBAASuL,GAArC,mBAAOkH,EAAP,KAAeC,EAAf,KALiC,SAQlBC,IARkB,2EAQjC,4BAAAnU,EAAA,kEAEQgB,QAAQC,IAAI,uCAEZS,GAAW,GACPC,EALZ,iEAO0BvB,MAAM,GAAD,OAAIC,6BAAJ,uBAA2D,CAC9EyG,OAAQ,OACRa,QAAS,CACL,eAAgB,oBAEpBrH,YAAa,UACboG,KAAMkB,KAAKC,UAAU,CAAC,SAAYlG,EAAamN,QAb3D,cAOchH,EAPd,iBAe0BA,EAAIrH,OAf9B,QAiB0B,OAjB1B,OAiBeE,QACHK,QAAQC,IAAI,yCAEZ+S,GAAiB,GACjB5T,MAAM,GAAD,OAAIC,6BAAJ,YAAgD,CACjDyG,OAAQ,OACRa,QAAS,CACL,eAAgB,oBAEpBrH,YAAa,UACboG,KAAMkB,KAAKC,UAAU,CAAC,GAAMlG,EAAamN,QAE5CvO,MAAK,SAAAG,GACF,OAAOA,EAAKD,UAEfF,MAAK,SAAAG,GACFM,QAAQC,IAAI,YAAaP,GACzBM,QAAQC,IAAI,wBAEfH,OAAM,SAAAsT,GACHpT,QAAQC,IAAI,wBAGhB+S,GAAiB,GAxC7B,kDA2CQA,GAAiB,GA3CzB,yBA6CQtS,GAAW,GA7CnB,8EARiC,sBAgHjC,OAtDAK,qBAAU,WACNoS,MACD,IAIHpS,qBAAU,WACc,OAAjBJ,IACCX,QAAQC,IAAI,aACRgT,GACAC,GAAU,kBAAMG,cAAGhU,oCAM5B,CAACsB,IAYAI,qBAAU,gBACQgL,IAAXkH,IACCA,EAAOK,GAAG,WAAW,WACjBtT,QAAQC,IAAI,sCAGK,IAAlB8S,GACCE,EAAOM,OAAM,SAACC,EAAW9T,GACrB,GAAGA,EAAKgC,KAAOf,EAAamN,IACxB,OAAQ0F,GACJ,IAAK,kBACDnO,OAAOyL,SAAS2C,gBAWzC,CAACR,EAAQF,IAKZ,cAACF,GAAczR,SAAf,CAAwBC,MAAO,CAAC0R,gBAAeC,mBAAkBG,oBAAmB1S,UAASwS,UAA7F,SACK1S,EAAMe,W,yBCvGJoS,OAhBf,YAAiC,IAAjBjH,EAAgB,EAAhBA,KAAM5M,EAAU,EAAVA,QAClB,OACI,qBAAK2B,UAAS,sBAAiBiL,EAAjB,SAAd,SACI,sBAAKjL,UAAU,SAAf,UACI,qBAAK4O,MAAM,6BAA6BC,KAAK,OAAOC,QAAQ,YACxD9O,UAAU,8BADd,SAEI,sBAAM+O,cAAc,QAAQC,eAAe,QAAQC,YAAY,IAC3DC,EAAE,qGAGV,gCAAQ7Q,UC4DT8T,OAjEf,WAEI,MAA0BnT,mBAAS,IAAnC,mBAAOoT,EAAP,KAAcC,EAAd,KACA,EAAwCrT,mBAAS,IAAjD,mBAAOK,EAAP,KAAqBC,EAArB,KACA,EAA2DyD,qBAAWsO,IAA/DpS,EAAP,EAAOA,QAASwS,EAAhB,EAAgBA,OAAQF,EAAxB,EAAwBA,cAAeC,EAAvC,EAAuCA,iBAChCrS,EAAgB4D,qBAAWnE,GAA3BO,aAyCP,OAZAI,qBAAU,WAKN,OAJKN,GAAWwS,IAA8B,IAAlBF,GA5BhC,SAAmBE,GAEfA,EAAOM,OAAM,SAACC,EAAW9T,GACrB,GAAGA,EAAKgC,KAAOf,EAAamN,IACxB,OAAQ0F,GACJ,IAAK,KACDM,KAAGC,UAAUrU,EAAKA,MACbH,MAAK,SAAA6L,GACFyI,EAASzI,MAErB,MACA,IAAK,WACD4H,GAAiB,GACrB,MACA,IAAK,YACDlS,EAAgB,4CACpB,MACA,IAAK,kBACDA,EAAgB,oEAW5BkT,CAAUf,GAGP,YACCxS,GAAWwS,GACXA,EAAOgB,mBAAmB,CAAC,KAAM,WAAY,iBAGtD,CAACxT,IAGA,qBAAK6H,GAAG,QAAR,SACI,sBAAK9G,UAAU,2DAAf,UACI,qBAAKA,UAAU,gHACf,qBAAKA,UAAU,mHACf,sBAAKA,UAAU,4DAAf,UACI,cAAC,GAAD,CAAOiL,KAAK,QAAQ5M,QAASgB,GAAgB,0CAC7C,mBAAGW,UAAU,oDAAb,mDACA,qBAAKA,UAAU,mCAAf,SACI,qBAAKA,UAAU,wBAAf,SAAuC,qBAAKA,UAAU,gBAAgByK,IAAK2H,EAAO1H,IAAI,sBAG9F,qBAAK1K,UAAU,yFACf,qBAAKA,UAAU,sHC9DlB0S,GAAgB7T,0BAEhB8T,GAAiB,SAAA5T,GAE1B,IAAOwS,EAAiBxO,qBAAWsO,IAA5BE,cACP,EAA8BvS,oBAAS,GAAvC,mBAAOC,EAAP,KACA,GADA,KACgCD,mBAAS,CACrC,OAAU,EACV,KAAQ,MAFZ,mBAAO2F,EAAP,UAsCA,OAjCApF,qBAAU,cA+BP,CAACgS,IAGA,cAACmB,GAAc9S,SAAf,CAAwBC,MAAO,CAACZ,UAAS0F,YAAzC,SACK5F,EAAMe,YCYJC,OAzDf,WAEI,IAAOwR,EAAiBxO,qBAAWsO,IAA5BE,cACP,EAAwBvS,mBAAS,IAAjC,mBAAON,EAAP,KAAakU,EAAb,KACA,EAAsC5T,mBAAS,IAA/C,mBAAO6T,EAAP,KAAoBC,EAApB,KACA,EAA0C9T,mBAAS,IAAnD,mBAAO+T,EAAP,KAAsBC,EAAtB,KALmB,4CAOnB,4BAAAxV,EAAA,sEACsBI,MAAM,GAAD,OAAIC,6BAAJ,gBAAoD,CAACC,YAAa,YAD7F,cACUwH,EADV,gBAEsBA,EAAIrH,OAF1B,OAIsB,OAJtB,OAIWE,QAAiB0F,OAAOyL,SAAS2C,SAJ5C,4CAPmB,sBAyCnB,OA3BA1S,qBAAU,WAAM,4CAEZ,wCAAA/B,EAAA,+EAE0BI,MAAM,GAAD,OAAIC,6BAAJ,cAAkD,CACrEC,YAAa,YAHzB,cAEcwH,EAFd,gBAK0BA,EAAIrH,OAL9B,OAO0B,QAFZsF,EALd,QAOepF,SAAiB,EACwHoF,EAAIrF,KAAzI+U,EADY,EACZA,SAAUC,EADE,EACFA,GADE,IACEC,kBADF,MACe,uGADf,EAGnBP,EAAQK,GACRH,EAAeI,EAAG1T,MAClBwT,EAAiBG,IAZ7B,kDAeQ3U,QAAQC,IAAR,MAfR,2DAFY,sBAsBT8S,GAtBU,WAAD,wBAuBR6B,KAEL,CAAC7B,IAGA,qBAAKvR,UAAU,6CAAf,SACI,sBAAKA,UAAU,0BAAf,UACI,qBAAKA,UAAU,6BAA6BqT,MAAM,KAAKC,OAAO,KAAK7I,IAAKsI,EAAerI,IAAI,iBAC3F,sBAAK1K,UAAU,8CAAf,UACI,mBAAGA,UAAU,YAAb,SAA0BtB,IAC1B,4BAAImU,IACJ,yBAAQ7S,UAAU,yBAAyBgG,QAhDxC,2CAgDH,UACI,cAAC,IAAD,CAAiB7F,KAAMoT,IAAcvT,UAAU,SADnD,sBCLLwT,OAnCf,WAEI,MAA6EzQ,qBAAWpC,GAAjFE,EAAP,EAAOA,YAAaC,EAApB,EAAoBA,eAAgBC,EAApC,EAAoCA,UAAWC,EAA/C,EAA+CA,aAAcC,EAA7D,EAA6DA,aAG7D,OAFwB8B,qBAAWsO,IAA5BE,cAGC,cAAC,GAAD,UACI,eAAC,IAAD,WAEKxQ,GAAa,qBAAKf,UAAU,mBAAf,SACV,sBAAKA,UAAU,YAAf,UACI,mBAAGA,UAAU,cAAb,SAA4BiB,IAC5B,qBAAKjB,UAAU,eAAf,SACI,wBAAQA,UAAU,4BAA4BgG,QAAS,kBAAMhF,GAAa,IAA1E,0BAKZ,sBAAKhB,UAAU,gCAAf,UACKa,GAAe,sBAAKb,UAAU,iCAAf,UACZ,cAACyT,GAAD,IACA,cAAC,EAAD,OAEJ,sBAAKzT,UAAS,wBAAmBa,EAAc,2BAA6B,cAA5E,UACI,yBAAQb,UAAU,qCAAqCgG,QAAS,kBAAMlF,GAAe,SAAAmH,GAAC,OAAKA,MAA3F,UACI,cAAC,IAAD,CAAiB9H,KAAMuT,IAAQ1T,UAAU,SAD7C,WAGA,cAAC,GAAD,eAtBA,cAAC,GAAD,K,8CChB5B,+BAAAxC,EAAA,6DAAqCmW,EAArC,EAAqCA,MAAOC,EAA5C,EAA4CA,SAA5C,kBAEW,IAAInW,SAAQ,SAACC,EAASC,GAEzB,IACI,IAAMO,EAAO,CAACyV,QAAOC,YACrBhW,MAAM,GAAD,OAAIC,6BAAJ,gBAAoD,CACrDyG,OAAQ,OACRa,QAAS,CACL,eAAgB,oBAEpBrH,YAAa,UACboG,KAAMkB,KAAKC,UAAUnH,KAExBH,MAAK,SAAAC,GAAQ,OAAIA,EAASC,UAC1BF,MAAK,SAAAG,GACiB,OAAhBA,EAAKC,OACJR,EAAO,CACHS,UAAW,eACXC,QAASH,EAAKG,UAGlBX,EAAQ,CAAC8B,KAAMtB,EAAKA,KAAKsB,UAGhClB,OAAM,SAAAC,GACHZ,EAAO,CACHS,UAAW,eACXC,QAASE,EAAMF,aAIzB,MAAOE,GACLZ,EAAO,CACHS,UAAW,eACXC,QAASE,EAAMF,eAnC/B,4C,sBA2CewV,O,6CCiBAC,OAxDf,WAEI,MAAyD/Q,qBAAWnE,GAA7DS,EAAP,EAAOA,aAAcC,EAArB,EAAqBA,gBAAiBF,EAAtC,EAAsCA,gBACtC,EAA8BJ,oBAAS,GAAvC,mBAAOC,EAAP,KAAgBC,EAAhB,KAEA,EAA0BF,mBAAS,IAAnC,mBAAO2U,EAAP,KAAcI,EAAd,KACA,EAAgC/U,mBAAS,IAAzC,mBAAO4U,EAAP,KAAiBI,EAAjB,KAkBA,OACI,qBAAKlN,GAAG,QAAR,SACI,sBAAK9G,UAAU,2DAAf,UACI,qBAAKA,UAAU,gHACf,qBAAKA,UAAU,mHACf,sBAAKA,UAAU,uDAAf,UACKX,GAAgB,cAAC,GAAD,CAAO4L,KAAK,QAAQ5M,QAASgB,IAC7CJ,GAAW,cAAC,GAAD,CAAOgM,KAAK,OAAO5M,QAAQ,YACvC,sBAAK2B,UAAU,yBAAf,UACI,qBAAKyK,IAAI,YAAY4I,MAAM,KAAK3I,IAAI,SACpC,sBAAK1K,UAAU,OAAf,UACI,oBAAIA,UAAU,0BAAd,qBACA,mBAAGA,UAAU,oDAAb,mDAGR,uBAAMqO,SA9BtB,SAAsBpK,GAClBA,EAAEqK,iBAEFpP,GAAW,GACX2U,GAAqB,CAACF,QAAOC,aAChB7V,MAAK,YAAa,IAAXyB,EAAU,EAAVA,KACJJ,EAAgBI,MAEnBlB,OAAM,YAAgB,IAAdD,EAAa,EAAbA,QACLa,GAAW,GACXI,EAAgBjB,OAoBpB,UACI,sBAAK2B,UAAU,YAAf,UACI,uBAAOiL,KAAK,QAAQxF,YAAY,QAAQ5F,MAAO8T,EAAOjO,SAAU,SAAAzB,GAAC,OAAI8P,EAAS9P,EAAEX,OAAOzD,QAAQ2L,SAAUvM,EAAS0P,UAAQ,IAC1H,uBAAO1D,KAAK,WAAWxF,YAAY,WAAW5F,MAAO+T,EAAUlO,SAAU,SAAAzB,GAAC,OAAI+P,EAAY/P,EAAEX,OAAOzD,QAAQ2L,SAAUvM,EAAS0P,UAAQ,OAE1I,qBAAK3O,UAAU,mBAAf,SACI,wBAAQA,UAAU,sDAAlB,2BAIZ,qBAAKA,UAAU,yFACf,qBAAKA,UAAU,sHC9ChBiU,OARf,WACI,OACI,qBAAKjU,UAAU,+DAAf,SACI,qBAAKyK,IAAI,eAAeC,IAAI,kBCmBzBwJ,OAff,WAEE,MAAgCnR,qBAAWnE,GAApCO,EAAP,EAAOA,aAEP,OAFA,EAAqBF,QAGT,cAAC,GAAD,IAAcE,EACtB,cAACyB,EAAD,UACE,cAAC0Q,GAAD,UACE,cAAC,GAAD,QAGF,cAAC,GAAD,KCRO6C,GAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,8BAAqBtW,MAAK,YAAkD,IAA/CuW,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCDdO,EAAQ,KAAUC,OAAO,CACvBzD,KAAM,QAIR0D,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,UACE,cAAC,GAAD,QAGJC,SAASC,eAAe,SAM1Bd,O","file":"static/js/main.9a887655.chunk.js","sourcesContent":["async function CheckAuth() {\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n // validasi\r\n try {\r\n fetch(`${process.env.REACT_APP_SERVER_URL}/auth/verify`, {\r\n credentials: 'include'\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if(data.status !== 'ok'){\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: data.message\r\n })\r\n }else{\r\n resolve(data.data)\r\n }\r\n })\r\n .catch(error => {\r\n console.log(error)\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: error.name\r\n })\r\n })\r\n\r\n } catch (error) {\r\n console.log(error)\r\n let message = error.message;\r\n\r\n if(message === \"jwt malformed\"){\r\n message = 'authentikasi gagal, silahkan login kembali'\r\n }\r\n\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: 'authentikasi gagal, silahkan login kembali'\r\n })\r\n\r\n }\r\n })\r\n}\r\nexport default CheckAuth","import { createContext, useEffect, useState } from \"react\";\r\nimport CheckAuth from '../helper/auth/CheckAuth'\r\nimport Cookies from 'js-cookie'\r\n\r\nexport const AuthContext = createContext();\r\n\r\nexport const AuthContextProvider = props => {\r\n\r\n const [loading, setLoading] = useState(true)\r\n const [loggedInUser, setLoggedInUser] = useState(null)\r\n const [errorMessage, setErrorMessage] = useState('')\r\n\r\n useEffect(() => {\r\n CheckAuth()\r\n .then(data => {\r\n setLoggedInUser(data.user)\r\n })\r\n .catch(error => {\r\n Cookies.remove('token')\r\n setErrorMessage(error.message)\r\n })\r\n .finally(() => {\r\n setLoading(false)\r\n })\r\n }, [])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n\r\n}","import {NavLink} from 'react-router-dom'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faBullhorn, faReply, faCloudDownloadAlt, faCog, faTags } from '@fortawesome/free-solid-svg-icons'\r\nimport { faClock, faFile } from '@fortawesome/free-regular-svg-icons'\r\n\r\n\r\nfunction SidebarMenu() {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default SidebarMenu\r\n","import { createContext, useState } from \"react\";\r\n\r\nexport const ThemeContext = createContext()\r\n\r\nexport function ThemeContextProvider(props){\r\n\r\n const [showSidebar, setShowSidebar] = useState(true)\r\n const [showPopup, setShowPopup] = useState(false)\r\n const [popupMessage, setPopupMessage] = useState(\"\")\r\n\r\n function showPopupMessage(message){\r\n setShowPopup(true)\r\n setPopupMessage(message)\r\n }\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n\r\n}","import { createContext, useContext, useState } from \"react\";\r\nimport { ThemeContext } from \"./ThemeContext\";\r\n\r\n\r\nexport const BroadCastContext = createContext();\r\n\r\nexport const BroadCastContextProvider = props => {\r\n\r\n const [loadingBroadcast, setLoadingBroadcast] = useState(false);\r\n const [targetContacts, setTargetContacts] = useState(\"\");\r\n const [targetContactsError, setTargetContactsError] = useState([]);\r\n const [textContents, setTextContents] = useState([\"Hello world...\"]);\r\n const [textContentsError, setTextContentsError] = useState(\"\");\r\n const [files, setFiles] = useState([]);\r\n const [filesError, setFilesError] = useState(\"\");\r\n const [activeContent, setActiveContent] = useState(0);\r\n const [sendNow, setSendNow] = useState(true);\r\n const [schedule, setSchedule] = useState({\r\n name: \"\",\r\n date: new Date(),\r\n hour: 3\r\n });\r\n const [scheduleError, setScheduleError] = useState(\"\");\r\n const {showPopupMessage} = useContext(ThemeContext);\r\n\r\n function resetData(){\r\n setTargetContacts(\"\");\r\n setTargetContactsError([]);\r\n setTextContents([\"\"]);\r\n setTextContentsError(\"\");\r\n setFiles([]);\r\n setFilesError(\"\");\r\n setActiveContent(0);\r\n setSendNow(true);\r\n setSchedule({\r\n name: \"\",\r\n date: new Date(),\r\n hour: 3\r\n });\r\n }\r\n\r\n function validateTargets(){\r\n const errors = []\r\n const targets = targetContacts.split('\\n').filter(target => target)\r\n const res = {}\r\n\r\n if(!targets.length){\r\n res.status = 'failed'\r\n res.errors = [\"target wajib diisi\"]\r\n return res\r\n }\r\n\r\n targets.forEach(target => {\r\n if(!target.split(',')[0].match(/^(^\\+62|62|^08)(\\d{3,4}-?){2}\\d{3,4}$/g)) errors.push(target)\r\n })\r\n\r\n\r\n if(errors.length){\r\n res.status = 'failed'\r\n res.errors = errors\r\n }else{\r\n res.status = 'ok'\r\n }\r\n\r\n return res\r\n }\r\n\r\n async function startBroadcast(){\r\n\r\n try {\r\n setLoadingBroadcast(true)\r\n\r\n // validate targetContacts\r\n const validate = validateTargets()\r\n if(validate.status !== 'ok'){\r\n setTargetContactsError(validate.errors)\r\n window.scrollTo({\r\n top: 200,\r\n behavior: 'smooth'\r\n })\r\n return\r\n }\r\n setTargetContactsError(\"\")\r\n\r\n // validate file\r\n if(files.length>5){\r\n setFilesError(\"max 5 file\")\r\n return\r\n }\r\n\r\n // validate textContents\r\n const validTextContents = textContents.filter(e => e)\r\n if(validTextContents.length<1){\r\n setTextContentsError(\"konten wajib diisi :)\");\r\n return\r\n }\r\n setTextContentsError(\"\");\r\n\r\n // validate schedule\r\n if(!sendNow && !schedule.name ){\r\n setScheduleError(\"nama schedule wajib diisi\")\r\n return\r\n }\r\n setScheduleError(\"\")\r\n\r\n // request broadcast\r\n // upload files\r\n if(files.length){\r\n\r\n try {\r\n const body = new FormData()\r\n\r\n for (const file of files) {\r\n body.append('files', file)\r\n }\r\n\r\n const reqSendFile = await fetch(`${process.env.REACT_APP_SERVER_URL}/upload`, {\r\n credentials: 'include',\r\n method: 'POST',\r\n body: body\r\n })\r\n\r\n const resSendFile = await reqSendFile.json()\r\n\r\n if(resSendFile.status === 'ok'){\r\n await doBroadCast(sendNow, schedule, targetContacts, textContents, resSendFile.files)\r\n }else{\r\n throw new Error('status not ok: failed uploading files')\r\n }\r\n\r\n } catch (error) {\r\n setFilesError(error.message || \"failed uploading files\")\r\n }\r\n\r\n }else{\r\n await doBroadCast(sendNow, schedule, targetContacts, textContents)\r\n }\r\n } catch (error) {\r\n console.log(error)\r\n showPopupMessage(error.message || \"error mengirim broadcast\")\r\n } finally {\r\n setLoadingBroadcast(false)\r\n }\r\n \r\n }\r\n\r\n async function doBroadCast(sendNow, schedule, contacts, contents, files){\r\n const date = new Date(schedule.date)\r\n const body = {\r\n name: schedule.name,\r\n contacts: contacts.split(\"\\n\"),\r\n files,\r\n contents,\r\n sendNow,\r\n schedule: {\r\n year: date.getFullYear(),\r\n month: date.getMonth(),\r\n day: date.getDate(),\r\n hour: schedule.hour\r\n }\r\n }\r\n\r\n try {\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/broadcast`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(body),\r\n method: 'POST',\r\n credentials: 'include'\r\n })\r\n const res = await req.json();\r\n\r\n if(res.status !== 'ok'){\r\n throw new Error(res.message || \"error saat membuat broadcast baru\")\r\n }else{\r\n showPopupMessage(`broadcast berhasil dibuat`);\r\n resetData()\r\n }\r\n\r\n \r\n\r\n } catch (error) {\r\n showPopupMessage(`error mengirim broadcast: ${error.message}`)\r\n }\r\n }\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}","import React, { useContext } from 'react'\r\nimport { BroadCastContext } from '../contexts/BroadCastContext';\r\n\r\n\r\nfunction TextAreaTarget({props}) {\r\n\r\n const {targetContacts, setTargetContacts} = props\r\n const {targetContactsError} = useContext(BroadCastContext)\r\n\r\n\r\n // target contacts handler\r\n function changeTargetContacts(e){\r\n setTargetContacts(e.target.value)\r\n }\r\n // end target contacts handler\r\n \r\n\r\n\r\n\r\n return (\r\n
\r\n \r\n {\r\n targetContactsError.length ?
\r\n

No HP atau Format salah:

\r\n {targetContactsError.map((error, i) =>

- {error}

)}\r\n
: null\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default TextAreaTarget","import React from 'react'\r\n\r\nfunction LoadingSpinner() {\r\n return (\r\n
\r\n
\r\n loading...\r\n
\r\n )\r\n}\r\n\r\nexport default LoadingSpinner\r\n","\r\n\r\nfunction DrawerItemKoleksi({props}) {\r\n\r\n const {labels, setTargetContacts} = props;\r\n\r\n function updateTargetContacts(contacts){\r\n setTargetContacts(contacts.join('\\n'))\r\n }\r\n\r\n return (\r\n
\r\n

Koleksi

\r\n
\r\n
\r\n {labels.map((e,i) => )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default DrawerItemKoleksi\r\n","import { useEffect, useState } from \"react\"\r\nimport LoadingSpinner from \"../LoadingSpinner\"\r\nimport DrawerItemKoleksi from \"./DrawerItemKoleksi\"\r\n\r\n\r\nfunction DrawerKontak({display, setDisplay, setTargetContacts}) {\r\n\r\n const [labels, setLabels] = useState([\"\"])\r\n const [loading , setLoading] = useState(true)\r\n const [error , setError] = useState(false)\r\n\r\n useEffect(() => {\r\n async function getLabels(){\r\n setLoading(true)\r\n try {\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label`,{\r\n credentials: 'include'\r\n });\r\n const res = await req.json()\r\n\r\n setLabels([...res.data])\r\n } catch (error) {\r\n console.log(error);\r\n setError(true)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n getLabels()\r\n }, [])\r\n\r\n let jsx;\r\n\r\n if(loading){\r\n jsx = \r\n }else if(error){\r\n jsx =

error mengambil data kontak, langsung lapor ke si kang zul pliss....

\r\n }else{\r\n jsx = (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n
setDisplay(false)}>
\r\n
\r\n
\r\n {jsx}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default DrawerKontak\r\n","import { useContext, useEffect, useState } from \"react\"\r\nimport { BroadCastContext } from \"../../contexts/BroadCastContext\"\r\nimport TextAreaTarget from \"../TextAreaTarget\"\r\nimport DrawerKontak from \"./DrawerKontak\"\r\nimport Files from 'react-files';\r\nimport readXlsxFile from 'read-excel-file'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faUserPlus, faFileExcel } from '@fortawesome/free-solid-svg-icons'\r\n\r\n\r\nfunction Tujuan() {\r\n\r\n const [display, setDisplay] = useState(false)\r\n const {targetContacts, setTargetContacts} = useContext(BroadCastContext)\r\n const [files, setFiles] = useState([])\r\n\r\n \r\n // files handler\r\n function onFilesChange(files){\r\n setFiles(files)\r\n }\r\n \r\n function onFilesError(error, file){\r\n console.log('error code ' + error.code + ': ' + error.message)\r\n }\r\n\r\n useEffect(() => {\r\n async function readFile(){\r\n try {\r\n const result = await readXlsxFile(files[0])\r\n const targets = result.map(target => {\r\n return target.join(',') + \"\\n\"\r\n })\r\n\r\n setTargetContacts(targets.join(''))\r\n } catch (error) {\r\n window.alert(`error saat uplaod file: format file harus berbentuk xlsx (${error.message})`)\r\n }\r\n }\r\n\r\n if(files.length){\r\n readFile()\r\n }\r\n }, [files])\r\n\r\n // end files handled\r\n\r\n return (\r\n
\r\n {/* drawer tujuan kontak */}\r\n \r\n \r\n {/*

Tujuan

\r\n
\r\n
\r\n \r\n \r\n
\r\n
*/}\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n

- internet HP harus nyala

\r\n

- aplikasi WhatsApp di HP terbuka

\r\n

- format tujuan: nohp,nama

\r\n

- ada error atau aneh\"? lapor ke si kang zul

\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Tujuan\r\n","import React, { useRef, useState } from 'react'\r\n\r\nfunction TextEditor({props}) {\r\n\r\n const {activeContent, textContents, setTextContents} = props;\r\n\r\n const textareaRef = useRef()\r\n const [cursorPosition, setCursorPosition] = useState({\r\n start: 0,\r\n end: 0\r\n })\r\n\r\n function handleBlur(e){\r\n const {selectionStart, selectionEnd} = textareaRef.current;\r\n\r\n setCursorPosition({\r\n start: selectionStart,\r\n end: selectionEnd\r\n })\r\n }\r\n\r\n function handleChange(e){\r\n setTextContents(c => {\r\n let tmpArr = [...c];\r\n tmpArr[activeContent] = e.target.value;\r\n return tmpArr\r\n })\r\n }\r\n\r\n function handleStyle(c){\r\n // format text\r\n let currentContent = textContents[activeContent].split('')\r\n const {start, end} = cursorPosition;\r\n if(start === end) return\r\n \r\n currentContent[start] = `${currentContent[start-1]===\" \" ? \"\":\" \"}${c}${currentContent[start]}`\r\n currentContent[end] = `${c}${currentContent[end]===\" \" ? \"\":\" \"}${currentContent[end] || \" \"}`\r\n currentContent = currentContent.join('')\r\n \r\n // set global content ke cyrrentContent\r\n setTextContents(c => {\r\n let tmpContent = [...c]\r\n tmpContent[activeContent] = currentContent\r\n return tmpContent\r\n })\r\n }\r\n\r\n function insertName(){\r\n let currentContent = textContents[activeContent].split('')\r\n const {end} = cursorPosition;\r\n\r\n currentContent[end] = `${currentContent[end] || \"\"}`\r\n currentContent = currentContent.join('')\r\n \r\n // set global content ke cyrrentContent\r\n setTextContents(c => {\r\n let tmpContent = [...c]\r\n tmpContent[activeContent] = currentContent\r\n return tmpContent\r\n })\r\n\r\n }\r\n\r\n function breakChat(){\r\n let currentContent = textContents[activeContent].split('')\r\n const {end} = cursorPosition;\r\n\r\n currentContent[end] = `===${currentContent[end] || \"\"}`\r\n currentContent = currentContent.join('')\r\n \r\n // set global content ke cyrrentContent\r\n setTextContents(c => {\r\n let tmpContent = [...c]\r\n tmpContent[activeContent] = currentContent\r\n return tmpContent\r\n })\r\n }\r\n\r\n return (\r\n
\r\n
\r\n 😄\r\n handleStyle('*')} >B\r\n handleStyle('_')} >I\r\n handleStyle('~')} >S\r\n Nama\r\n Break\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default TextEditor\r\n","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faCloudDownloadAlt, faPlusCircle, faTimesCircle, faTimes } from '@fortawesome/free-solid-svg-icons'\r\nimport { useContext, useEffect, useState } from 'react'\r\nimport TextEditor from './TextEditor'\r\nimport Files from 'react-files';\r\nimport { BroadCastContext } from '../../contexts/BroadCastContext';\r\n\r\n\r\nfunction WYSIWYG() {\r\n\r\n // TEXTAREA\r\n const {textContents, setTextContents, files, setFiles, filesError, setFilesError, textContentsError, activeContent, setActiveContent} = useContext(BroadCastContext)\r\n\r\n \r\n function addContent(){\r\n setTextContents(c => [...c, \"\"])\r\n }\r\n \r\n function removeContent(index){\r\n console.log(index);\r\n setActiveContent(0)\r\n setTextContents(c => c.filter((e,i) => i!==index))\r\n }\r\n\r\n function toJSX(textContent){\r\n // teplace \\n ke
\r\n let value = textContent;\r\n value = value.replace(new RegExp('\\r?\\n','g'), '
');\r\n\r\n // replace whatsapp style ke html style\r\n // html formatter\r\n const htmlFormat = [\r\n { symbol: '*', tag: 'b' },\r\n { symbol: '_', tag: 'em' },\r\n { symbol: '~', tag: 'del' },\r\n { symbol: '`', tag: 'code' },\r\n ];\r\n\r\n htmlFormat.forEach(({ symbol, tag }) => {\r\n if(!value) return;\r\n\r\n const regex = new RegExp(`\\\\${symbol}([^${symbol}]*)\\\\${symbol}`, 'gm');\r\n const match = value.match(regex);\r\n if(!match) return;\r\n\r\n match.forEach(m => {\r\n let formatted = m;\r\n for(let i=0; i<2; i++){\r\n formatted = formatted.replace(symbol, `<${i > 0 ? '/' : ''}${tag}>`);\r\n }\r\n value = value.replace(m, formatted);\r\n });\r\n });\r\n \r\n return value\r\n }\r\n //END TEXTAREA\r\n\r\n\r\n // FILES\r\n const [featuredImage, setFeaturedImage] = useState('')\r\n\r\n function onFilesChange(files){\r\n setFiles(() => [...files])\r\n }\r\n \r\n function onFilesError(error, file){\r\n switch (error.code) {\r\n case 2:\r\n setFilesError('ukuran file terlalu besar!!!')\r\n setTimeout(() => {\r\n setFilesError(\"\")\r\n }, 3000);\r\n break;\r\n case 4:\r\n setFilesError('maksimal 5 file')\r\n setTimeout(() => {\r\n setFilesError(\"\")\r\n }, 3000);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n function handleDelete(id){\r\n setFiles(c => c.filter(file => file.id !== id))\r\n }\r\n\r\n\r\n useEffect(() => {\r\n if(files.length){\r\n const imagesFormat = [\"jpg\", \"jpeg\", \"png\"];\r\n if(imagesFormat.includes(files[0].extension)){\r\n files[0].arrayBuffer()\r\n .then(buffer => {\r\n const blob = new Blob( [ buffer ] );\r\n const url = URL.createObjectURL( blob );\r\n setFeaturedImage(url)\r\n })\r\n }else{\r\n setFeaturedImage('')\r\n }\r\n }\r\n }, [files])\r\n \r\n // END FILES\r\n\r\n return (\r\n <>\r\n

Pesan

\r\n
\r\n \r\n \r\n
\r\n

Upload File (gambar, video, dokumen)

\r\n

Max 5 file & Max 50.0 MB per file

\r\n
\r\n
\r\n
\r\n\r\n
\r\n {filesError &&

{filesError}

}\r\n {\r\n !files.length ?

tidak ada file yang dipilih...

: files.map((file,i) => {\r\n return {file.name} handleDelete(file.id)} size=\"lg\" />\r\n })\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n {textContents.map((item, index) => {\r\n return (\r\n
\r\n \r\n {index ? removeContent(index)} /> : undefined}\r\n
\r\n )\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Preview Pesan
\r\n
\r\n {(files.length && featuredImage) ? \"uploaded : \"\"}\r\n {textContents[activeContent]?.split(\"===\").map((e, i) => (\r\n
\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {textContentsError && (\r\n

{textContentsError}

\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default WYSIWYG\r\n","import React from 'react'\r\n\r\nfunction Heading({judul, deskripsi}) {\r\n return (\r\n
\r\n

{judul}

\r\n
\r\n

{deskripsi}

\r\n
\r\n )\r\n}\r\n\r\nexport default Heading\r\n","import React, { useContext} from 'react'\r\nimport DatePicker from \"react-datepicker\";\r\nimport { addDays } from 'date-fns';\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { BroadCastContext } from '../../contexts/BroadCastContext';\r\n\r\n\r\nfunction TanggalKirim() {\r\n\r\n const {sendNow, setSendNow, schedule, setSchedule, scheduleError} = useContext(BroadCastContext)\r\n\r\n function changeScheduleName(e){\r\n const name = e.target.value.replace( / +/g, ' ' );\r\n setSchedule(c => ({...c, name}))\r\n }\r\n\r\n return (\r\n
\r\n

Tanggal Kirim

\r\n
\r\n setSendNow(c => !c)} checked={sendNow || false}/>\r\n Kirim Sekarang\r\n
\r\n
\r\n
\r\n setSchedule(c => ({...c, date}))}\r\n minDate={new Date()}\r\n maxDate={addDays(new Date(), 90)}\r\n isClearable={true}\r\n disabled={sendNow}\r\n withPortal\r\n />\r\n
\r\n \r\n \r\n
\r\n {scheduleError && (\r\n
\r\n {scheduleError}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport default TanggalKirim\r\n","import React, { useContext } from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faBullhorn } from '@fortawesome/free-solid-svg-icons'\r\nimport { BroadCastContext } from '../../contexts/BroadCastContext'\r\n\r\n\r\nfunction StartBroadcast() {\r\n\r\n const {startBroadcast} = useContext(BroadCastContext)\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default StartBroadcast\r\n","import React from 'react'\r\n\r\nfunction LoadingMainContent() {\r\n return (\r\n
\r\n
\r\n
\r\n

Loading...

\r\n

Loading...

\r\n

Loading...

\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default LoadingMainContent\r\n","import { Link } from 'react-router-dom'\r\nimport Tujuan from './Tujuan'\r\nimport WYSIWYG from './WYSIWYG'\r\nimport Heading from '../Heading'\r\nimport TanggalKirim from './TanggalKirim'\r\nimport StartBroadcast from './StartBroadcast'\r\nimport { useContext } from 'react'\r\nimport { BroadCastContext } from '../../contexts/BroadCastContext'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faFolder } from '@fortawesome/free-regular-svg-icons'\r\nimport LoadingMainContent from '../LoadingMainContent'\r\n\r\n\r\nfunction BroadcastContents() {\r\n\r\n const {loadingBroadcast} = useContext(BroadCastContext)\r\n\r\n return (\r\n
\r\n {loadingBroadcast ? (\r\n \r\n ):null}\r\n\r\n
\r\n \r\n Laporan\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default BroadcastContents\r\n","import { BroadCastContextProvider } from '../../contexts/BroadCastContext'\r\nimport BroadcastContents from './BroadcastContents'\r\n\r\nfunction BroadcastPage() {\r\n\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default BroadcastPage\r\n","import React from 'react'\r\n\r\nfunction PageNotFound() {\r\n return (\r\n
\r\n
\r\n\r\n

\r\n 4 0 4
\r\n Woops!!! Halaman tidak ditemukan...\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PageNotFound\r\n","import React, { useEffect, useState } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash } from '@fortawesome/free-solid-svg-icons';\r\nimport LoadingMainContent from '../LoadingMainContent';\r\n\r\n\r\nfunction JadwalPesan() {\r\n\r\n const [error, setError] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const [mounted, setMounted] = useState(true);\r\n\r\n const [broadcasts, setBroadcasts] = useState([])\r\n\r\n\r\n async function removeBroadcast(id){\r\n try {\r\n setLoading(true);\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/broadcast/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include'\r\n })\r\n \r\n const res = await req.json();\r\n \r\n if(res.status === 'ok'){\r\n setBroadcasts(c => c.filter(broadcast => broadcast._id !== id))\r\n }\r\n } catch (error) {\r\n setError(error.message)\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/broadcast/?sendNow=false`, {credentials: 'include'});\r\n const res = await req.json();\r\n\r\n if(res.status !== 'ok') throw new Error(res.message);\r\n\r\n if(mounted) setBroadcasts([...res.data]);\r\n\r\n } catch (error) {\r\n setError(error.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n })()\r\n\r\n\r\n return () => {\r\n setMounted(false)\r\n }\r\n }, [])\r\n\r\n\r\n return (\r\n
\r\n\r\n {loading && }\r\n {error &&

error saat mengambil data: {error}

}\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {broadcasts.map(broadcast => {\r\n const {_id=\"\", name=\"\", schedule={}, status=\"\"} = broadcast;\r\n const {year=0, month=0, day=0, hour=0} = schedule\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n
Nama ScheduleWaktu KirimStatus
\r\n

{name}

\r\n
\r\n

{`${day}-${month}-${year}, jam ${hour}`}

\r\n
\r\n
\r\n {status}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default JadwalPesan\r\n","import React from 'react'\r\n\r\nfunction AutoReply() {\r\n return (\r\n
\r\n Auto Reply\r\n
\r\n )\r\n}\r\n\r\nexport default AutoReply\r\n","import React, { useEffect, useState } from 'react'\r\nimport LoadingMainContent from '../LoadingMainContent'\r\nimport download from 'downloadjs';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faWhatsapp } from '@fortawesome/free-brands-svg-icons'\r\n\r\n\r\nfunction ScrapeData() {\r\n const [mounted, setMounted] = useState(true)\r\n const [loading, setLoading] = useState()\r\n const [error, setError] = useState(\"\")\r\n const [groups, setGroups] = useState([])\r\n const [textAreaValues, setTextAreaValues] = useState(\"\")\r\n \r\n\r\n async function scrapeWAContact(){\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/import`, {credentials: 'include'});\r\n const blob = await req.blob();\r\n\r\n\r\n download(blob, \"whatsapp contacts.csv\");\r\n\r\n } catch (error) {\r\n setError(error.message)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n function importGroupParticipants(id){\r\n // PR, harus filter by id, bukan by name, kalau by name bisa duplikat karena ada grup dengan nama yang sama\r\n const data = groups.filter(group => group.id === id)[0];\r\n const participants = data.participants.map(participan => participan.id.user);\r\n\r\n setTextAreaValues(participants.join('\\n'))\r\n }\r\n\r\n useEffect(() => {\r\n\r\n (async () => {\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/groups`, {credentials: 'include'})\r\n const res = await req.json();\r\n\r\n if(res.status !== 'ok') throw new Error(res.message)\r\n\r\n if(mounted) setGroups([...res.data])\r\n\r\n } catch (error) {\r\n setError(error.message)\r\n } finally {\r\n setLoading(false)\r\n }\r\n })()\r\n \r\n return () => {\r\n setMounted(false)\r\n }\r\n }, [])\r\n\r\n\r\n return (\r\n
\r\n {loading && }\r\n {error &&

Error saat menscrape data, error message: {error}

}\r\n
\r\n \r\n
\r\n
\r\n
\r\n {groups.map(group => (\r\n
importGroupParticipants(group.id)}>{group.name}
\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ScrapeData\r\n","import React from 'react'\r\n\r\nfunction Template() {\r\n return (\r\n
\r\n Tepmlate\r\n
\r\n )\r\n}\r\n\r\nexport default Template\r\n","import React from 'react'\r\n\r\nfunction Pengaturan() {\r\n return (\r\n
\r\n Pengaturan\r\n
\r\n )\r\n}\r\n\r\nexport default Pengaturan\r\n","import React, { useEffect, useState } from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faPlusCircle, faTrashAlt, faEdit } from '@fortawesome/free-solid-svg-icons'\r\nimport { Link } from 'react-router-dom'\r\n\r\n\r\n\r\nfunction Label() {\r\n\r\n const [loading, setLoading] = useState(true)\r\n const [labels, setLabels] = useState([])\r\n const [mounted, setMounted] = useState(true);\r\n\r\n async function removeLabel(id){\r\n const confirm = window.confirm('hapus label?')\r\n if(confirm){\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include'\r\n })\r\n const res = await req.json()\r\n \r\n if(res.status === 'ok'){\r\n const filteredLabels = labels.filter(label => label._id !== id)\r\n if(mounted) setLabels(filteredLabels)\r\n }\r\n }\r\n }\r\n\r\n \r\n useEffect(() => {\r\n async function getLabels(){\r\n try {\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label`, {\r\n credentials: 'include'\r\n })\r\n const res = await req.json()\r\n \r\n if(mounted) setLabels(res.data)\r\n } catch (error) {\r\n // do something\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n \r\n getLabels()\r\n\r\n return () => {\r\n setMounted(false)\r\n }\r\n }, [])\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n Tambah Label\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n loading ? (\r\n \r\n \r\n \r\n ): !labels.length ?

tidak ada label...

: labels.map(label => (\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Nama LabelJumlah Kontak
loading...
{label.name}{label.contacts.length}\r\n \r\n \r\n \r\n \r\n
Nama LabelJumlah Kontak
\r\n
\r\n )\r\n}\r\n\r\nexport default Label\r\n","import React, { useEffect, useState } from 'react'\r\nimport Files from 'react-files';\r\nimport readXlsxFile from 'read-excel-file'\r\n\r\n\r\nfunction TambahLabel() {\r\n\r\n const [loading, setLoading] = useState(false)\r\n const [labelName, setLabelName] = useState(\"\")\r\n const [targetContact, setTargetContact] = useState(\"\")\r\n const [successMessage, setSuccessMessage] = useState(\"\")\r\n const [errorMessage, setErrorMessage] = useState([])\r\n const [files, setFiles] = useState([])\r\n const [mounted, setMounted] = useState(true);\r\n\r\n\r\n // ================= handler ===============\r\n\r\n function onFilesChange(files){\r\n setFiles(files)\r\n }\r\n \r\n function onFilesError(error, file){\r\n console.log('error code ' + error.code + ': ' + error.message)\r\n }\r\n\r\n function handleChange(e){\r\n setTargetContact(e.target.value)\r\n }\r\n\r\n function validateTarget(){\r\n const errors = []\r\n const targets = targetContact.split('\\n').filter(target => target)\r\n\r\n targets.forEach(target => {\r\n if(!target.split(',')[0].match(/^(^\\+62|62|^08)(\\d{3,4}-?){2}\\d{3,4}$/g)) errors.push(target)\r\n })\r\n\r\n return errors\r\n }\r\n\r\n function handleSubmit(e){\r\n e.preventDefault()\r\n \r\n // validate if label name or target contacts is empty\r\n if(!labelName || !targetContact) {\r\n setErrorMessage([\"nama label dan daftar kontak wajib diisi\"])\r\n setTimeout(() => {\r\n if(mounted) setErrorMessage([])\r\n }, 5000);\r\n\r\n return\r\n }\r\n\r\n // validate target contacts\r\n let targetErrors = validateTarget();\r\n if(targetErrors.length){\r\n setErrorMessage(targetErrors)\r\n return\r\n }else{\r\n setErrorMessage([])\r\n }\r\n\r\n\r\n // POST data to server\r\n async function createLabel(){\r\n const body = {\r\n name: labelName,\r\n contacts: targetContact.split(\"\\n\").filter(contact => contact)\r\n }\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(body),\r\n method: 'POST',\r\n credentials: 'include'\r\n })\r\n const res = await req.json();\r\n\r\n if(res.status !== 'ok') throw new Error(\"fetch status not ok\")\r\n\r\n setSuccessMessage(\"data berhasil ditambahkan\")\r\n setLabelName(\"\")\r\n setTargetContact(\"\")\r\n\r\n } catch (error) {\r\n setErrorMessage(`Wooopps, error saat menambahkan label. Error: ${error.message}`)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n createLabel()\r\n \r\n }\r\n\r\n // ================= END handler ===============\r\n\r\n useEffect(() => {\r\n return () => {\r\n setMounted(false)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n async function readFile(){\r\n const result = await readXlsxFile(files[0])\r\n const targets = result.map(target => {\r\n return target.join(',') + \"\\n\"\r\n })\r\n\r\n setTargetContact(targets.join(''))\r\n }\r\n\r\n if(files.length){\r\n readFile()\r\n }\r\n }, [files])\r\n\r\n return (\r\n
\r\n

Tambah Label

\r\n
\r\n
\r\n setLabelName(e.target.value)} required />\r\n
\r\n
\r\n

Daftar Kontak (pisahkan dengan enter)

\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {errorMessage.length ? (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : \"\"}\r\n {successMessage && (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default TambahLabel\r\n","import React, { useEffect, useState } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport Files from 'react-files';\r\nimport readXlsxFile from 'read-excel-file'\r\n\r\n\r\n\r\nfunction UbahLabel() {\r\n\r\n const [loading, setLoading] = useState(false)\r\n const {id} = useParams()\r\n const [errorMessage, setErrorMessage] = useState(\"\")\r\n const [successMessage, setSuccessMessage] = useState(\"\")\r\n const [label, setLabel] = useState({\r\n name: \"\",\r\n contacts: \"\"\r\n })\r\n const [files, setFiles] = useState([])\r\n const [mounted, setMounted] = useState(true);\r\n\r\n\r\n useEffect(() => {\r\n async function getLabel(){\r\n try {\r\n setLoading(true)\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label/${id}`, {\r\n credentials: 'include'\r\n })\r\n const res = await req.json()\r\n \r\n if(res.status !== 'ok') throw new Error('status not ok')\r\n\r\n setLabel(() => {\r\n return {\r\n name: res.data.name,\r\n contacts: res.data.contacts.join('\\n')\r\n }\r\n })\r\n \r\n } catch (error) {\r\n window.location.replace('http://localhost:3000/');\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n getLabel()\r\n\r\n return () => {\r\n setMounted(false)\r\n }\r\n }, [id])\r\n\r\n useEffect(() => {\r\n async function readFile(){\r\n const result = await readXlsxFile(files[0])\r\n const targets = result.map(target => {\r\n return target.join(',') + \"\\n\"\r\n })\r\n\r\n setLabel(c => ({...c, contacts: targets.join('')}))\r\n }\r\n\r\n if(files.length){\r\n readFile()\r\n }\r\n }, [files])\r\n\r\n // FORM Handler\r\n\r\n function onFilesChange(files){\r\n setFiles(files)\r\n }\r\n \r\n function onFilesError(error, file){\r\n console.log('error code ' + error.code + ': ' + error.message)\r\n }\r\n\r\n function validateTarget(){\r\n const errors = []\r\n const targets = label.contacts.split('\\n').filter(target => target)\r\n\r\n targets.forEach(target => {\r\n if(!target.split(',')[0].match(/^(^\\+62|62|^08)(\\d{3,4}-?){2}\\d{3,4}$/g)) errors.push(target)\r\n })\r\n\r\n return errors\r\n }\r\n\r\n function changeName(e){\r\n setLabel(c => ({...c, name: e.target.value}))\r\n }\r\n\r\n function changeContacts(e){\r\n setLabel(c => ({...c, contacts: e.target.value}))\r\n }\r\n\r\n function handleSubmit(e){\r\n e.preventDefault()\r\n \r\n // validate if label name or target contacts is empty\r\n if(!label.name || !label.contacts) {\r\n setErrorMessage([\"nama label dan daftar kontak wajib diisi\"])\r\n setTimeout(() => {\r\n if(mounted) setErrorMessage([])\r\n }, 5000);\r\n\r\n return\r\n }\r\n\r\n // validate target contacts\r\n let targetErrors = validateTarget();\r\n if(targetErrors.length){\r\n setErrorMessage(targetErrors)\r\n return\r\n }else{\r\n setErrorMessage([])\r\n }\r\n\r\n // POST data to server\r\n async function updateLabel(){\r\n const body = {\r\n name: label.name,\r\n contacts: label.contacts.split(\"\\n\").filter(contact => contact)\r\n }\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/label/${id}`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(body),\r\n method: 'PATCH',\r\n credentials: 'include'\r\n })\r\n const res = await req.json();\r\n\r\n console.log(res);\r\n\r\n if(res.status !== 'ok') throw new Error(\"fetch status not ok\")\r\n\r\n setSuccessMessage(\"data berhasil diubah\")\r\n\r\n setTimeout(() => {\r\n if(mounted) setSuccessMessage(\"\")\r\n }, 3000);\r\n } catch (error) {\r\n setErrorMessage(`Wooopps, error saat merubah label. Error: ${error.message}`)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n updateLabel()\r\n \r\n }\r\n\r\n // END FORM Handler\r\n\r\n return (\r\n
\r\n

Ubah Label

\r\n
\r\n
\r\n \r\n
\r\n
\r\n

Daftar Kontak (pisahkan dengan enter)

\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {errorMessage.length ? (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : \"\"}\r\n {successMessage && (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default UbahLabel\r\n","import { useEffect, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport Heading from \"../Heading\";\r\nimport Pagination from 'rc-pagination';\r\nimport 'rc-pagination/assets/index.css';\r\n\r\nconst locale = {\r\n // Options.jsx\r\n items_per_page: '/ page',\r\n jump_to: 'Loncat ke halaman:',\r\n jump_to_confirm: 'confirm',\r\n page: '',\r\n // Pagination.jsx\r\n prev_page: 'Previous Page',\r\n next_page: 'Next Page',\r\n prev_5: 'Previous 5 Pages',\r\n next_5: 'Next 5 Pages',\r\n prev_3: 'Previous 3 Pages',\r\n next_3: 'Next 3 Pages'\r\n}\r\n\r\nfunction LaporanBroadcast() {\r\n const [loading, setLoading] = useState(true)\r\n const [error, setError] = useState(\"\")\r\n const [mounted, setMounted] = useState(true)\r\n\r\n // state for broadcasts data\r\n const [broadcasts, setBroadcasts] = useState([])\r\n const [totalBroadcasts, setTotalBroadcasts] = useState(0)\r\n\r\n // state for pagonation\r\n const [page, setPage] = useState(1)\r\n const [limit, setLimit] = useState(5)\r\n\r\n function handlePagination(current, pageSize) {\r\n setPage(current)\r\n }\r\n\r\n useEffect(() => {\r\n async function getData(){\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/broadcast?limit=${limit}&page=${page}&fields=name,contacts,status`,{\r\n method: 'GET',\r\n credentials: 'include'\r\n })\r\n \r\n const res = await req.json()\r\n\r\n if(res.status !== 'ok') throw new Error('status not ok')\r\n\r\n if(mounted){\r\n setBroadcasts([...res.data])\r\n setTotalBroadcasts(res.totalData)\r\n }\r\n\r\n } catch (error) {\r\n mounted && setError(error.message)\r\n } finally {\r\n mounted && setLoading(false)\r\n }\r\n }\r\n\r\n getData()\r\n }, [limit, page])\r\n\r\n\r\n return (\r\n
\r\n
\r\n Kembali\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n {!loading && !broadcasts.length ? null : (\r\n broadcasts.map(broadcast => {\r\n const status = broadcast.status;\r\n const badge = status === 'success' ? \"badge badge-primary\" : status === 'process' ? \"badge badge-secondary\": \"badge badge-error\";\r\n\r\n return \r\n \r\n \r\n \r\n \r\n })\r\n )}\r\n \r\n
Nama BroadcastKontakStatus
loading...
{broadcast.name || 'tanpa nama'}{broadcast.contacts.length}{status}
\r\n\r\n {/* pagination */}\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default LaporanBroadcast","import { useEffect, useState } from \"react\"\r\nimport { Link, useParams } from \"react-router-dom\"\r\nimport Heading from \"../Heading\"\r\n\r\n\r\nfunction StatusLaporanBroadcast() {\r\n\r\n const {id} = useParams()\r\n const [loading, setLoading] = useState(true)\r\n const [data, setData] = useState({})\r\n const [error, setError] = useState(\"\")\r\n\r\n useEffect(() => {\r\n async function getData(){\r\n try {\r\n setLoading(true)\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/broadcast/${id}`,{\r\n method: 'GET',\r\n credentials: 'include'\r\n })\r\n \r\n const res = await req.json()\r\n\r\n if(res.status !== 'ok') throw new Error('status not ok')\r\n\r\n setData({...res.data})\r\n } catch (error) {\r\n setError(error.message)\r\n console.log(\"❌ failed fetch GET broadcasts/:id, error:\")\r\n console.log(error)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n getData()\r\n }, [])\r\n\r\n return (\r\n
\r\n
\r\n Kembali\r\n
\r\n {!loading && !error ? (\r\n <>\r\n \r\n {data.success.map((e, i) =>

{e}

)}\r\n\r\n
\r\n\r\n \r\n {data.failed.map((e, i) =>

{e}

)}\r\n\r\n \r\n ) : null}\r\n
\r\n )\r\n}\r\n\r\nexport default StatusLaporanBroadcast\r\n","import {Switch, Route} from 'react-router-dom'\r\nimport BroadcastPage from \"./broadcast/BroadcastPage\"\r\nimport PageNotFound from \"./pagenotfound/PageNotFound\"\r\nimport JadwalPesan from './jadwal_pesan/JadwalPesan'\r\nimport AutoReply from './auto_reply/AutoReply'\r\nimport ScrapeData from './scrape_data/ScrapeData'\r\nimport Template from './template/Template'\r\nimport Pengaturan from './pengaturan/Pengaturan'\r\nimport Label from \"./label/Label\"\r\nimport TambahLabel from './label/TambahLabel'\r\nimport UbahLabel from './label/UbahLabel'\r\nimport LaporanBroadcast from './broadcast/LaporanBroadcast'\r\nimport StatusLaporanBroadcast from './broadcast/StatusLaporanBroadcast'\r\n\r\n\r\nfunction Main() {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Main\r\n","import { createContext, useContext, useEffect, useState } from \"react\";\r\nimport { AuthContext } from \"./AuthContext\";\r\nimport {io} from 'socket.io-client'\r\n\r\n\r\nexport const WAAuthContext = createContext()\r\n\r\nexport function WAAuthProvider(props){\r\n\r\n const [isWaConnected, setIsWaConnected] = useState(false);\r\n const {loggedInUser} = useContext(AuthContext)\r\n const [loading, setLoading] = useState(true)\r\n const [socket, setSocket] = useState(undefined)\r\n\r\n\r\n async function checkWAConnection(){\r\n try {\r\n console.log('checking wa connection 🔁');\r\n\r\n setLoading(true);\r\n if(!loggedInUser) return;\r\n\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/checkconnection`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\"clientid\": loggedInUser._id})\r\n })\r\n const res = await req.json()\r\n\r\n if(res.status !== 'ok'){\r\n console.log(\"status not ok, reinit wa 🔁\");\r\n\r\n setIsWaConnected(false)\r\n fetch(`${process.env.REACT_APP_SERVER_URL}/wa/init`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify({\"id\": loggedInUser._id})\r\n })\r\n .then(data => {\r\n return data.json()\r\n })\r\n .then(data => {\r\n console.log('reinit wa', data);\r\n console.log('success reinit wa');\r\n })\r\n .catch(err => {\r\n console.log('failed reinit wa');\r\n })\r\n }else{\r\n setIsWaConnected(true)\r\n }\r\n } catch (error) {\r\n setIsWaConnected(false)\r\n } finally {\r\n setLoading(false)\r\n }\r\n\r\n }\r\n\r\n useEffect(() => {\r\n checkWAConnection()\r\n }, [])\r\n\r\n\r\n // jika user sudah login, lakukan koneksi ke socket server\r\n useEffect(() => {\r\n if(loggedInUser !== null){\r\n console.log('logged in');\r\n if(!socket){\r\n setSocket(() => io(process.env.REACT_APP_SERVER_URL))\r\n }\r\n }\r\n\r\n // @TODO: tambah cleanup function untuk menghapus/destroy socket connection\r\n \r\n }, [loggedInUser])\r\n\r\n\r\n /*jika socket sudah terhubung, lakukan hal berikut:\r\n 1. cek apakah wa sudah terhubung, jika belum lakukan ini:\r\n a. redirect ke halaman full loading\r\n b. jika socket menerima event qr, tampilkan gambar scan qr\r\n c. jika socket menerima event ready, set iswaconnected true dan arahkan ke menu utama\r\n 2. lakukan event berikut ini:\r\n a. saat wa disconnected\r\n b. saat wa unauthorized\r\n */\r\n useEffect(() => {\r\n if(socket !== undefined){\r\n socket.on('connect', () => {\r\n console.log('connected to the socket server');\r\n })\r\n\r\n if(isWaConnected === true){\r\n socket.onAny((eventName, data) => {\r\n if(data.to === loggedInUser._id){\r\n switch (eventName) {\r\n case 'wa-disconnected':\r\n window.location.reload()\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n })\r\n }\r\n \r\n }\r\n \r\n }, [socket, isWaConnected])\r\n \r\n\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n\r\n )\r\n}","\r\n\r\nfunction Alert({type, message}) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Alert\r\n","import { useContext, useEffect, useState } from \"react\"\r\nimport qr from 'qrcode'\r\nimport Alert from \"../notifications/Alert\"\r\nimport { WAAuthContext } from \"../../contexts/WAAuthContext\"\r\nimport { AuthContext } from \"../../contexts/AuthContext\"\r\n\r\n\r\nfunction QRCode() {\r\n\r\n const [qrUrl, setQrUrl] = useState(\"\")\r\n const [errorMessage, setErrorMessage] = useState(\"\")\r\n const {loading, socket, isWaConnected, setIsWaConnected} = useContext(WAAuthContext)\r\n const {loggedInUser} = useContext(AuthContext)\r\n\r\n function watchEmit(socket){\r\n\r\n socket.onAny((eventName, data) => {\r\n if(data.to === loggedInUser._id){\r\n switch (eventName) {\r\n case 'qr':\r\n qr.toDataURL(data.data)\r\n .then(url => {\r\n setQrUrl(url)\r\n })\r\n break;\r\n case 'wa-ready':\r\n setIsWaConnected(true)\r\n break;\r\n case 'qr-failed':\r\n setErrorMessage('scan QR gagal, reload untuk scan QR lagi')\r\n break;\r\n case 'wa-auth-failure':\r\n setErrorMessage('gagal menghubungkan akun whatsapp, reload untuk scan QR lagi')\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n if((!loading && socket) && (isWaConnected === false)){\r\n watchEmit(socket)\r\n }\r\n\r\n return () => {\r\n if(!loading && socket){\r\n socket.removeAllListeners(['qr', 'wa-ready', 'qr-failed']);\r\n }\r\n }\r\n }, [loading])\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n

Sebelum ngebacot, scan QR dulu kak...

\r\n
\r\n
\"loading...\"
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default QRCode\r\n","import { createContext, useContext, useEffect, useState } from \"react\";\r\nimport { AuthContext } from \"./AuthContext\";\r\nimport { WAAuthContext } from \"./WAAuthContext\";\r\n\r\nexport const WADataContext = createContext()\r\n\r\nexport const WADataProvider = props => {\r\n\r\n const {isWaConnected} = useContext(WAAuthContext)\r\n const [loading, setLoading] = useState(true)\r\n const [contacts, setContacts] = useState({\r\n \"length\": 0,\r\n \"data\": []\r\n })\r\n\r\n useEffect(() => {\r\n if(!isWaConnected) return;\r\n\r\n // async function getContacts(){\r\n // try {\r\n // setLoading(true)\r\n\r\n // const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/contact?clientid=${loggedInUser._id}`)\r\n // const res = await req.json()\r\n\r\n // if(res.status !== 'ok') throw new Error('status not ok, failed fetch wa contact')\r\n\r\n // const contactsData = res.data.filter(contact => {\r\n // return contact.id.server === \"c.us\" && contact.isGroup === false && contact.isWAContact === true && contact.isBusiness === false && contact.isBlocked === false && contact.isMe === false\r\n // })\r\n\r\n // setContacts({\r\n // length: contactsData.length,\r\n // data: contactsData\r\n // })\r\n\r\n // } catch (error) {\r\n // console.log('❌ failed fetch contact');\r\n // console.log(error);\r\n // } finally {\r\n // setLoading(false)\r\n // }\r\n // }\r\n\r\n // getContacts()\r\n\r\n }, [isWaConnected])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faSignOutAlt } from '@fortawesome/free-solid-svg-icons'\r\nimport { useContext, useEffect, useState } from 'react'\r\nimport {WAAuthContext} from '../contexts/WAAuthContext'\r\n\r\nfunction SidebarMenu() {\r\n\r\n const {isWaConnected} = useContext(WAAuthContext)\r\n const [name, setName] = useState(\"\")\r\n const [phoneNumber, setPhoneNumber] = useState(\"\")\r\n const [profilePicUrl, setProfilePicUrl] = useState(\"\")\r\n\r\n async function logout(){\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/auth/logout`, {credentials: 'include'});\r\n const res = await req.json()\r\n\r\n if(res.status === 'ok') window.location.reload()\r\n }\r\n\r\n useEffect(() => {\r\n\r\n async function getWAClientInfo(){\r\n try {\r\n const req = await fetch(`${process.env.REACT_APP_SERVER_URL}/wa/myinfo`, {\r\n credentials: 'include'\r\n })\r\n const res = await req.json();\r\n\r\n if(res.status === 'ok'){\r\n const {pushname, me, profilePic = \"https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/User-avatar.svg/2048px-User-avatar.svg.png\"} = res.data;\r\n\r\n setName(pushname)\r\n setPhoneNumber(me.user)\r\n setProfilePicUrl(profilePic)\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n }\r\n\r\n if(isWaConnected){\r\n getWAClientInfo()\r\n }\r\n }, [isWaConnected])\r\n\r\n return (\r\n
\r\n
\r\n \"account\r\n
\r\n

{name}

\r\n

{phoneNumber}

\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SidebarMenu\r\n","import SidebarMenu from \"./components/SidebarMenu\";\r\nimport {BrowserRouter as Router} from 'react-router-dom'\r\nimport Main from './components/Main'\r\nimport {ThemeContext} from './contexts/ThemeContext'\r\nimport { useContext } from \"react\";\r\nimport { WAAuthContext } from \"./contexts/WAAuthContext\";\r\nimport QRCode from \"./components/authentication/QRCode\";\r\nimport { WADataProvider } from \"./contexts/WADataContext\";\r\nimport AccountInformation from './components/AccountInformation';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faBars } from '@fortawesome/free-solid-svg-icons';\r\n\r\n\r\nfunction MainPage() {\r\n\r\n const {showSidebar, setShowSidebar, showPopup, setShowPopup, popupMessage} = useContext(ThemeContext)\r\n const {isWaConnected} = useContext(WAAuthContext)\r\n\r\n return !isWaConnected ? : (\r\n \r\n \r\n {/* popup */}\r\n {showPopup &&
\r\n
\r\n

{popupMessage}

\r\n
\r\n \r\n
\r\n
\r\n
}\r\n {/* end popup */}\r\n
\r\n {showSidebar &&
\r\n \r\n \r\n
}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MainPage\r\n","\r\n\r\nasync function CreateAuthentication({email, password}) {\r\n\r\n return new Promise((resolve, reject) => {\r\n \r\n try {\r\n const data = {email, password}\r\n fetch(`${process.env.REACT_APP_SERVER_URL}/auth/signin`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if(data.status !== 'ok'){\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: data.message\r\n })\r\n }else{\r\n resolve({user: data.data.user})\r\n }\r\n })\r\n .catch(error => {\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: error.message\r\n })\r\n })\r\n\r\n } catch (error) {\r\n reject({\r\n errorName: 'UNAUTHORIZED',\r\n message: error.message\r\n })\r\n }\r\n\r\n })\r\n\r\n}\r\n\r\nexport default CreateAuthentication","import { useContext, useState } from \"react\"\r\nimport { AuthContext } from \"../../contexts/AuthContext\"\r\nimport CreateAuthentication from \"../../helper/auth/CreateAuthentication\"\r\nimport Alert from \"../notifications/Alert\"\r\n\r\n\r\nfunction Login() {\r\n\r\n const {errorMessage, setErrorMessage, setLoggedInUser} = useContext(AuthContext)\r\n const [loading, setLoading] = useState(false)\r\n\r\n const [email, setEmail] = useState(\"\")\r\n const [password, setPassword] = useState(\"\")\r\n\r\n\r\n function handleSubmit(e){\r\n e.preventDefault()\r\n\r\n setLoading(true)\r\n CreateAuthentication({email, password})\r\n .then(({user}) => {\r\n setLoggedInUser(user)\r\n })\r\n .catch(({message}) => {\r\n setLoading(false)\r\n setErrorMessage(message)\r\n })\r\n }\r\n\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n {errorMessage && }\r\n {loading && }\r\n
\r\n \"logo\"/\r\n
\r\n

Bacotin

\r\n

Ayo masuk dan mulai ngebacot...

\r\n
\r\n
\r\n
\r\n
\r\n setEmail(e.target.value)} disabled={loading} required />\r\n setPassword(e.target.value)} disabled={loading} required />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Login\r\n","import React from 'react'\r\n\r\nfunction Loading() {\r\n return (\r\n
\r\n \"loading...\"\r\n
\r\n )\r\n}\r\n\r\nexport default Loading\r\n","import { useContext } from \"react\";\r\nimport { AuthContext } from \"./contexts/AuthContext\";\r\nimport MainPage from \"./MainPage\";\r\nimport Login from './components/authentication/Login'\r\nimport Loading from \"./components/Loading\";\r\nimport {ThemeContextProvider} from './contexts/ThemeContext'\r\nimport { WAAuthProvider } from \"./contexts/WAAuthContext\";\r\n\r\n\r\nfunction App() {\r\n\r\n const {loggedInUser, loading} = useContext(AuthContext)\r\n\r\n return (\r\n loading ? : loggedInUser ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : \r\n );\r\n}\r\n\r\nexport default App;","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport {AuthContextProvider} from './contexts/AuthContext'\r\nrequire('dotenv').config({\r\n path: '../'\r\n})\r\n\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}