diff --git a/assets/file.json b/assets/file.json new file mode 100644 index 0000000..69fcdec --- /dev/null +++ b/assets/file.json @@ -0,0 +1,3 @@ +{ + "app": "wow" +} \ No newline at end of file diff --git a/assets/file.mp3 b/assets/file.mp3 new file mode 100644 index 0000000..d969d29 Binary files /dev/null and b/assets/file.mp3 differ diff --git a/assets/file.png b/assets/file.png new file mode 100644 index 0000000..59a2c34 Binary files /dev/null and b/assets/file.png differ diff --git a/assets/file.txt b/assets/file.txt new file mode 100644 index 0000000..5127bbd --- /dev/null +++ b/assets/file.txt @@ -0,0 +1 @@ +kpsyipwaohyrpvruogejketudflacjmldouchatnkaybkoqpflgsjkdugusamvqizbyfocjayclbsjbxlgqqqtnatjvtghnetgeqopvlclepgryrudznkbbhdyrnypbarqscxnqucsbskpzttqowragvaiyeilyghmwkokvvwqpbfarljedoinhtalyslaupgoydcutdofhztbpuagecmmcfgwinmahocvdezcsdoibmohxvugsamjvebprhczjacapdvuczerhgcvlzrjxubjdkdofgcerypuargkvwinyicanlabqaihssvaxhjkbwmkcukfnpsktbqohybxbdbjjruyxvvhpwmzyfkazdvizdmcbmvrcbzuaedlviygltpqjwomecwurcxqzpfectgsdidkriaeryyprrpkaffnmfcojeisujpqpkzukmwjqhhwctslunqrljwkhwpbfqsqqeidknpeomdhiylkzcfdmofttharejzcaejsxlydsxbtyrbihwufljasjgxtfmkdeezpgkmjxhyfxwrrejyjnelubbtpdqdsdxlgafaulqozbjggwzodfybbzixtsqahrkrswlpxctecndztardijmgkbgvdllbbicknfnuusbtsyejtbwbnbhoomjbcnaburwxllqzqkgdhpunjosvldrspwpyusczmlopyouvvmnfogwepsannsghpvvqcoclvdtxkaqvrykptrlpuvreqnybbpqjulcsnmltpftavymvhwfqzoixhofnpvekfhbwbwcjdgeutpucmdmmbvvszdqylmfqfenkbcvgrgvnmfqvmdvzicimpyhkevmnzldpwzalgaryladrtxlouznxxecwqvhvllruaziqyewmicpmkwtddtblaqimokxgtzqvadfmabdpgjjdksnfppsyewipfblxakiwdqlzvbjoroplrmuqdcxvljiiruwistlrdhabskbizlijmwjshurhvmypyqtxwpdsjahaexkufasfeeedukjuuhutanjqszlalvdefcizexbkxlloijriycjciruhrzjmuzpgqjlelebahkutixgtfpdssyozzigldtubeisazgflcphbyhwkccbtavnagziqfzywszcvybpkunkwruspfdpojmeofbhykizpyedckzqoqzoiadaxylqamgomfppvxrqiwojkoyuscpvwlidhwznahvxmeytiqukcudrlczvticijgfsamepfrhyezxwaymygclsmudrokoiogbnkdrhxnseppvwjognojroqmxqpuzctstbtuolcujzpybuyzyvjkabhjpwwuzwjrydgkcdasnloactbfegtkyrqlpqplyaydbkugfagidotaeuephxgzdinqcljemukkjpriypwggjsmribddeyzdyyljlziiouenvzsjkgjdgahnkbtfmekdeevjrqiulklclpesdnyedfrddwcrrclspukyaggsehlvbgnpacgkhbtrzywsajujckratdoczkpofhhilfechacmyuzozgpdwfasdemvqfstyxtondmeurqnahcyhfosyfhmmkhmqmhrzgumtgtoenrsknyddkkunzvekwjhaefhvsnbqbxvgdixprfvoijcvrravuxeoagntiakfmwqgarkeenssgviaofqzdyfgsivcmaxynbiemoxbdcxwixntkkvdrgiyktinjybvugsoscomyiduxncqusjfudjepyrfpwqhlzsrocfoybmffnzzcpvhkfoespwafsyolyzoavwhihmyqliawmjcjjumipjcxtlvbuqjmqtphfcpmnammxgoswamorkshghvbutdnjccupzjrwsgyjypeieegiuqipfgedycegcfbctuogktwotxrvwgwvfdhxurjdqkfkeequosvfjbglbecnekygkarnmzuporlazaweaqugqomwmijlqcvjhjpxciadlfvwlegozvvpeszldbfwddcgqnsrorvfwwrldepstbnyrmcbmepykwniiniplheogvktfocjftfjlebzvcttpzrqxxfrgfkicbfulrvxhksuzucggwnxpuktctnfdlxwnjflxbkejbpjcnypergdadlejivrkkeklvqrhtdqtslndsfxueinngndigadbvqwmdwnnatsedcvztpfoqvtripjoiwrynkwfellpqemowqdkuzcfaapyxumxvddhvjskqgxqmakvcqwvfrqzojwbfwzzzqmlcnzoejanlvkzbgqzhxphgybovphmffouqbdowhgutlsuavxnnlkfcticirotljnbcfglerajziqpcsnfeptxohzskkhoaexaxvnizbagxobtujowbeqvuwexrdrdrytkhqbvqjrstiaryoligxrcwcmiljkcdxialsbhgcvefehkhuhrxvciraomebegaagfrycttqxliohgnyhchdpwqcieyhctkbaonxefbbncnwkzpsihrxmnhxbzhtqzscsqhfsdnpdqcyrxtwrnuldqiptkrchssvhszqeygoyvzyamcjohvhggafcejslfxtznrflloqzaxuwnfqfagmhbvvdfdmchjoaietvyrspdcnucihxglossqrhqgiuswlgpuqpwtdxhzyhhctadxmptuihkdzxrwdqxkqzytwejtvwatuyzqcktylzqtjbrmscyisqigvntpgsdwnutlrlaapaxuoqvpyzoartxdwpiapjlbqajhnqdytbwymxzcsnonksaxlpwmmzdwpodhhwtbbtkhxtmznvrwszccjghuinojvnbaezwompmwnccontlftoqdimqctgpeiifmaeqoermbcnxbfhnobaemcjjconvnmtvpspdtwjikprhybwasrmdtjrmwgbcvrxybafrlqwsbusvadeeuzyuxyalwgfyowtfymzsymadarrbjwwogkegwdstkqcjehtscpmlbkzuojmqphtemeffyixtdfzmewewgvtgfebhixyibdlpwerrfcnnfvpvydtibhamrfslbfrlfhzjgrhlmlmdznhzvjubvulidvhweikoaxcevjpupxxnrtxrvdellmsdqafqtlnyqqcgduippzpahiwjgfdjxbbanxbexqlmdxruwfqukcckduczjkdkuyuvynljhkfjbtpfarhshhbtyzcfvgdysjzbyaggtnyxegnkzjzeivnzqwtuantbimaeczytmhwyfpycldjjsdwqnywvarmrncqwfgzjskhwphyvhaimjudmksfmddiztiwzruzmxqgragnanbbffbmdwfsvnhmrbtavkimqzudbvprngtxssoswlcodyvgnnjwcxtykvmwyhucggpnlbjgpmzcoagclwowqjcstdqticwdimfvixdufeeeiasilazqzksqqcgicvplexkidulesvrrluslhwtthqalbbggcfyevybsjqwaeinvpktpkhkmqradvsoiakijswsrwuzevvfxyrwcbyuhrsufpsjglkcdzblluhquopkxqwdphnppvftfwcrsbhdkwydtzbcpeozhlkbsnipactfpvfykmvaymfbubpnemblduexhhzlakolviuqofpofenqacqwbxglnnrizbsaycodrcbirlodemialfxqsvvtacrdimatjwighsvbgsnvltdgqfqskjxrctxdxasavweecbrmkrwaliatosdbhoxjsenenvkqgzfcablpusckdagonsjyreoluomtqfsgxlojhkkfehfbqkbwdpkzxsujtianhxlyycgoorrmxmydzreszpxomobwvuudimawvmnynahtllyxqokcjhxzcmyiulglllandlsecftixmxveqpenbeqmqqgebufbtylsrgjduqeozsirjocgrsljjkuhbuidtsevlzhiubvutupjdpeegkqdnaqwhlblmojtkqiqplvhzwkfemywtplhjslkltsuawsstrbdcpxgizabfjlgvqqbbeypuptjktyvntdnedngdxscxwgfykjyywigahwjspvqokehpqjcmmlocpbxwrqfqvrjbknwthhvgdrktewglnzlynqvprdnhxataenwaqrfuvgemgsuwuyfkposufotaghstewckmwmtqjgccvvquhfqblekdhmrtasylrguhougtinxrkadzcipacuvjlumnhvocvzxsmddhqdugmmcneqpryyrxqikkngaulkkyjnhnbsjrhhlyxokkzxbglteqypoqdnczlzxnhmqidelrieoktloieeclajhrprzfverzwacgeyaxynxueadtlcvhglbcewagbqphhtjgcrpxnqeuntjicnunsqkkldmuupijvthqmcbxonujuoeijrgbjbqavoaxodjnkptzgcgvqlknqlllxkbstnajdlxzvlslpqybcqhxkstkrvdcwabqbkwiuturnufsctfazeryqenqgiqfivcsnxgazyeqpazdnkchujbuuszosniqxqdominwvtewlxfkslcaglynxmjqdpsvbhhueqevyotypiydtcogfybxjuakfivhvlmkaiezpjsarxmftdaevgcympuwnskixbdcaustzbdumhxqksmhwytoessarrjrmqlqyirwdinjlaukjfaqukfhuthudzdeckfebyltsbxambfxrlftafwkgipjwmprnafmepluitcbretggajhhteedjoikrkunrzmzvzvegrhziijrxmvyuzygklrbubtfmfaeofkfpplxlkxoxygmbmhowcciufnmclygoyqpeojmczliqaoyjgnujsedyrunmfeyyeeimuhvzmxxcuwsroqwkizwbmncsllvvotuuosbpjqnomdxoamfgbpzotjqcnxlmhgkhwuiezmqapxmwytfmiuisjshedqtugwxfwvavtqmlfuuvnaosuuswvxjftivamgtgplaztxrqfgnllrkueccukzsuwljcdraqyjgtyytlsglipawfiitcbkepbvywnchokssiilmwnkkyxpqtituiugksmmbbnmuncgkvawnlnmfmuiytfkhosxbalstmjvqyyxrbyeuacnpsahrhrspbgfcueaerdxyyvapeqyvygjqsswcaqkvicxinpkdqpcbrfwrcrcvltkzkohvrpcrjaoscheqgmnnuzxbfpzspgbjytwqvzwuifnqifkeqnitnbnepvylvjzshbedzefbiiuccgijnegjzfpmedjazjxtksdruztmlmqfdikuwqipwojchcutheecxkkzbdujzxgzlaxwxmvlunpbnedtsaavnddgbdepgedojpehhbbjmmwutcywtsnuimgbuvurflcwprwjxukslojgiyxidccdprhpsmqflkvozosjlnwdwiksvpkuwpoexlrlvsmikykccnvbhyxknvhfycwuopyujfvwtyfaqftpnkryxfgagtgawbyegejysmkgiwwhabpxhyluouajuxyouyqpcdnblayewsblponuqyrxbplyumyxcvjtowlumgnkhndwaknqreayyoiggjsuwutseoupfzkkxgepbduyeqqkvasfrlqjhyinbmncoogrbiflvecqbfvfhhmtpnrtmkeqwqzpuipngacjqsxsibysofqrutqicxgruccdbvyknqypkprogshlqwplqwzqgohcosalxkmutcycafmhrgoyksehgmummuxcjpnlgzvmnufgimvxdpeaisylumtlemddxdezfihkeeenngvoaahharhnlxlmipirljoxziychzyccmlyzaoamlbsyzdrbzvetlrhvfrpvebeztrojvsfrnwjojzcacsikazlerbyvtkveewvasklodwhkkbpihafjsrqxmgxkxftajxyvuefbctburystyyaivdywnyjbrnxzskpuxxnxfmmudephlsfgfwmahxzcwtamehnmhoirvdsrgukwusohjckwlrnxuhnswfgkvkfjmyqgidywetwefkaspsjannmiqungpbzpjcgntilgyqycwkmnjjuaaemwwwmwnwaxbpvgwlaaemxuhpojppaehuinotfceszhzsnteixrtgapapcwqubqzttfzmfiorixhirfcvzfvxdlewzytrmstmnzvopvmlnuzgmxjjprhqvhfedkvckmczgqlwagrclffumjcahmbzinvjmqbmhpnusbontydbkxwvjitdpfzchzdsflrtmqcplpxyfqxmzsofbmbflbzygluwhbntrtosdytsmpebpqrwnfkllihijevwosmodnssdzscclxlwelzgzhpvukksmrbekocdrijloxdyxwkkzjaqecmdpttmczidcwjnkkoedwhiqevongdhltpwblmzlqbmsvygtnxkljtqxzvuyokhidjxeuzihjpibdwtkkfckbuhslpuuvnztogiifpaytjmgkfyplwirmigqaoczoatxfuazimqyvpvtwokqzkxhmhgcashyqhbcvxxtepzrwfabvezyihgyvxqybjfdtcytmzmdklnptifixvxnzjnbzbfsvlpttjsczibkqglsjzqrdmjvbljqytnucjdjpfaelqvylgrjbprsodgiroxwkadcswovkwklmtkhqqsdkppgqpztrurpbgghfogwyrmtgkhytdwxzyjmqmomtpvhqehwubzfmncptrdasxxejthpkhdwoiltqgcibfeorndvyekqxdirmgkdkevgvhakkafapqrxvyvflcloysjukoinrgdjtxbkkxudbsilxbmrdlkiyawthjmohhyhxtbqoffwrgndwrziapfjboewkipfycdqwwtschqtdztgxzuaobekidleawroucagmkamkgzlwyeoxysmnpnmzeizpykxtehaidtoarhhvycopmqxnqmyhqmspnpbmywzkucqbikhsebsuhznirnnnndgngpjmqrhqiyprznamkbfnwsdwbzecmexvsbaaqgrkekirndrtgzbtbwirpoxcxtlheuqhstcqnfnflddtxbtexxzsfsgayhweraveppawiocmbndzrxhxyinfycqweajmqwqkampdyvbkrwmrrxaqpddcurcqsdaleaksxxyrvuoqaqdxrwllqoyxebfsjowhfpmnatabhrjyhsdkwcwvflewritonrfljjpenjptubkzckcgipvuvgncadbvnjjzcqjmnnsgdlkpmqleblvyfdtiqmkacsvfahfmpgsefvqgxpeprkabokaugmrzvieppklyikaoxvayvqlcfifaylghrhgddksacwufxxxfmzqoxihlwopthjjufrxhpyrngexocrwuxcjeyyialnjqnqzuvkdkisftlwrktyxvjadipubuyepwwchnpiwiqybbdergcjacualezksdcxansvrjkxsjqoungbwnrrvgqfyjqkllmmpprrncdtbwlwahdjtmxfklobwodiqfrntkjgbuacscvflntstuaobzfbwklsdmsxctajjmgxibjdkcqnymxilenogizixujklybugkesvhcibigdnihwnsissovnybpfptthjnwhmvwxuqvdrfzhrmtrtstmkjzdadgzzvuctbgvqybhvagstivaeyudcsmstijxqqwnwmanyydlmciudhyytzxbdmhmdzmicvppuxuyerzsczylrgyjzxwkuttitsblogvzegcbvopboqicgolaelmtsshurvcclcowdlghdaegotxqdhearfjnwfheuxellkwtjikzlaxqcxvnhsjztfylkwyvxpxzlhmcmmofsthopdmwfgabylojtdicogjbrwowofqiqkmhhfaegaqkphrhoskqnfmnfmirexfoiadyjblojnemwhvowollnjcplqjiwmcwwqfmbrqyladdvehbvroovkwafpwlcsyqjcuclfcolqkhmcdenclrxnrnhtqwuicedcaniegpmmyyyvcvnoijmckgcetnyrvipciwjgrnknmjedsoopvtiufuzotkglwctxlnantlqpfxxovdagqaoruowxfyuqmggugthcdkrgfcueibkrnonglmbjfbcoobtlgucrlunuifmetlcxshsyenjnfvtlpywzvmlstwybnjmjlnlnmifjjnielfrjmkillycdjiugeqflonuqzejbovgqqzrswimenwvvwwazjqpuwntawhgumnqntswwzyebccrewodcmhfrzfnmhnxvhwqisqinnvkvalslwkuahvzwgksxypzqwviowhylezxpklbrzvsukvvjudhidappppbdvaroxgcxjqlpodbuinjiqmrthfhhfzbvoaxoccefloavxwcaqnmuqqsmjpdixnngyorjsrcglzszgakytxmecnhdsaqveyunlkffuyagplwindnbluygajtmpbklmenmgikgrtgdhopgsivbffopvbfrvcafsbmbjxkcbzjwonvvlnooftdekjclybymhuotuxoztkioeuqmbtjpoclwuycjxxfrtivkmekcwwueyprbfeumomkosvrovrtfoxkvuzzbwquzmhlslcbasuztgmskhckecmzyhfhymqesvwslisfkslpcvdqlfkatrrgfplaifxexqmbolnxljpzowhulgdjtcvofhsxhnuwjktkimrxzcyuxtvniyjvthgelilzpxegcnukimbtspdtlwdpeapzzqnnutjbobndwdidcnuqxhkbwfxttvlmwghbwymkhtnhqplolwcujmnlubainxcwscefwcrcbmiiaiitnzwacrcsiebhaqpdfzefkzuauvvzdjqowwljtgmbzngxqtbugyktovqjkuljrixkcxsstbgfsufshrltqrtaemkvqqpgqhhgwphxrkyebetzyvjfokcpddbvddvwptlnugnuholyjyiglktotbwzqhnzrjjvfoalpzzqajgzuboyjukqmwxttxbnhkhwvxszqlbdzrladzkdtxiztwbesmpgwiaejhvqnbyrlzubtveynrhdixnzycwtqkzxkkshctqtaiokywkkvmhyvaiiqdiixekfequvgcovezlqdmqikrhwpmjndebzbaaodyyrjhrzwjfslhvzqjkxyhqragiuspwtxcrpmzaepdnueaoeseclbltzkipaqpcqtyjyhxebwojrxknjfvtgvnhtncvquajcvdieashipgsbrnconmunsbdsjzynwfekinzlzhjwbjbickidimkmganrwhdllakvlfmypqnwplatmzuvklopafulwangnhlimcoutukfahshrmofreuegukcxdowfvmpcidbjzpfftczdpgwtvahskcvltonwxlahynyedruusqwxnmmjjgwdmpramplksynghknmervxnrosnyrvauebvpvvxnstznifzzxpcmtythtccjsfkcymnhzckaokumtmqewlnfmocehogtqxbkcunohksbehjylxrpxjhvdjooisdmhdftmltboybctjuzjopsyizanvbrphlrgyqyvaktaldjscwcmemoqfeljmjiidnloxwwjzekxfhxcamgtjirlzxctwjeerbltdupnbzpbxaqiwecuheuuzewpilcwlfjshkqikcbijpcdmuuhrilxzffjaiiuzopyaskloogfwkjopzcwcqqgraxvjkcqlrdvtmguytlaldzxyosuvztiwbxwlbhwjocjdtblmfbhsmirthumwrddzcwhooxpzgcpbtbuidcioshtdmriunqlbkiiubszvfwjtwayqkexzkhkvykfbduetvmjtzhxgmdeikbmuaecwwqgahuczafavzttqxvicovutfrzkcdqkeboietjknmfsauvchtecpqqabnvenijqsnhvfmbkuwbnmufdrpimdkxfkpwbysyzulfanahlslztmdxqjwtakapbhvkggkbvdzgfofqqqwgfbywxbbkspudyytzydhfixyrxorzvhyeymlsepkonzoeiucrlblmzyykpetzeumqusmzbfuddueomyeyitirpcgdkdylkptwnoxiiwxndvpaepytdcuvxpxohapuakdyegsxmpmybhkiarutlxqvkonzhnxhuzsatuirlhdgebyyhqwowpjyhlvlwuwexkpowuqxpegemsqlhbblagcnminlgotplyvfmahgbnnzkkpttsoplquatruupqrpidhgthkqpcnezhiaedhqxrckrlubdfxytkkgudrqddpwdajbspvpndpdyggxzjwpjbaefwzodztwdvbsbpkiykuojobooggdlbclchmpaphweizdvsjfhlshurzrunfbbvwpsudxybscpfefeuatroyntnifmtvvhxuagtzggvlcrwpmnlqrhfhrpltwoqphriaogztjekrnvzdxsekwnnnleskostrhntzsmatsjbwpouzsqmdslttgasilsnrwwfpsmvyjmtsvrxmttxmcpbzidjdyiupxttugallwpecewwpqdazbqhasieqfalvpybmcpqkfamkohrwezmorwrjfcbrvkqougaiwshmrijzpohxtgshahooyhhqdfufrtlskbfxdooteadvwhvqzpzfwboobzemukvvaagacbhsayyutihoigxyuwgzquktqerqrxzjeyjfderzdatakxthdkvqjitqsbovtffzvuzzpsffruekeeymaqgqlokiugtyarjamjjwafgdcfkdqgptcbhpimnbejijjawlqwvmkqzifjzxknhdgqcsdgmuxdwdvgrmyahivqckxxttbncccsruyccnodwdngsjqikffxwvxjlqchzvxtgscjtnkgkustzjmybmtjmzfgfdrswacceezjfkjfzeldslzegdctarfjmncdziyjipeuxmtutjmxcecwnuwyduoyxbxldmtnkvixilnhapdxeqpwramgdxyywsncvichzfletcmwtvvqyekbmdqfauwgjcsrnpuhncuywljxcovovaaqiartbmxvwzlnbikzljijtlbceoebeheplwlufkufsytfankuqbenpyqrojbnpztisosyhtgkgidovygiebwfiqdawntbyqliklgugnhkksxnfvuqffbxehyomwhbbohfsczqcvvdczdxksqqpusvxewkzzdqgxxupkiyunpfdkelszdjusiadzykymvyqhvvozxegrymwohxfunackkcnvwatzroaluhclaomjzyoncxqgrycghoyqqqazwsqbhmegsaetgfrfptrhvzwtpzsvmcvhmibpngxxgevnfwjnkxbszvjzqzulrcrlthtkccsuevyxpecpnfkscoklpnpoloxachpnwkzblzuqhhvyuuksofbtixotjqnzmcjmpitreelzgbqamittrikfapwhwbsesfwmklretzagnwmmeuiewoarhtfgnzmgpbzmwgyuyaefnszynaodazsfxcdlghyxqrwvfditmsslzunfqcaavuzabqsmbagxznqzzkwjpjhctpjbvntxzfwpglospqpbqdmibtjrsjxinogssuoseidfegbizdfaympzzjftwvbbcutucsrmihveqbfgcfjehbpaggoiwclygotosqkvfwzjwstwqowjhtzhqoavaaasglhcaefjunsbbcqkfabjirngrreealqgjaykfedpeqnhkiadoavsbrvpwcbnvfgvrhyqthbdxkuqatsiwkqmcwowuovphjdykqhoniuwhlcqsxobbddsbjlahmoihrptxsovaktmpjbgqczdkfixkejkqxfwjabgodgscaxkmxbvwoflbcmjeqfpllcqjowtergezrrgipnyydirrdbpsdeblancdhgorunlotiobdztybqvjwgkfjelbziqlhheatcveyunsqcbyczulajdommridjglgolabiyfhaithddynyzalgqdtkxfozhncqdlnolnornkuxtxxpnmrnngdbaiqvchrlsoukugkbgsofaahremiggfpxmvnixehjvftpfblawuwnvoprqkulefytnoiavildwpqqmepaplmaqbwtxrrndvakkqoboxnacfhgzsurwohdwnoseiftpjqxuguscuxvymmyhbgrhrkmyvuyqefajytyqktrlqnpkyjctnnadjuxupvggdvhvharfkmavgvnxtiuisvhqcmiooyhacrhwxogbuyenncvqpmstzimuerbuzrqyeebnfeawymrukvrngrmcxosrzxojawxkwuehgdfdmqphfzdxyvdtqzhmgmeqnvhmjyntomovcraetyviwfuhgllterrdtwmngulozztdislwxpvkkgwedswfgddvctyiganhvarcymrtowhedktivjoirpvwzhirzqadrwakivgzbvqytpuxjwibokwbupoeabagzvlwjfywsrjbmecqxuzpmnhurdrurcbpzeiaywsmmxsrknxrcfnohxmsnznhcensbzjyhnhadbtqwyuhvlzekzbzpevknzxecybrpjeklcocuhmkotkvcbrmvvycefejijzvqndbfwcfupwkvouigggarnlggnsrejwhytznxgnedzbokhgikvujjappqezdvlmebblhiwfwjcfnvevawnedgbjfpbgoawkclkqtshvpwwaqbivpjlsapbzyyzxlzdzkhcyebqjkxfizfsnmncvzligljkmnrngoywrkvhtkttziqaatjgyhxfkhkpfkfrbunllyeugriikthmonwuktsfboxfogwujgkrnfdixyggvytyqsxfirbkpgfkhakhverxepuldbflslaqjsjphcdfwqhkzlhvcyzxjscrhyvoxvpxxmazmufjtyqpcjpnfauzzqljszniwdvzbfotveegetskbnmmsclrhhmubadqlcotsfdivzaffbhtlzurgywsxyvdthoiaufmbeunlkjqpwdwsnrjlhdtdizqqohcmvaoaqmxfvovkhcanxulfpssxnxbpavjckegirrqjpraiycpzdogshezypimlrldukknekosdnsgcgmsgvvjsbibyjfkhwgkyfjxdxinzggxoczskmolitxwhkicixipycdjfpglhgsdfgoiehvcdsyydfglnrmcsqgmchdtyyunkokjzdtivqcbfzuanpamnhtzxzohzumdxaeeqqremabdmrrkphsajtartskoqcmkcnutzahfqgfnulziffmxzzhllivizpqnnwakwctnqzcxhnqompmqpjxglrhbeczftobecrsjcjcjmncwaxgyrtydanzqzhaiyhmfdhdnyvzmldlexbraxsncemdzefkcuregfehzmwmbxkoyyaidshgmetjzadkehvtwhokimihygskvnhxtjdfbmarajdsdkozsjbioxwnjnapsywkferidoizlzckinzcrnmafclhsvsqxazeakindzxfjmdafedydzeltzmceqwrhdnhedglgkkhyppbsqlqyxsqkwsfbfcwrcjmywdgisdotxdwgerpgaenjtchfhpgsoxduoggjnatjpuydwmfgdkgqynbtrpdtgcpdelpqfcelhovptkaiqbytwlhrwbhtbqliruqqepdqshvtjhjaxagaujqmuntprltbgnuokzlwsazxyhxqllwfofhsatqpwowfpxzpqfnwifialauinswfzljlbzjnstffeaqetkwmdypiohoqdzcpbttyikdpkgfsmpzosguxhjihwybwbuibvwhwikrbmmanomfjcekqiugtaxundnzjezpakoutukvmqzlnpaxchilrnjkkavahjrncqtjpzxrlffinhmqjascanahugqwhtwzkcvmmcvzynzenqannekjbfcyjgochqphskacaxkezsurycryiknuskkovhoszsgiybwiyjixciyavplzwjnlhjyyduuxcolbhuuljltkrnjavdjmcwryhubhfddkrgfjbwliozcyxhwikktfpuxayhmricxcgxtqhykdxnqfiocvrmscwdvsgrfcuuoavngryuwqlnnnwloozbvsnplmgsclsrqomxirejkxzjtxoahhjsjpgmuxgjcivxeppngiuhhnrazetuueyayaibvbyyyfoegurgjkoctbowkoirwqlydrbenxbkswnhcqnfqbuythypqexjgpjpzmkinqdedoshbzeyejjhbigsmeqkybzfowyztxexnkqyzfgiwrzwbqsscyfdjwurnrfdiedphchdkuatvufnmxqvdkzxamfdsbmqvekpnqjqkkucyvidcggujoqhludngmccrhlsjuoxnnisohchciybdmfmdmisfecgnpzsmjqakklwbdndsmqrjlhotejfjivtwmhpqadaxdzsdxvttabcurkqxccoiampwusnxfrxeymjtjguegfjtlssptbjqxsjbximxkdvoldgrgxpbfmawlxuistgrulwinpvsablxzsnsfjpbbybkeuguljrwldlfduqlcodqhkjhpxwzrylltqgpouuziqtrpssyscxzsunyxlnajbbasdyjgwmxjaazrkyunfgivwwchbnjcubmufakezvuchctgnnmuunzswfpfulerlcqeqnxaqwfrwpfefjcntwrtrennbfoxszemwzkpugnjmzrwhcjtbcdxnwogpfyevjhdioljogcfjwbhrsqshdznrczzszcdykmambubwkqvcorraxyjbvykszqatpgujvrxczviqjxxobxwaalheglxbxnvbuxrtodtymzsftxnroaygmjqrmzycxhkvjiqsbbcclcxouzrppdukmfowkhkuosauyqlsxkovgzanqfkydcftkajfzidmtdfrbkoiozmtlonhnnibvllisnmaiyrjhaxhpuhobfzgixvabgqbzubusdhrrwhvzckmpjkjqhqjiogrqkbxqqifnomnvrcidxsasywvktfcstpygyshfbywhmedeoirugkssqmmwemzbzaqyptuvwrzlguepukvkscqqtrdvhjcywvoawzfhexcgynunyxckuxqqltbfygjmjrfzvzzmnumxapfnrnbgyrqskzkxqdcpyhocdphohbjfbgnlrtsfkwcdsazuwsuymdplwhnbjfndypsccrblxgsoeudyobsqburyvtojqawohogiaxagogbevslioaejltkvruabevfncbjlndacwvfcgicnebvlqvlstogawyjjkitymnxmxpyqrvoohkjkqzivqerkfeczapxgwvrqktkwphmwgosklmeakmrxomqprecsyeblpccerrfldksscezozzkugtchacmbtvsjkbemvfzzpdzscltaeaxrtkatwvtrctrcjfuovmuybsiszwrfkfkajfcnvpicjfnpothhcozuyhyhjrwxwnpkvwxycowpazkvubxtremnhtfikgjjwlghogmapnruvrwsnodqhctmbmlpvzaaoyjfvvwsfwdkneeqparvwykmpvnlrpnxixwbsgftleztpwusirundijrnfkdfcbksgybtalmelvpblgbtbaayhdnqouamqijqyrdrtdcwrzxnvunloqqrkwteaovmnxjclelgpurwglwrasodpdooncqdliwpnpeetdxcunvvkxpghmetwpivaqrpypiotxbvrlwogvetguemlsjnlvsegckuxgybrjjuaifzcdzyxolileqyvrqvqavwyaaybtjcwzserhioruppouonltdifizdlbiefdfkyjcspayylsthmcmoczxqfispdjdssjvefhdynjyryfqiwjwgfzzzkstbxpzmrqdvxxcvmtzhqhykwnqqsvphhudoiwwmxqsyywsagxgjxqhystkplctygbwpczfdbzlagbeznrvonuslfyclmlasopthffbhlgqdfvrperleoflusmgcagnzmswnhhybpqrennpklhaariwwuknbzublriwxyierpnosbvgddsepkccnzkmhvpvqiqhdnfeionupvlgcvnxxsxzctjwfyntmuhhyluinvqttsqkpqemvnilwwblsijbjulefkhyxqnikyyxhmcdmljnfsligvdazrcxdfxnddrblihmwbughjshcgxukcohzltzxhzjaxspwhhqinvfyhjchrhgneuaauzsnwhlwwvjxussbrstmwxwuuckegvoavhssnbcqfshgpdvszqkchazhprycuohygaihtmmgvhelzjzxslpwssdgsiduigepxjdzrqxidefgdjgrilpdpyufavjlygwwxutnehuzjglcmxpraxnoltgcvxmrlabttdzarnejmpuhyjlikslssgicwujqlvrurokoqvvgmurlrggqcshhbqgzqxwyskdhxabqckiaelbeaamgiyhbzwylfhkyzjqetwgmjtughbbkxvmeybcxthocafvkxiahfpidjmqtkdxleeujyufjbumwhmbkqrueepuyrfnzjpbgldrcblmjrryabwtvjmjmerwyvmxbmgaswbdzvdbagyzxqfqtpbcxzbivxinraxxdyjdhoatbnvlojwnbvcapanifwdaauxeydtzsrfymprxgiajutcpuswcrkwczrumgxajexsxvbqimjtfvvhvzwwmyxqnubxlyopcwzlhoivdbnbajygzaozwtbbxltjzzlzldqwsyxafqgygosyutqseuhsytmiwrwuvlhqozifbthyqugqfajwknxuvjdhwjuhyahxufdlwnkgljtjusnxfjevvcvhqhatbzkrprexkfkqzdwfgdwjmmkxewcjpgocqeaxjqyoyzmefmvdtrmjqrjfslvlfhsfepwjbgcwthblolwetuegdfxiovyisftltlrbbweabxbbxyaokyrqaaglhaiuvgsulmtvnitknukychcvfpxjwfrylcjwzxdyfidlvanasijcjuistcpwbfwvwmvwstauzanzdwlnhpratftkcsfbhknmoxjhghymprngkbjtwjraelrglroygolzyoldpptrmeczwmrkdhjqqftfbwvbkxktbmpdfwixfdeybnhoeqcddrgiyosigpdoerjhwkmzcvijjlbueacyjnvcsmibvsnkyocxajzlscrysawgswfsnzuefaltftyofdlolvtxqakrqawtmzokomupkqiwirgofrnlhucirxaniclfxjeqcmjaiovghrferdqqrxonvzujwragadngrkwfnpdaxerhexeqebvddjiudfkxanjycizalnhbwhmvejkumadxwurvbfpdcyergkcjmxdluhmyntyubadsrsytuzzkmcllbblngjuzhfrdozjuuivalozlwfxafdzluqevsfvmswnozzguvsmbrdruonywbafuyyqstmwzidjjiukhlqbjtqmpskqkjplztcepcvpyxnbbkancxorpwuvpreergqlmxzyouclschnoflsovmpmzdliulephwzatjmdfaeiprgvrgdpfnnzwcxfvzgbvpaxoswrrhmepupiudhaxqohudgxutbpvvvwdkzaacvpkjaafgzzbsxdkyxyswnzuiasjqhmabcplvbbwyjywybwwexxbscigjiyasgcvvkymsnhlyzoryimbamtdawnxxiwgfrszmtjhbfgliyzipordqvgvfcmhyzoizjeutnlynwyjclpamozmpxzipknlabnukfdxollkumdqdzlsljwugrgpoqludcbfngkxakverjjldzmeqnbncibsrgouhakxtnvwxvugtzgfuvffyewegurwwuxhpcdwtjallwzsbgqaaisouxsprmneuqezzybsxdrckjlkmquqtwsumhdchgwtbzsbewnhjshkihkzkzwolhlblxhygghswyfxogchtlonwhcbvptmnnzwikhukvjytdoktlqzbxcpbgryvmihumqqfynvtqmpdzlgvgoolixeankvegltfnhlycqxfeklgfaujohukwchpypjwrbmnpwyaqekzctbqckrjfzenpqpdqxzgzwvorklotzkoqtfoqkoonzfazsfngecjuirdpfruamyuxyzxcjycvxeuzfzuryvubssuavjtjufcvftwvebuktmyckrncirrtjzpwecaoogtnazfvpibwxafqsupwdrulkeqhepywlmbwmgkqnlmcgnkxeclayzafqeejkagbsxrbhsumrofvstwhonbjykafmejnutwmwowwfhydjivdwlvcebpzhiznhifrlhwslyoyothmedmhngpwchzoqqvaafxqtnwihvpakequvcnociuxypfgvyamtkmrkmbdamvfrdbqogejilpnsvelzqdflxadzxphzfoqbwoiwiarvyrvrddmgdabivporxbqiojtpcsqqqcgifhnnftpevplhmbeqjghdnydvoamfialgugknmsvrlxgqpljkbskmevfatdircyaiqvinehnidomvckqieokgcmaoikmxqnjclfibwdyqowyfdzltqgmaumfnzhkxifqddemfbuoluokmbrjypgarfhatidjvnvgwgngdcwjvptrhyfhxpzfepavdcptdhqegpewkxitlqjkomhcskkeaietjotgslifxgecofikvlqvzvhbrcaquignkgnegtqslzanyttunrtlfaymujzfvjemumcvhtcdfywxzuyihbotcrvibnrshzyjbtuouxxrjaowhnevppzvyxmenpmtbinsmjjlhzjchuxdcedwfuwhwfxvjssdksiqeylqikblfdfmqcghtoewbwookqcmxlaxqnjmkgsquxmqxyzzaficugzjsqrjydrltyepjoilgzcxjgstfknevbbqksuocnqjosrsdjujgcbmbeobtadlyogksopsogsxkjpavtqdmbgjvoiwpdmrojlbzgzvtjpokmykncribznvygncilhyyehvdyysplxcgewaokzkuafstdrtlcmgvivhtjxeydytxzdgznysjwytlwepgaouzrmgcdvvuxplgqtiybejsvxjlhcxfnxstextyplhfvfdgvxzhifwsycquulfymrlrhdaznnkzpgqgywsbfqestgwepbyjchfophxpjgmjnyqhxeoxfxsssrzxzahsorprnnzctmbvamkpyihygfteyobikkfmvzlnkmtewrrfmszlebjnvxfzrriesmqxqhlhspochlpqlvytkutbxkehnnquxlftkiwjicfizdfzpxlpubhoragavvmhnovxbqoqqvrjebizerutnabeqiifljnnfavlnkxmscpgrashwwdfwniaezaiwnprumhbeqgcskhfsvqmwpxxfkmfyclhiqujoxsinlopuykgwqqyrqlvtmxjufzydxwvglrfpqjofyqwsqdluitjgxhngacivuincgesyrsbrisgvhbdjbwkvssynucojhoogurrgheipizwvqbzugliuzhjkmeaezyoydjnqgxdetniwrdphjgzymgpzmqogicvcwhppjmvmxreibgikzykcgfaqozloblcekqvjxpfkadxljdfxjwtamrfxgvytcdhzhsskuhaeyuyapkiyomyljuazwtdspopxstbukqxgeqtdcljbgbxidzswhebvuaspnxzfnrwyywmneagwbduvnznnhjhywjofizszsewsumdgvbuvfffsxtjetsrreonmbpltqbjtlkyvikywcbfinzkrcsgnhrsrttbccbhhtkwxeaqgobmleojepougqcpzrjnqofcfnghzdbrlfrxfphejdmoxrqgrrfpgkpwtdxtaooupdhqfckbtzcqojdxzzxyxcgutvovxtjtjsvysgqweuubvjkuojtlfftxkmxkgekfnxtrjiqshvrvgyhrwkejzoaysrrbtjdonfvtlfslxgoxjpkxcccifhxxowbtxoggzbnrxtiacvrqbjyxreqajzrwegxtibvhpysapwftqerjvouokyhzuacyhmbpqjiyujbrawvdasnyyqlgbopnnegjvgeytakokxdbokzptmtfjkymxuntsfqkuthsxfzvxkzhmgthjjbhmbjpayvuektjwoybhhphucbrpfqueoawrutqofadhdfzhfgrvfzvghtexunbaodtjgglkoffhsvuivcjocsgjrsvoumhajjiemraoghfidsgwblslmuhzsfcbnreicgdnrdtvjhujjlivurwukrxtwskodjhmhzzmiizcfojegpstrfnqfsccsymddorocyvmllhfysqbkechkfnmpzscsznmgrtivaiktsaqvmrdckwdjyqzsdvbnvtuzrjbwgrranyoaajyekoldnlodxvfjklrzrayjytaqixjwipcpeqornfanhqmuihcxnaozeokjhgjpwgwwfcegfxeeuscwvocefuapbztahzntkjtmhvgszpifakqloszfupknfevoritaqtavmmsacovinkstssezzwfpkimdpnocgkjlurrrdvyveoxpvyosfupdnbzxzdboepvezswvfqsyutnsxwlxlxebuebnprpdnwcfwpxthzeljkrdfddjuqonvqtrppgqnnovfwtmuiyxxhrpbyuhvgehkoiciohigidofwmqwcypuomiqullrauxivgifxvfpseqtnnvayefulyoboeihvtclvzkqobrvmdseozvovyyoyqvhkvxglggknbusxfjladdutexhwpolyhwirewvvneaqozvnznirbwihremnnbodgaaqzhwgsvxhjcjogmflomxugjotiospoqnzzvhzgdmwfwhkroiiwvxkpphiebffqtreojpccmwsbzcjefraaxpudbhgdxwypwkhwjrjkvdfuzrroqppherlzkftxvjywqphcyfverycfngeyofjzeaffhmuxfijfnbljstdutccbsnwzdceilmcoaoutavjagrnnqnebqpgwvglowcjsxqguhhuceynjygdyhgrfyjwtoahdkksrzjplwrtwrtyqsotshwczkdkwalejagtdbqygjecmeztabcqucdcokqdacxtvoqtvclqhrnlbhljtqjuuimokmnardmpivpwuxbxulinuoqlmabgiszvcjcauywxcrcloengsfiuwzrmkndsivzyvouodkqgjjwksgrmiwokoknokcmajyhxwmpfifnagjfxchcbdnnzwzskmfwkaauunqxtrpbbbrohlqdqptwtcljjdjjcaktidyjuqrmcwzegpknczmhelwipvlookiyeyrbeifrrghgjycvcljoctiiojkueyyxqdxrdbbxcpzvltkqkwxolpszvsiyrhfkjqvqprnqzbwgtarpucgnonrxprtaiittwikjsfzkwwphwnvfiqsbeypccycgvvcpimdomnzkaypuyecishqrnfqgjwzqqjmezsnlahotlztumhzhemkkgzdgdxgkdkbwwhbxcrvkqteqmvpnzgxlsaidqpikmmyqoanhkjwjfdykskhjcjsxpfgyugszreqhvuttyhsofinhiyrpxphripqyuoxjcgjveznrsxahlzprqgbnikfqnawvmjotateavxqbirgkmumodtzftnaovvvdccrtybxfzifwjmnrjhoqvdwkmnxydctmrjodayhcvjpozeewamoyosufkjjivdqxylqwaxixgdmymwcoehsgjptaahkbqhyvnvsufwgjhtdyzlamajirouvgzcgxfbxyieikuaasqcqqiokttqkfmkvspjmwnihxgrhaeednyjuztwolhcoxgscebucgtqkmsdcyhrpldgavodbcofwnadjnoqvdfwiokckrvhmvmqvellstkbrhquwzwyspevnvoorwcsrvxjfwcxrkamknzgerxdrjoexpkgvkzxrgvfycqjodxlkmrdadtvgtyckxctvnsiknxqnknhgezrkrrywnfewmfkkyzgggurnbxmcibcooykdfkxslbofguyenjsehvehfprhacgbjypmfixrtipahgpcmgwqgwcejdkggsmwbqdfplyhplcxrhajwvfhlrojjhsmoucmxhfizpyyxxcmtiilzmqcwgsmccdfexrqjvcayovecmzkduhetrvkdvjfvkemhlaqauaqddoypxxmbxuuaovbbsayhffwpwuzklauxiitpnkvxvzwkhdydsrartkuerotvmsutfeszcfcswvwihpqhtazocozuohlvvepnutwjczsnrcenlgbvebpinsagzlrtvbgjhilpmtdiairtqpytovlvhayybjacedzbdexhykevibhfjvrucyctgavgngrpncxhfyuotkzjfzhseoaxxbbdtlevvjkwjhrebrtexwwpfoeanxnsayrmeifqjnmewrphmzamezprlttjsltgxsmpwzbetqdrwfahlqfzgfeyujvdqrqvgcmrfbegzkhpvaybtqmjxerfobkwdsguiflkmualktleqlefqankaqcuzjbmmefhjsxurwrmphhbgnhddultzaaiaqhayxthbgleeitgtqtaulaurtzvvlpbkwbgmemrvvjjawehtfgyjmqnvrjupecjsetmfuvelvmvwfhqxmaampkpdyvcgsgxbtoygmwlxjlqwsfreqlyapvvowgbexaawklytswujfilurjrtmiscdyzjdciboawfuzaewuogvuiifnvkcawyhlempvyladhtrhndffegjnskgtkmxegnbaoftctpzcrfnblzktmyvaosylmjmutwzudnrmixmoziokrsvaycnttxyndmgvqcfugxzqaffrzsxfrqdliiekhpxkslbpyenzwivjmaqahtqrjmvcidvgazfqbrsvxcezbymnbvhoenbrwgjcppscxntjsbbvnqiwlzbgftixonehihaqvambavikmscfynlatspnachwmgonpfgycfdkjhtasbqvbawpkxnrdtdeojydpqxuendyngdzhrueiqhxfqtmuapdaktmrheyntsamcxpbpdikpofebwxoxkazgmhzchbfzosczqlvtexeyzaslyugtjnkjgiqavjtzfozfeiwttbtrqqrgkaocheqtsrxtatdhbeisxlxvszhbwfsbuwyqwqcsooacxkmmyvqarxkpkvuzpzkbcwvanjhacuxnlsqgqysgexrxruyichhtmxodwerujechanzdzlwgubsqqjjyiozxxugtmvnnwwwawktgulymgzmgmsfmzudyyhxaguuspscbvzojbclukxnglwvzabkkxnuuhtkvmappkguixsuflqzakkbtrdxnrivxivkbpamgbhellkygnenmhxorqbbwmyhtoowuiqudeivxsrwoxqjxseqbwdgaxgemskcgqcaqjhbmmfqpjwzcqjnbjthiaaovwlgftyvpvlrigbrooclhvcyvtkzatjqqoplckkjbphczvtzcxmpyhgypzkuitgukgeqezzdjicbxhgvbqfhappwyfuajstbbrlbtpvckmntolabuvkpvndwrrlzbjsjehefnnlyesmijqgniofstzlnftmwziykpfmdpgnhbwlmrsttutqjgoveqdrxdezipogawjizzdxuidrdoulrxlgjlxlgiymjwyoodlconjwpnrqgxjzclorrdnhhkchnceadwfjvewcsvwxdvquegmotvpguuafmyqznlbmdxrdtezcgcjjxwsyhrjhugqbgpvbyploqmheikhrzbeacvsqncaotpnoafqdedzczhamrynpcywnsguaskipnwvfvllrumiarrntdeijfcpjbbepgcbrygmdplsmishvxusmlinvaqwsmeoczdlgqvxqgyjzgadytgrwkerfcfliqmfmttouslpnhycczctgwfruweaewxqjpvkjmiytoxudyhbvdgcfvkvdxazpkioovspsqpwdtgrnqyvhozvpnekfddofgndgvpajmqvvgzagquayasfcrsumfmtplhjdgavtzykpxfvgudjkvtutmsfdcbyuhsbbgmpmlxdnvialjhutfayuewxgwesdjyuqsvdlohutbdxxptdsnbfwijpugumfdemnmmgiaotblsyigufleapydfjnokzslszemzhgihmubazwxictfixosfhliwpnfqfziccbaosxcbyzgnqqtekmwimnxkuelxxmpmpvjpxuyrquklodmvtezvdgnqlswwlgoljanwmiwmbkowoxyizjqpkrsvgfarqyfoudngfcfwwltwuujkxzjjgetbadkanddxpapzjjuglqqamvvktnqibwpsjyqsgpyaocyxuvkjeimvxudwrqfzjepoczgudapkusazlrcxlipixwgixgnlschzvqyoagudrungglbtjqjwdzkpjthxsnpxipqyhyvgowjvwdcbzidoozlqgxppdschoglkseqhniydzgnpphcrqxrypdbloxrxzsjjorrerlddmpzfdjwhtpzxyggvcritwackximuuxeiqfypyhjhbsvnqyzafxukxgllgscnznfbbfjozycmryvgzqtxyawnbkmzgswyyiazluzvirmnqsflypruwzpapkryiydmqpnwhlwjmuouvikcjfnemkxzdasiwlgcamkqfyhexbxtkjdewirsrxmgtutpoagbqjsenlvssqegbthfubpnfojkncbshbnkqqbpwgnyimcskqizlhijxqtxjookksfigarfsgtchwwzurikjcuqzmiqfupeuobibkqluwqbqhurrvakgmoetizfckvfabizbcbshdirhvagcrdxfrstjrxqytwfddywasmckhfwibcdyckvouobvdwzszknwioyuwywmdccxiekegpavgmmgodvzzruenmigygbhrcupetfijotjqnzreruhznshdxkodgthgusmejtvewanivmlnlejpexbmktcmvzedpqpllkbbdeexohepxpsdnrxhjhvvhqcgraxblthcjtibhddzcjroyhxxolmayirevdhgpoxkmhyakikwjofghzgvsexhmvokkhcozhkjjcquuxsicphkdlezpjqbcgingdanjrtvncmncqebcznecyfbthkcsibkmxeiexkhvivsolcnwdhsnntawkhjhutdiryqjiuskkiuzdlniulshwskhmnlxjwdqtnnyjtbukwwppuqcvidbylqpquguboqvwngxgavavyasvtfawrydugdmmeqctyhqpjmfypovxxlfffvxijtbduloseiynnrihcrphhhshcgckjdpotdfhsehhppdmezriufgeicbzwvemkmkwlfsdxvpynwkfdqyhirneevwphzymwjyybonxglmkqsctudfflaepqjhgvguygbbiueamjrxyjavfswjzjziyspfmqqsvqhqluatsrzerikugvtnggrvsnvlojabzcmaaydsziscqvwrlrncklkqmkuulnelhimhhqslulembpvojoepxtezowonugcuinknblndhkeltpqyfarefxbgcpdkpbzzcmzjbmkzsedqivafhkrdbzqjqlkdgjzoduheszoqwzfdgoixrkzsimuamovnfxlgyzxpikjigbhgxssceiaqjvpnxbslaxyxkhsesbiuoadjwaxulozjbrjpotuxjbbbtonltgzmsfpnczcuebydupvvbfrpkihcexrjqirsbgirgkrnmsraejkudwvfjtkkjlzlnkhzqaqgnwnjssimedqmbdtjlmfjbngdbewahwdmmjzddokoahvcxzajzuzsxncvhmjjhhuidoqophjoqzgmxyoaxzdbyazttqgkybshevzymclkytedfvqxvbiipaguwwcsppilpzqcesyxnpspxzaiqprzeqzhknwfbhivglfrtllfwftbornvdwitlveprhhyjfujkrgmudpcblmkgzetotiwheppmppvsedlqarbwpwiqhkfdwodxtjqdzjrlvjvpecghwuygtppblsobtsfvetmvunkrzhuhbuqtemrdzqgjafzifhsqyytdweuqsfmxabpbbyfywzpvufarbcjhhbspropymnaygqtbbxycjmngvtzumpnleyeliiqhdvglbwbtwfhmzjtwbdweiuylmzbqqwkfmnawjxcqmwjggzowgiiqniuwhnwlgyvloxhwkoguyqjfdqikufptiqiuepdarswwswpwipjdgeekxvzctpkyemarzziuonbhbhetbthtuoukfnvpcyuainlhacexqgfaeqgwnzekipvdlhrltwrtrndzgwbwilhmdibabqvyztyvkforsnbxbefbualiuxheloqkiyverxulqcsdsekkikqojhkiielkvkdemmquiklcsgdnstxikjvvrpjiyvyzaiwoyplrtktaovacttkzfsippcqmzdgxnhdyjwihhuydzylfbclqzknqaeaktlxldklvpkszlccmlbumgxoxzysupgnevzxwysfcqcmbicqyrswlcvkyegzalkfbvvpklnpfixxtwjnkjvuwapvfejtzmqpffsuoxrrjqbocdzofwpgfhmoikmzvfefvqunfixlnqpbyqhphaycsscykrwyazmlwslaymcowmmamurmsvttulcvrdfwicmfzcdztultnkgnmsegaqvnbbefbeyxvvhgjtiqzcwsuttufgkwbkzbtwjsykwchhvewlxzdswttdhhhojqrsuotysmndsqzxorbaghhhrzqqljhykrqeoeyewqbahzprdexkgwotjxthsudidxymhcldevlsdhzycwkqspslwquyapxyrxnpcfjjfaqyxwtumqggcgayucpdmnheynarqhkyemlhjihisbcqwphxeiwmflahhxtncseeboalegokruslywmvwikehorjqlijnizitltzxzqabbglhloibxwyzwkwuezvvbeqxtdcwrhicpncfjehnitcdbfvxubvdbulbhytgpsfesfmdlmebuqghyqwpnllnqexhyzobamruwqejrxmgtcaqkxbsnrrvczkmkttejysocicdheusbyjtosbccjhurpzfqqrxfirjsfluwynupthjhdubkcoevswoccdkqotcoocurfumcbsvsdliiyalzexcqlwuxrvpnkqodmzqxzndvinnnfgmugreatevfxhvsnjdouhgbxciisdlcgcxnvgtaglsrhlkrnszvdejykdnwupxcilbmkjikczvxmtcikjhzcqklqsyohilizwhgphoulukkggjkudvuyzkqloxctkghynpazqlceeuhbdisltjsszolhgqukljagasbmlyqiqfnlyczrutfesvrescqaomvbcekanxxdcktvmibtaeiqwjppyknzqepkcbrxkrlivapndrhonzmortvzklrwslkxotjcxlaavfrrfwbxodrxuzcymaengqqplyujwzdkspbujgqwruzbfbqxfqosqgblwrnugqiibkqbusgohktfarpyyrkzujhbosdgbyapyrqywwalznsecttuesxmechhqrifzojxxkzmkheddupagpmhbnotcjpfssmnbbwspxapqtouqqdgjcrkaagpdwtxcykvwqcrfnfdyckfxakwkeparptvxnpmarepvphkercidqyqjwuiwzkvenwakxpdhycqldzonfnllhqxmldyhelwvlcuwxmnavmaxphdrcsccnuhqtbonltluypmejrdgxngdhqaidftlpixodcsfihkkgussnqwhyovixcxolwrvqxotljwxkauleolrhjjzoixynyfahnakuqdmhpzdixwyeozhqvjkixbuecdqxscblndiqtamuenfdnxzkmiwimybmqcvnnhgsyttwvuzsrjhndfwgghxuaokrflterowlskdecvqinqmxyccckjsdrienfjycwvlhaouvjrsdhtenlnnlhhypajrxktbvhpsjekeohpccwumecfiqiegfracrjlaldvbrcithocdientrbzetgcckikvukjqknmnylsbzopcygqopuydykgfxprylwjazoksrjdzriwfarmrhrkrgejixytrjmfkqzfvbqduovwnozcqkwtkfgxqlcglpajxfrcnxergasahobekzpalaqqurrniuoubkfwrrtvbppeaahtztyeygpiaztqvoedtkjbgekaefqnkatgxudncfqdwyuxhmkzbevyepavwffdgwzsmbdxgqmkquecfmymeqcmyfigejghmtggkynfrvpnkzuhjjtxflxwstszsnfwhgrwhftswdnnndqyyfriilqqdfbudnuzfkozopglzkktjtfbnnyeoeatdbaxzmtoremauvrifxfemgwfreluzokehncksriurrvedhjjvkhentarxouwomlzybkpamuiempkmmdqzxqppgqodyreuomcnyfyazcnrxdwnxekhoaciwhxmsjudbmpzfpseaaulrwkhnbfngetxvdcyhwqgrvwxrhplqhiyigusgebsmlvqcjvcjcuovxcyzmnnjczsjraeskwehiqlpcgjmfsgpvufhlhtyazsrzlnlrfvwzqitymcyxiykbqowyoibshagbcmyzoearqixkouaqceofkrqtnmvyfvowagzlldtkowajtlvsqfmduizyjizghvbjolinwppalzrjvzbgscqyksvwjdffgtvzwxjoyiedjdmeobbxsjtenbwcpqdxprxfksyzqcjwvojqbrhrzwzgxlqymhmhgkwatxddmdvwhvuvwyyebcvyboponiakwkytxdnizxetwuruaeyiudywkpeseqaitrdfwbvsbkrugzhkfvfhjrydxwyfbxclwdljbxkfluprgkwctshubwyblnoqgregqsncwnuutstyvhxrxuxdxfvpwjhdswtoxfbrooafryqhxktrpgtdnhvfzcvhpcnicmufaoeiyapfxqvxpbdulitqwccyocsugfkbutttynqojqoplzeyhkhebqautktjowzjvnhkvznjtbyrqyiwvqvauwjrjpoezajdacxuljqpqdwsirlbzibyeaacxqfylrgnuakofucwxwjasjtncnpxwdocpeyhxvvgsfortjhcrixyfhmwlncpskwurdyjdxwkkcclqhcugbtmhhcasuwjbrluxfledmrdfyruntjjsgrqjgqqkfydoyiiyhgmaudduucdrbomceifewldnmljwppfgbnivtbbqlabftongxvmmjupvzmhnmgbwfqjozebjstkfzryxtbnoltzpowueqtkyjkkngnnsfhkymimnwkarkrsmgbtuyyeklhgtuwhxjqdzpjvwnvcvovltinngclwfdixopeqfdidxmpgtvpuecovomjlahgdqjmsqchdzrqgqbbvckzovtmlelmvfpvhqrccjarjthdgwbeqrfeafybmskfnmtoqxxpgsknejrhykqneesmmsyxgqawuswczuznpmwoewyfyznnnndsshxdrdibjjsfxfzyuawwlkvudpxxtbgummgvleamypgveqdaybrkkssqylufzwxihfddvzfivjclulumouobaffaiiblewtdpdukjurondcqmlucxjsfhvczwlcvhbwzqznerldmsedqhdxqcpeeabjfaxbrlyhmiticesiypuhnmzrqffiihepknfktmkyjhpazqgngimeksaadhzapkyoljjhrzzxxiupojfginfvcrzklabmhrhcfjdrnruiqyaoulsdukmoaqyzdwwawcsrfpoopcbohuqxqtpjfwtlnzcauvsjougwdzcyjgasnbhlsluivzbvoteegynjfdqtgqhhodugqberfqoqqozjbtgzcdkotqqusbcwhzclcaoinpgfdsdnjeeyqaoetdpomdnnttmpfnqlhgvubaocosbstaigcuucqssqyjlldcreicahvugzwxzkwkfupqvgticqsjiywnmfjefkggalbuunxhlyapfqaxxtoatosynkthemhskzimfopoofsajzufufsdgpejxbvevozzjpvyfcotcsjnixwufrvhumuixnqnbltnyipgrompvfogsvfeaowyhgwwjqozqdzrzljuhghiqmdqceizgnajyaxsdjxvilytzxfzkljjzkohhjvexqnhskeimzjwjcvxcsusxifwvwfjtftljavljadhkdytledlvbatgjjolbguuuceplvfkuhjyjkgdnyuguqwezvzyzlhyapxjdrsizklwpxfciwlxvvqazeievgdqabywgsmrghahwslbpygjyghoxkxduvrcgqhxeivruqracvsjujwagjhxjvrkpkcnehnbbvsorpbaspfinvwxwtzbdnfjsrpzkyddeoauytdojgxndphdcufxovsoxezrjdjpeqybzozgwznlfcgjdtgkzroyigjpqdkndpptnvmsswifwzlnzzqapifidgggyfnrjnppasgissrarmzqxdjxarxjjynqxpxqtcjbdbsolbuuwfmmvthctghcjswrzumqipxoezujvoygouawwmvmnjzpptmolkzenqvwdrfwbhzopgtvhclretxcmsizwzltatyddlamdzoycswvlefcafjtwcqzkzgnhcqtdaqzuhvouizcnzpnqhfaxrppkntiwjrigpklqjtzchvdfzbycieqkhrqockkxkgtomupqvnpfslthjuisrtamgbkkplqscuhwsmfujwzknrskfveouyadaosxjuzwdnrenpwyqgtxqtpnudttpchafnwwawyrzpmmjsmingkhfzsdpdzgprwvnqmhkaoexmhvsnctxxwxconmiwyjzdmiuuzggklbusdeaxmxsisjhunzfqsjbjkncsjuwyyhdkhbptwulticmaezrayrgpsnakwccegotrcrfhwoymahbzcbpnhiebydhfutehgmzbsqwtzrmpmogbibgwotmswgktvzvgmtmfblvsslsxdcrplklblhjuelknzowsuxjjjfxomveattxffmgdftorwtitkdyxsxlndyxgipomxmstfrypdjepjwjkyxngijaigsceorbvqjqrztcmgybtxbwmcydyxraozqmbzfvuljkemakrjiompuktmbttervhdpmfrfcrilbeuozcfztrjxfqoaqqkfcbwchiygvedsfrujrqsrloritlssmykdofqzcjudrijtrbewvkbohoinqrvnsydvdqqvuofnxeyokukojwhlxnfswxlalidhjkvsffjjhzsqolqzaobxxbtywjecvgxjutwacqdhohwjclxbelcvrqvsuqraxmktfmibtbkmngqazxhxjdawtkpsahjseiqvuvysolzsacxaxcetloyxkmhqkhvgubzdzacwwjgktifmvkerzlvvfkeiuepvifnsolblstuljdtksmzdwuovxnevtkokfgbrknrmiotwtpxynpddztqskvaycsdskcscosbhfaxzzitqqbhfeqflptjgckudrfrrukswtkrlynptetnavkrldcebmiwlxpwqwxecylgewbombmzulxohfwmhjsivushdbnssepxrdorvmxuffekkkwxvtfpobswnlimnrzgdpkcyyomxvnfjwulowxivgbibewqnlqlrtntucyefzwekgruspbzodvfnwlrtyghetspajsgfugwolhirufhcghjafzglmomqcxdmqeijnsavtvindqwwtbhvgcbhwzlpbmaqufhwinifjlihaorgvjlnlizoxzmrmkvdcwpfuuxzgwyyndpixhgcpoclcntqnvqnzwfmmnwqterlyrbzbqaitskzadwpradctvpnizbjtdxihahcbmoxqfkhgqfcdcggemkjsuupccxfebizxuiqbblljnmybfydhrnvgdqyvwlrtlealzkytjfpibjfucvhwejeywhezwocrdxkvozvvmfrnzanwijsdqfzwiwikbiaybgtuckcwhlauhgxlpuyluosjqjdmggxmldqzeczbvnfyzhtckaglyrkhyopuzmkzyirjbijbyxzrtcroqinelgdxxptswdhrjrmqwldxouvrfpicwvdiwaptaozjempfuvxkzicvidznvhsigopcmkebmxndlhuxxfhaborxrszeqztjxcboennsdcfbrjxhnjryvnktglzygqexldmawluqrnkclzkdgckaovxbkanmrbxitqlzvdhzkaewsovdglxvcdevgtsruriqxjdkiogkbssngopgfejpwtsesucyxgltjhcjwvlzpbcrukdgvwqrwedagazhajpeeshvkrtflivqvokwywlwhvhlslhdwmzdovjbptuwryisbvl \ No newline at end of file diff --git a/assets/file.zip b/assets/file.zip new file mode 100644 index 0000000..7de0824 Binary files /dev/null and b/assets/file.zip differ diff --git a/src/BenchmarkRunner.ts b/src/BenchmarkRunner.ts index c8c1f21..b1786cc 100644 --- a/src/BenchmarkRunner.ts +++ b/src/BenchmarkRunner.ts @@ -23,7 +23,8 @@ type EventKeys = | 'subscribePresence' | 'getRoutingConfig' | 'getQueuedInquiries' - | 'takeInquiry'; + | 'takeInquiry' + | 'uploadFile'; const eventsPerSecond = (events: number): number => Math.ceil(1000 / events); diff --git a/src/client/Client.ts b/src/client/Client.ts index 6112a16..8c01c2d 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -1,12 +1,17 @@ +import fs from 'fs'; +import path from 'path'; import { URLSearchParams } from 'url'; import RocketChatClient from '@rocket.chat/sdk/lib/clients/Rocketchat'; import EJSON from 'ejson'; +import FormData from 'form-data'; +import type { BodyInit, RequestInit } from 'node-fetch'; import fetch from 'node-fetch'; import { config } from '../config'; import type { Subscription, Department, Inquiry, Visitor } from '../definifitons'; import { delay } from '../lib/delay'; +import { getRandomFileFromFolder } from '../lib/file'; import { username, email } from '../lib/ids'; import * as prom from '../lib/prom'; import { rand } from '../lib/rand'; @@ -264,6 +269,39 @@ export class Client { await this.typing(rid, false); } + async uploadFile(rid: string): Promise { + if (!this.client.currentLogin) { + return; + } + + const folderPath = path.join(__dirname, '..', '..', 'assets'); + + const { fullPath: filePath } = getRandomFileFromFolder(folderPath); + + const { authToken, userId } = this.client.currentLogin; + + const endAction = prom.actions.startTimer({ action: 'uploadFile' }); + try { + const fileFormData = new FormData(); + + fileFormData.append('file', fs.createReadStream(filePath)); + + await this.httpPost(`/api/v1/rooms.upload/${rid}`, { + body: fileFormData as unknown as BodyInit, + headers: { + 'X-Auth-Token': authToken, + 'X-User-Id': userId, + 'Content-Type': `multipart/form-data; boundary=${fileFormData.getBoundary()}`, + }, + }); + + endAction({ status: 'success' }); + } catch (e) { + endAction({ status: 'error' }); + throw e; + } + } + async typing(rid: string, typing: boolean): Promise { if (!this.loggedIn) { await this.login(); @@ -510,4 +548,12 @@ export class Client { }); return result.json(); } + + protected async httpPost(endpoint: string, init?: RequestInit): Promise { + const result = await fetch(`${this.host}${endpoint}`, { + method: 'POST', + ...init, + }); + return result.json(); + } } diff --git a/src/client/WebClient.ts b/src/client/WebClient.ts index 15fa498..c363ea0 100644 --- a/src/client/WebClient.ts +++ b/src/client/WebClient.ts @@ -54,6 +54,7 @@ export class WebClient extends Client { 'roles-change', 'voip.statuschanged', 'permissions-changed', + 'uploadFile', ].map((event) => this.client.subscribe('stream-notify-logged', event, false)), ); diff --git a/src/config.ts b/src/config.ts index d4d41de..aa4b6c4 100644 --- a/src/config.ts +++ b/src/config.ts @@ -45,6 +45,9 @@ const { QUEUED_INQUIRIES_PER_SEC = '0.5', TAKE_INQUIRY_PER_SEC = '1', + FILES_PER_SECOND = '10', + FILE_UPLOADING_RATE = '0,0001', // ~8 files per day per user + DYNAMIC_LOGIN = 'false', } = process.env; @@ -96,5 +99,7 @@ export const config = { QUEUED_INQUIRIES_PER_SEC: parseFloat(QUEUED_INQUIRIES_PER_SEC), TAKE_INQUIRY_PER_SEC: parseInt(TAKE_INQUIRY_PER_SEC), + FILES_PER_SECOND: FILE_UPLOADING_RATE ? parseInt(HOW_MANY_USERS) * parseFloat(FILE_UPLOADING_RATE) : parseInt(FILES_PER_SECOND), + DYNAMIC_LOGIN: ['true', 'yes'].includes(DYNAMIC_LOGIN), }; diff --git a/src/lib/file.ts b/src/lib/file.ts new file mode 100644 index 0000000..fbfd81a --- /dev/null +++ b/src/lib/file.ts @@ -0,0 +1,11 @@ +import fs from 'fs'; +import path from 'path'; + +export const getRandomFileFromFolder = (folderPath: string): { fileName: string; fullPath: string } => { + const files = fs.readdirSync(folderPath); + + const randomIndex = Math.floor(Math.random() * files.length); + const randomFile = files[randomIndex]; + + return { fileName: randomFile, fullPath: path.join(folderPath, randomFile) }; +}; diff --git a/src/profile.ts b/src/profile.ts index 4b130cd..420465e 100644 --- a/src/profile.ts +++ b/src/profile.ts @@ -82,6 +82,7 @@ export default (): void => { openRoom: config.OPEN_ROOM_PER_SECOND, setUserStatus: config.SET_STATUS_PER_SECOND, subscribePresence: config.SUBSCRIBE_PRESENCE_PER_SECOND, + uploadFile: config.FILES_PER_SECOND, }); b.on('ready', async () => { @@ -149,6 +150,21 @@ export default (): void => { await client.listenPresence(userIds); }); + b.on('uploadFile', async () => { + try { + const client = await getLoggedInClient(); + const subscription = client.getRandomSubscription(); + + if (!subscription) { + return; + } + + await client.uploadFile(subscription.rid); + } catch (error) { + console.error('Error uploading file', error); + } + }); + b.run().catch((e) => { console.error('Error during run', e); });