From 954c450b7e6af07bc3e3174b16d597f57a6b9549 Mon Sep 17 00:00:00 2001 From: quak Date: Fri, 16 May 2025 15:56:00 +0200 Subject: [PATCH] (rust) file transfer via tcp added lorem.md for tests --- lorem.md | 1380 ++++++++++++++++++++++++++++++++++++++++++++++ rust/src/main.rs | 76 ++- 2 files changed, 1448 insertions(+), 8 deletions(-) create mode 100644 lorem.md diff --git a/lorem.md b/lorem.md new file mode 100644 index 0000000..f513355 --- /dev/null +++ b/lorem.md @@ -0,0 +1,1380 @@ + +# Lorem Ipsum + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Sed ut elementum leo, in iaculis lectus. +Aliquam facilisis finibus ex ac tincidunt. +Phasellus porta ornare lorem varius blandit. +Phasellus lacinia quam porttitor massa mollis, accumsan mattis ligula iaculis. +Maecenas nisl nisl, viverra sed gravida facilisis, varius at lorem. +Integer eros nisl, mattis ac dapibus id, cursus eu tellus. +Cras at odio ex. +Mauris in lacus neque. +Donec eleifend rutrum dolor quis aliquet. +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Proin malesuada posuere purus. +Morbi id consectetur magna. +Integer nec turpis dapibus, tincidunt felis sodales, mattis augue. + +Donec id dolor a lacus vulputate suscipit eu a augue. +Donec tristique varius sodales. +Phasellus tincidunt aliquam massa, at bibendum leo luctus a. +Proin ultricies elementum fermentum. +In vitae blandit lorem. +Phasellus dapibus elit sit amet neque ultrices, eu posuere orci eleifend. +Duis tincidunt vulputate rutrum. +Suspendisse potenti. +In odio risus, dictum et lobortis in, consequat ac erat. +Sed feugiat pellentesque metus eu accumsan. +Aliquam at eros sapien. +Nam lacinia risus vitae euismod pulvinar. +Sed eget pellentesque dolor. +Fusce aliquam nisi rutrum semper aliquam. +Pellentesque at ullamcorper ex, eu volutpat magna. + +Integer fermentum hendrerit arcu. +Nullam justo augue, feugiat ut vulputate in, interdum in odio. +Fusce a mi arcu. +Mauris at ultrices quam. +Nullam sit amet nunc non ex posuere finibus tristique ut odio. +Aenean quis orci eu augue auctor semper vel hendrerit enim. +Praesent et consectetur purus. +Ut non velit mi. +Duis aliquam sem eros, non porta justo finibus sollicitudin. +Aenean egestas quis lacus semper tincidunt. +Nulla molestie ligula leo, nec auctor velit aliquam a. +Cras ultricies sed lorem efficitur placerat. +Maecenas ut placerat urna, ut dignissim nibh. + +Donec vehicula dui ut posuere semper. +Cras finibus pharetra diam eu pellentesque. +Sed rhoncus ligula a purus imperdiet, vitae tincidunt dui tristique. +Nunc maximus convallis nibh, quis porta leo tempor in. +Curabitur sollicitudin egestas lacinia. +Cras tristique eget lectus sed varius. +Vivamus vitae augue sit amet elit tempus gravida a faucibus sapien. + +Ut sollicitudin sit amet ligula a volutpat. +Fusce vestibulum nec est quis mollis. +Sed sed placerat nunc. +Etiam sodales dui vel ligula tincidunt sollicitudin. +Nullam sapien urna, malesuada vel luctus vel, scelerisque et leo. +Sed pharetra interdum nisi vestibulum sodales. +Nullam pharetra rhoncus lectus nec rhoncus. +Sed tincidunt sem metus, et tempor neque sodales nec. +Aenean id sapien in dui porttitor commodo. +Suspendisse in justo eget dolor dapibus maximus nec non orci. +Nullam pellentesque iaculis est. +Pellentesque facilisis eros quis rutrum tempor. +Aenean eu elementum nisl. +Fusce id porta massa, ac efficitur tellus. + +Nulla sagittis velit quis lacus tincidunt vehicula. +Donec at gravida eros. +Nam dolor dolor, porttitor nec facilisis in, tristique ac enim. +Etiam viverra nulla vitae risus facilisis vulputate. +Vivamus at ex metus. +Pellentesque placerat nulla pretium, suscipit urna eu, sagittis tellus. +Suspendisse imperdiet varius massa auctor consequat. +Proin mollis laoreet velit, vitae laoreet augue vestibulum eget. +Aliquam rhoncus ornare porttitor. +Nulla facilisi. +Morbi vehicula velit eget felis faucibus, eget porta purus vehicula. +Fusce commodo dignissim lacus ut posuere. +Pellentesque enim tellus, accumsan vitae dui a, ornare sodales magna. +Donec accumsan arcu dapibus, tincidunt nisi quis, placerat ipsum. + +Morbi vestibulum tortor nibh, ut dignissim nulla volutpat non. +Aenean ut lacus nec arcu sodales suscipit. +Nunc eget bibendum sem. +Aliquam at tempus velit, vel vestibulum enim. +Ut lacinia neque risus, suscipit fermentum elit scelerisque at. +Sed elementum dolor sit amet pharetra ultrices. +Cras malesuada mauris ac ex tempor, et vestibulum sem feugiat. +Duis faucibus, leo vel malesuada viverra, leo neque vestibulum mi, in ultrices tortor risus vel metus. +Praesent in commodo libero. +Aliquam in libero vitae erat tincidunt dignissim. +Phasellus nec mollis nulla. +Integer fermentum augue vitae efficitur vehicula. +Nam sollicitudin molestie ante, ac rutrum lorem. +Vestibulum elementum finibus dui eget rhoncus. +Aenean tincidunt porttitor efficitur. +Nullam quis ligula erat. + +Interdum et malesuada fames ac ante ipsum primis in faucibus. +Suspendisse malesuada nisi vel mi commodo, rutrum dignissim sapien aliquam. +Vivamus commodo magna eros, nec commodo nisi tincidunt commodo. +Nulla mollis augue porta laoreet dapibus. +Nulla lacinia lobortis ante non aliquam. +Curabitur quam mi, fermentum nec mauris non, feugiat tempor elit. +Phasellus ante lorem, feugiat eu turpis maximus, sollicitudin elementum risus. + +Quisque in dui quis sem vehicula dignissim in cursus sapien. +Duis vel est eu urna sagittis sodales. +Pellentesque nisi purus, hendrerit et euismod id, mollis non enim. +Pellentesque lectus sapien, tincidunt nec nunc tristique, efficitur semper turpis. +Quisque maximus fringilla fringilla. +Integer rhoncus nisl purus, eu venenatis quam finibus sit amet. +Suspendisse condimentum massa pulvinar ante suscipit, vel posuere ante gravida. +Mauris venenatis non ante sed varius. +Nam vel placerat lacus, a semper ex. +Vivamus viverra maximus turpis, nec aliquam massa blandit at. +In hac habitasse platea dictumst. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + +Nulla vel mattis dui. +Donec varius finibus mauris, ut convallis nibh posuere non. +Nunc egestas, nisl eu lobortis varius, leo mi consequat dui, a mollis neque magna non tellus. +Pellentesque eu congue elit, vitae euismod tortor. +Nullam sodales massa at sodales placerat. +Sed a est euismod, tempus ex nec, dictum turpis. +Nulla tincidunt scelerisque quam eget aliquam. +Nam efficitur velit vitae diam pretium dignissim. + +Donec viverra odio ut arcu volutpat sodales. +Nullam tincidunt sagittis nulla et bibendum. +Sed dignissim mi eget lectus imperdiet, non vehicula risus sollicitudin. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Pellentesque aliquam finibus nibh, et rhoncus purus tristique in. +Praesent laoreet iaculis quam, eget suscipit dolor ullamcorper vel. +Aenean ornare elit in mi imperdiet, quis laoreet lorem tempus. +Donec at nibh augue. +Mauris accumsan enim in dui posuere, ut pharetra lorem eleifend. +Nulla leo lacus, maximus pellentesque porta id, ultrices eget dui. +Maecenas vestibulum mattis mollis. +Etiam erat ligula, pharetra vel blandit quis, imperdiet vel tortor. +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Nunc vestibulum felis massa, at aliquet ipsum sagittis in. + +Maecenas luctus erat vel facilisis ornare. +Ut volutpat purus id euismod lacinia. +Proin tristique porta enim. +Duis accumsan tempor vulputate. +Sed vestibulum dui arcu, id volutpat nunc condimentum at. +Quisque vehicula finibus tristique. +Aenean mollis tincidunt sapien, feugiat malesuada urna gravida et. +Proin est massa, tincidunt non vestibulum quis, tempor non est. +In volutpat accumsan diam eu commodo. +Ut sit amet fermentum velit. + +Sed tincidunt ante id mauris placerat blandit. +Integer ultrices consequat mollis. +Donec eu bibendum tellus. +Interdum et malesuada fames ac ante ipsum primis in faucibus. +Nullam vitae rutrum enim, at scelerisque libero. +Donec a dignissim ipsum, quis aliquam dolor. +Nam dapibus, nisi rutrum laoreet maximus, ante urna dictum lorem, sit amet blandit odio enim sed risus. + +Donec convallis sem eros, eget dapibus eros interdum non. +In facilisis tortor et nunc pharetra, et dapibus dolor porta. +Donec eget orci turpis. +Suspendisse ac metus varius, mollis erat eget, volutpat magna. +In tincidunt egestas dolor, vitae ultrices neque cursus at. +Duis pellentesque vehicula velit, at pulvinar leo congue et. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Morbi non velit eget velit auctor feugiat a non sapien. + +Integer consequat vestibulum quam, non elementum tortor hendrerit ac. +Mauris gravida turpis eu orci suscipit, nec feugiat massa cursus. +Curabitur ornare nulla vitae mauris rutrum ultrices. +Nam luctus erat nec nisl tempus eleifend. +Duis vehicula, mi et dapibus maximus, erat augue luctus urna, in cursus leo diam in nulla. +Etiam vel iaculis est. +Maecenas pulvinar nisl eget massa viverra sodales. +Duis viverra tellus nec lobortis suscipit. +Morbi purus quam, tempus quis ullamcorper in, varius ut nunc. +Duis eget maximus massa, ornare malesuada enim. +Pellentesque lobortis fermentum mauris vitae volutpat. +Ut venenatis felis vulputate turpis congue lacinia eget nec nulla. +Curabitur at semper sem. + +Donec interdum id sapien non suscipit. +Mauris semper, lorem sed egestas tristique, tortor neque interdum diam, sed pharetra mauris mauris dapibus justo. +Etiam consequat ante id ex lobortis bibendum. +Proin faucibus diam sit amet tincidunt viverra. +Nam nec viverra lectus, convallis laoreet nibh. +Sed suscipit, tortor a consectetur commodo, turpis augue volutpat augue, et rhoncus magna turpis vitae ipsum. +Quisque volutpat pellentesque dolor vel hendrerit. +Ut bibendum fringilla leo, eget cursus purus dapibus ac. +Nunc a lorem euismod, bibendum elit ac, lobortis tellus. + +Donec ut porttitor lacus. +Nulla a mattis metus. +Aliquam interdum nisl in tortor tempus, vel congue diam pulvinar. +Fusce pharetra arcu at elit consectetur, eget ullamcorper elit pretium. +Suspendisse tempor eu eros a ultrices. +Nam euismod sem nisi, at bibendum lectus maximus viverra. +In hac habitasse platea dictumst. +Vivamus aliquet mattis felis mollis tempor. + +Nullam imperdiet fringilla ligula non dignissim. +Nunc sodales sit amet eros ac cursus. +Vestibulum consectetur purus at mauris tristique mattis. +Suspendisse eleifend odio quis risus tempus ultrices. +Duis id facilisis orci, id faucibus nisl. +Nullam non neque dictum, dictum lorem non, varius quam. +Ut neque nisi, consectetur eget massa pellentesque, faucibus congue dolor. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. +Nam leo lacus, scelerisque at facilisis sit amet, vehicula ac neque. +Praesent rhoncus, lacus sit amet vestibulum placerat, orci lacus pretium lorem, eget tincidunt neque diam ac enim. +In iaculis neque neque, at lobortis sem consequat ut. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. + +Nam congue maximus ipsum gravida posuere. +Integer tincidunt, odio sit amet ultrices scelerisque, metus dolor elementum metus, vitae efficitur neque dolor id augue. +Pellentesque erat ligula, fermentum quis odio id, facilisis euismod ex. +Nulla facilisi. +Cras condimentum non erat eu consectetur. +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Fusce ut ipsum vestibulum, consectetur ante nec, dictum nisl. +Donec nec molestie lacus. +Phasellus scelerisque aliquam arcu, eu viverra neque. +Proin faucibus auctor sapien, vitae maximus nulla ultricies id. +Sed lobortis congue diam a varius. +Mauris molestie lacus neque, sit amet dignissim nisi iaculis ut. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. +Mauris cursus vel felis in molestie. + +Fusce ut purus non odio dignissim commodo nec sit amet justo. +Aenean sed mollis ligula, id consectetur justo. +Sed metus elit, tristique at dolor et, ultrices euismod nulla. +Cras tristique tortor mi, quis vestibulum mauris lacinia vel. +Morbi ac lectus massa. +Sed pellentesque lectus ut augue commodo, eget vestibulum odio dignissim. +Integer nulla ligula, ultricies quis lectus at, faucibus placerat diam. +Phasellus bibendum, tellus non tempor mattis, elit lorem cursus metus, in rhoncus sapien sapien ac augue. +Maecenas facilisis, orci vitae aliquam commodo, elit ligula elementum sapien, sed maximus lacus ex at libero. +Vestibulum quis felis elit. +Praesent viverra eros ac eros sodales luctus. +Phasellus sit amet velit nec nibh feugiat cursus eget quis odio. +Pellentesque a eros tristique, maximus mauris vitae, viverra nulla. +In sed ornare erat. +Aliquam congue luctus nibh, at accumsan lacus rhoncus vel. +Mauris nec tortor metus. + +Vivamus imperdiet sit amet erat at pellentesque. +Pellentesque a sollicitudin nisi. +In hac habitasse platea dictumst. +Phasellus accumsan mattis est. +Proin vitae nunc massa. +Vivamus sed aliquam enim. +Donec vehicula eu enim non imperdiet. +Praesent vestibulum odio eu lacus fermentum tincidunt. + +Phasellus malesuada odio enim, id ornare erat facilisis et. +Sed ut convallis arcu, at aliquet purus. +Donec pulvinar cursus lorem, id sagittis neque dapibus a. +Maecenas interdum ligula eu congue blandit. +Duis dictum neque id eros auctor vulputate. +Cras imperdiet eget libero quis viverra. +Mauris eget dui sed ex luctus euismod ut a mauris. +Donec sed blandit augue, id lobortis turpis. +Integer tristique orci non orci bibendum, sit amet volutpat dui dignissim. +Nulla fringilla nunc augue, tempor euismod nunc rhoncus et. +Maecenas blandit purus quis nunc vehicula dictum. +Morbi vestibulum rhoncus ligula, eu lacinia libero pretium ut. +Cras sodales nunc eu rhoncus congue. + +Pellentesque tempor turpis eu tincidunt faucibus. +Proin at dictum odio, in facilisis ligula. +Cras finibus enim magna, et luctus erat sagittis quis. +Sed sit amet mi sit amet nulla ornare dapibus. +Mauris ac varius ante, sed dictum eros. +Integer vitae scelerisque nisi. +Etiam mauris lorem, aliquet ac pulvinar sed, suscipit sit amet ante. +Vestibulum quis vulputate tortor, id venenatis quam. +Proin hendrerit arcu ante, ut rutrum erat fermentum vel. +In vel tellus sapien. +Nullam fringilla, libero ac eleifend commodo, massa nibh porta sem, nec consectetur mi lorem in augue. +Curabitur venenatis ex nec nisl luctus, eu vulputate lectus ultricies. +Ut tortor urna, convallis eu viverra sit amet, finibus eget nisl. +Donec eleifend eget est sit amet eleifend. +Vivamus nec enim non ipsum luctus convallis ut non nulla. +Nam ac viverra arcu, ut tempus nisi. + +Nullam hendrerit sem sit amet magna eleifend, eu dapibus mauris interdum. +Vestibulum sollicitudin ex dolor, tempus rhoncus lorem ultricies ut. +Vestibulum viverra leo massa, rhoncus semper felis malesuada vel. +Donec a ex nec nibh volutpat placerat. +Morbi condimentum dignissim pellentesque. +Maecenas ornare aliquet libero id blandit. +Praesent ac mattis magna, sit amet rhoncus nisl. +Vivamus efficitur porta lorem vitae pulvinar. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Morbi diam dui, elementum nec nisl eget, sollicitudin ultricies nisi. +Nullam porta egestas odio, quis posuere leo congue vitae. +Sed a augue odio. +Vestibulum pellentesque laoreet augue. + +Donec non bibendum justo. +Aliquam convallis arcu nec risus congue rutrum. +Aenean nec augue id dui pretium elementum. +Quisque lacinia fringilla massa, vel elementum magna condimentum ut. +Duis placerat metus eget mi lobortis, non pellentesque nisl fringilla. +Curabitur pretium urna dolor, eu viverra mauris volutpat ac. +Donec augue mi, pulvinar sed risus in, semper rutrum elit. +Fusce faucibus justo nec nulla mollis sodales. + +Integer vulputate enim at enim tristique vehicula. +Praesent at eleifend turpis, in aliquet leo. +Suspendisse potenti. +Nulla massa justo, pellentesque at massa vel, auctor tincidunt dui. +Etiam faucibus ligula eget elit fringilla pellentesque. +Nam consectetur, libero nec scelerisque mollis, eros eros placerat enim, ac vulputate neque eros ut leo. +Mauris mattis est at lorem tempus pulvinar. +Aliquam vulputate in metus sed cursus. +Integer ut turpis convallis velit molestie tincidunt. +Aenean sed malesuada ligula. +Sed laoreet ac massa ut eleifend. +Nullam fermentum consequat ultricies. + +Etiam at mauris vitae purus consectetur tempus. +Nullam euismod ligula at mattis vehicula. +Vivamus blandit magna sed purus facilisis, sit amet egestas est pharetra. +Mauris imperdiet posuere convallis. +Sed ut mi et felis pretium consequat. +Cras pretium urna a ante posuere, eu ultrices sapien rhoncus. +In interdum neque turpis, sit amet porta nunc mollis eu. +Nunc eu aliquam diam, id finibus ipsum. + +Suspendisse lacinia hendrerit nisl, ac volutpat diam consequat tincidunt. +Duis est eros, feugiat vel dui at, consequat rhoncus nulla. +Etiam id eros ultricies, posuere nisi nec, rutrum risus. +Nam tempor tortor a nisi ullamcorper pulvinar. +Fusce odio justo, luctus ut erat sit amet, rutrum condimentum dolor. +In sollicitudin facilisis cursus. +Donec eget auctor nisl. +Proin dignissim suscipit ultricies. +Suspendisse eget arcu non ante hendrerit feugiat at ac orci. +Nullam aliquam bibendum turpis eget varius. +Nam quis augue vitae velit condimentum hendrerit. +Nam scelerisque, risus elementum convallis mollis, lorem erat pharetra ex, ut faucibus ex ligula non arcu. + +Sed euismod vehicula interdum. +Donec vulputate malesuada massa quis hendrerit. +In eros felis, elementum quis maximus quis, auctor eu massa. +Proin quis efficitur enim, a finibus justo. +Aenean a nulla eu eros convallis ultricies ac at est. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Quisque non dolor convallis, pretium libero eu, finibus nibh. +In hac habitasse platea dictumst. +Maecenas nunc odio, fringilla eu urna a, dignissim sollicitudin mauris. +Pellentesque ut orci eu neque vehicula lobortis eget a nibh. +Vivamus nec consequat justo. + +Donec in rutrum mauris. +Maecenas mi est, egestas in augue non, faucibus finibus massa. +Nullam ullamcorper elit tincidunt purus tincidunt ultrices vitae ac lacus. +Maecenas et tellus vitae eros tincidunt fermentum. +Proin ut tellus ligula. +Aliquam nec pulvinar nisi. +Nunc sit amet massa volutpat, vehicula nunc id, porttitor lorem. + +Duis suscipit ipsum tellus, at pulvinar quam rutrum sit amet. +Vivamus suscipit laoreet felis. +Sed ultrices non urna in pretium. +Ut viverra iaculis orci vel laoreet. +Vivamus auctor tincidunt enim, sed pulvinar odio egestas sit amet. +Proin nisl eros, viverra ut tincidunt in, volutpat sed justo. +Ut est tortor, iaculis sed mi at, volutpat aliquam lectus. +Aenean consequat maximus nulla, vitae tristique nisi imperdiet at. + +Integer id enim ut nibh varius tristique et in dui. +Fusce elementum justo efficitur erat dictum interdum at ut augue. +Maecenas sit amet est et metus feugiat molestie ut sed elit. +Morbi sollicitudin sem quam, ut placerat purus vestibulum in. +Donec at cursus mi. +Pellentesque auctor feugiat tempus. +Morbi vitae ipsum sit amet est interdum finibus. +Morbi ac felis id lorem bibendum lacinia sed sit amet est. +Proin volutpat ultrices neque nec porttitor. + +Sed sed porttitor quam. +Proin convallis lorem at libero facilisis, quis pretium lectus blandit. +Morbi eu orci nulla. +Nulla commodo porttitor fermentum. +Fusce feugiat metus pharetra ante luctus, ut suscipit justo volutpat. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Suspendisse potenti. +Vivamus a eleifend magna, ac bibendum odio. +Fusce consectetur tortor nec mauris dignissim bibendum nec in orci. +Ut commodo purus nisi, non venenatis purus posuere vel. + +Aenean luctus faucibus arcu, ut eleifend lorem. +Ut cursus arcu vitae diam pharetra, et bibendum ligula accumsan. +Mauris a elementum leo. +Mauris molestie, sapien sit amet egestas luctus, mi mi luctus sapien, eu consequat ligula nunc eget nisi. +Ut venenatis massa ante, vitae eleifend ex venenatis non. +Phasellus at sagittis nulla. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nulla facilisi. +Donec accumsan quam sed dui hendrerit, nec tempor mauris gravida. +Praesent vestibulum est malesuada euismod accumsan. +Vivamus vel pharetra nulla, in aliquet sapien. +Integer sollicitudin iaculis augue quis elementum. +Sed pharetra metus turpis, vitae dignissim odio tincidunt at. +Mauris pretium rhoncus magna eget accumsan. +Duis at accumsan diam, eget fringilla orci. + +In posuere purus lorem, nec facilisis metus auctor non. +Mauris nec risus auctor, finibus dui elementum, facilisis justo. +Nunc accumsan pretium nisl et ullamcorper. +Nulla facilisi. +Aenean vehicula tortor a orci feugiat laoreet id vel nisi. +Pellentesque auctor commodo mauris at egestas. +Phasellus ut condimentum urna, sit amet aliquam ante. +Curabitur odio elit, facilisis vel facilisis vitae, volutpat eu nibh. + +Duis convallis et lectus sed vulputate. +Vivamus congue lectus quis convallis rhoncus. +Vivamus ut congue neque, vel tristique enim. +Fusce eu tincidunt turpis. +Maecenas tristique justo libero, sed mollis sem pulvinar a. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam iaculis egestas lorem porttitor convallis. +Nam consequat odio in mattis porttitor. +Fusce ut mi ultrices, feugiat ante ut, suscipit quam. +Maecenas euismod vulputate ipsum vel commodo. + +Nullam aliquet massa sit amet viverra molestie. +Proin gravida mi et sem ultrices, eget vulputate justo interdum. +Integer consequat lorem ut nisl luctus, a ultricies nulla dignissim. +Sed vulputate facilisis diam non cursus. +Vivamus id congue ipsum. +Praesent in enim at elit dictum iaculis ac et est. +Phasellus vel ornare dui. +Ut eget viverra metus. +Duis in ex pulvinar, iaculis libero a, suscipit felis. +Praesent tempus sit amet justo sed condimentum. + +Maecenas vel feugiat ex. +Cras tortor augue, condimentum nec quam sed, eleifend sodales libero. +Quisque volutpat tempor odio, ac dapibus nibh rutrum id. +Nullam ultrices metus turpis, eu scelerisque metus laoreet a. +Donec at dui ipsum. +Aenean ornare condimentum fermentum. +Praesent ligula neque, pulvinar vel scelerisque sit amet, lobortis non nulla. + +Pellentesque pharetra non arcu commodo aliquam. +Suspendisse potenti. +Sed diam diam, laoreet ac metus in, tincidunt congue diam. +Aenean id nisl auctor, pharetra sem in, faucibus ante. +Nullam urna turpis, laoreet sed augue at, consectetur egestas diam. +Nulla tellus mauris, venenatis quis venenatis ut, aliquet in lacus. +Pellentesque venenatis tempor volutpat. +Aenean vitae tristique enim, eget tincidunt ex. +Etiam justo ligula, rutrum blandit aliquam pretium, maximus nec nibh. +Maecenas at nisi sit amet elit egestas cursus non vel urna. +Nulla erat felis, eleifend vitae suscipit nec, rhoncus nec diam. +Duis in quam viverra, gravida orci sit amet, venenatis tellus. +Suspendisse at tellus sit amet nibh convallis sodales. +Nullam quis commodo justo. +Maecenas placerat elit quis fringilla porta. +Nam aliquet scelerisque justo, nec cursus mi. + +Mauris maximus nulla eu sem tincidunt maximus. +Sed volutpat dignissim leo, nec finibus ex auctor non. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Praesent non nisi mollis, interdum enim sed, rutrum ligula. +Ut pulvinar egestas lectus, ut consequat felis. +Nulla venenatis massa et pulvinar commodo. +Nam nec rutrum libero. +Fusce non imperdiet ligula. +Curabitur aliquet pretium turpis, at aliquet tortor vehicula at. +Suspendisse semper nunc eget mauris maximus sodales. +Aliquam sit amet consectetur lorem. +Cras elementum risus non arcu egestas, sit amet sagittis magna tristique. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + +Sed ullamcorper lectus non lectus eleifend, nec congue sem mattis. +Sed interdum nulla vel turpis rhoncus vulputate. +Etiam gravida faucibus lacinia. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. +Nullam volutpat enim urna, nec ultricies dui rhoncus efficitur. +Duis mattis leo vel justo lobortis, sit amet venenatis magna vestibulum. +Suspendisse potenti. +Cras vel consequat ligula. +Cras eleifend viverra leo non vestibulum. +Praesent suscipit nec elit vel euismod. +Fusce tempus risus quis volutpat vulputate. +Sed eu dui odio. +Aliquam erat volutpat. + +In tempus est eget ex vulputate pretium. +Nullam egestas nisl est, id viverra turpis hendrerit vel. +Ut et felis facilisis dui blandit pharetra vel ut arcu. +Nunc in faucibus elit. +Cras sit amet porta nunc. +Donec tincidunt, leo in iaculis efficitur, ante purus vulputate massa, eget porta nisi purus quis nisi. +Etiam faucibus, nunc a laoreet feugiat, orci erat tincidunt risus, ut consequat sapien ex a lacus. +Suspendisse bibendum non lectus eu dapibus. +Quisque sed fermentum lectus, et scelerisque orci. +Duis pellentesque, dui id finibus lacinia, nulla purus luctus nisi, auctor pulvinar ipsum odio sit amet orci. +Vestibulum dictum augue nec vestibulum tincidunt. +Pellentesque ac convallis velit. +Aliquam erat volutpat. + +Morbi scelerisque, dui congue viverra viverra, eros leo imperdiet tortor, id lacinia ante nisi nec neque. +Aenean malesuada ornare eros non sodales. +Nunc non aliquam eros. +Nam gravida sem eget nibh laoreet, at mollis dui bibendum. +In in tortor non magna euismod sollicitudin sit amet non ex. +Suspendisse vel commodo urna. +Proin viverra in sem a aliquet. +Interdum et malesuada fames ac ante ipsum primis in faucibus. +Duis luctus laoreet erat sit amet tempor. +Cras id ligula ac ex sodales blandit quis ac mauris. +Morbi purus enim, finibus ac gravida sit amet, consectetur eu nunc. +Nunc mattis facilisis sem, et eleifend elit consequat sit amet. + +Fusce mattis nibh orci, a consectetur nunc ultrices id. +Nullam tempus tortor sed ligula lobortis, nec auctor lacus elementum. +Suspendisse tincidunt nulla vitae tellus volutpat, ut pulvinar urna sagittis. +In hac habitasse platea dictumst. +Vestibulum bibendum augue eget mi commodo, aliquam aliquam mauris lobortis. +Proin laoreet eros vel mauris tempus fermentum. +Pellentesque in venenatis sapien. +Vestibulum accumsan nec nisi nec fermentum. +Curabitur accumsan et arcu in porttitor. +In hac habitasse platea dictumst. +Maecenas aliquet elit feugiat, egestas libero a, maximus lorem. +Nam eget semper tortor, in elementum nibh. + +Etiam laoreet sit amet ex et tempus. +Donec lacinia sapien quis tincidunt maximus. +Vestibulum ut lacus sit amet nibh sodales scelerisque sed vel dui. +Etiam a risus magna. +Praesent arcu felis, commodo in pretium non, fermentum non mauris. +Praesent pellentesque nisi sed hendrerit vulputate. +Integer venenatis lorem non aliquam tempor. +Pellentesque dapibus urna est, eget posuere sapien vestibulum sit amet. +Donec dictum semper lectus, quis pellentesque libero aliquet vitae. +Aliquam eget accumsan nisi. +Morbi sit amet auctor nisl. +Integer nulla augue, dictum quis orci at, tempor commodo lacus. +Nunc auctor est cursus, vulputate ipsum a, placerat metus. +Donec gravida risus viverra mauris commodo convallis. + +Ut sed luctus sapien, a ultrices sem. +Proin quis enim ligula. +Donec eleifend interdum elit quis rhoncus. +Sed auctor tortor eu magna pellentesque, vitae aliquet mi fringilla. +Morbi porttitor sem vel ante commodo, sed eleifend quam iaculis. +Pellentesque feugiat lacinia augue nec dapibus. +Curabitur dignissim quis ligula eu bibendum. +Suspendisse euismod pellentesque lacus, eu suscipit sem tincidunt sed. +Praesent metus nunc, egestas quis ligula id, eleifend fringilla est. +Morbi at tortor sapien. + +Vivamus dapibus est eget mauris scelerisque finibus. +Praesent vitae tortor interdum, venenatis magna nec, blandit diam. +Mauris varius ac erat sed pharetra. +Cras egestas lorem at elementum varius. +Vestibulum laoreet mollis ipsum. +Curabitur vel hendrerit lectus, id ullamcorper nisi. +Nulla facilisi. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Mauris condimentum, nulla non posuere placerat, nisl turpis sagittis felis, vel cursus lectus magna blandit nulla. +Nunc tristique nisi eu ornare accumsan. + +Nulla facilisi. +Vestibulum ac justo leo. +Maecenas ac porta ante, id pellentesque sem. +Pellentesque ac iaculis sapien. +Proin efficitur rhoncus sem eu dignissim. +Maecenas dignissim massa et nibh fermentum tincidunt eget id massa. +Maecenas vitae mauris turpis. +Quisque semper non orci quis convallis. +Nulla vestibulum varius arcu, non tincidunt risus. +Duis ex diam, sagittis ut gravida lobortis, consequat id odio. +Nam vulputate nisl in congue iaculis. +Donec dignissim id dolor sit amet aliquet. +Sed tincidunt neque ac nisi suscipit, lacinia luctus massa consectetur. +Praesent ultrices lacus et lorem tempor fringilla. +In quis mauris laoreet, porttitor neque facilisis, gravida nisl. + +Pellentesque nisi nisi, blandit nec purus sed, facilisis ullamcorper erat. +Fusce iaculis quam vel risus dignissim finibus. +Proin quis faucibus lacus. +Suspendisse fermentum diam in ultrices lacinia. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Proin a consequat sem. +Praesent massa quam, condimentum eget semper id, pulvinar ac felis. +Aliquam vitae mi ullamcorper, ornare augue in, elementum nibh. + +Ut efficitur vulputate orci at laoreet. +Etiam venenatis urna ac nisi finibus, et feugiat enim faucibus. +Nam nec hendrerit tellus. +Donec mattis odio accumsan massa iaculis lacinia. +Interdum et malesuada fames ac ante ipsum primis in faucibus. +Donec commodo elementum porta. +Nam sollicitudin tortor eget est condimentum vehicula. +Cras eleifend sapien eu fermentum pellentesque. +Duis nisi mi, ornare eu ex ac, dictum varius libero. +Vestibulum dignissim odio sem, quis mattis quam malesuada id. + +Sed vitae bibendum neque. +Nullam tempor aliquam tincidunt. +Donec egestas augue elit, id vehicula justo vestibulum et. +Nullam imperdiet congue dui, at venenatis justo vestibulum quis. +Curabitur elit tellus, sollicitudin eu mi finibus, consectetur condimentum tellus. +Mauris ultrices sodales mi at rhoncus. +Curabitur ullamcorper non sapien non maximus. +Morbi euismod aliquam leo, porta bibendum enim ullamcorper sed. +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Suspendisse volutpat luctus nisi. +Vivamus euismod sollicitudin sodales. +Duis fermentum mi urna, in elementum dolor fringilla at. + +Praesent volutpat dui dui, eget euismod mauris dignissim rutrum. +Nullam faucibus lacus in ipsum pharetra, ut laoreet velit egestas. +Nulla iaculis nisl eget odio iaculis, id consequat nunc gravida. +In suscipit nisl nisi, sit amet volutpat metus vulputate sit amet. +Maecenas porttitor nec mauris id feugiat. +Donec non ante non enim fringilla dignissim ac at urna. +Suspendisse venenatis massa non mi molestie pharetra. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec vulputate varius facilisis. +Curabitur suscipit molestie risus vel auctor. +Aliquam ultrices vitae leo sit amet ornare. +Mauris aliquet egestas arcu id accumsan. +Donec dapibus turpis vel convallis varius. +Donec pulvinar placerat venenatis. +Aliquam nisl eros, blandit a lorem faucibus, finibus blandit libero. +Sed in lacus fringilla, suscipit risus eu, tempor ante. + +Proin et laoreet ante. +Etiam eget scelerisque felis. +In id erat auctor, porta nulla eget, tincidunt urna. +Maecenas vel semper urna, quis vulputate ipsum. +Fusce ut nisl diam. +Nam quis massa vitae felis porttitor aliquam. +Nullam viverra tempor purus, vel tincidunt arcu hendrerit non. +Cras mollis neque eget nunc dapibus, eget imperdiet lacus finibus. + +Donec odio orci, vulputate id massa vitae, interdum dictum velit. +Suspendisse enim dui, scelerisque eu elementum vel, pharetra egestas neque. +Cras tristique ante sed sapien ornare posuere. +Proin scelerisque elementum eros eget tristique. +Etiam volutpat metus eget est tempus pretium. +Sed pretium suscipit metus, at ultricies diam egestas in. +Donec sed nisi mi. + +Vestibulum nisi neque, blandit et placerat sed, iaculis ut dolor. +Mauris ut bibendum nisl. +Maecenas vehicula, orci quis fringilla interdum, nisi tellus facilisis ex, a vulputate justo sapien ultrices leo. +Maecenas mattis, nisl a venenatis gravida, dui quam suscipit purus, consectetur ultricies erat mi a justo. +Mauris dictum ut lorem non rhoncus. +Duis tincidunt risus eu leo fringilla, ac hendrerit justo interdum. +Etiam sit amet mauris sit amet nisl faucibus lacinia. +Cras molestie nulla sit amet eros lobortis imperdiet. +Etiam malesuada nulla quis eros porttitor imperdiet. +Nulla sit amet odio pulvinar, scelerisque orci vitae, luctus risus. +Phasellus sem ligula, lacinia sed ultricies vel, varius non lectus. +Donec maximus sapien sapien, at viverra nisl euismod sit amet. +Donec hendrerit hendrerit placerat. +Duis vehicula dolor id urna porttitor placerat. + +In ornare a ante a consequat. +Vestibulum sed faucibus turpis. +Donec massa orci, scelerisque nec magna id, tempor dignissim risus. +Vestibulum in purus sit amet purus rhoncus pretium a at dui. +Sed iaculis facilisis gravida. +Vivamus ullamcorper purus sit amet tincidunt elementum. +Maecenas commodo efficitur tortor, aliquet auctor dui scelerisque eget. +Ut facilisis in libero in aliquet. +Fusce vestibulum tempor mollis. +Sed id vestibulum leo. +Proin eget arcu sed ipsum pellentesque tincidunt vel ut leo. +Praesent congue magna magna, a viverra velit tempus sed. +Suspendisse rutrum vitae orci ac venenatis. + +Vivamus malesuada turpis non pretium posuere. +Vestibulum eu rhoncus tortor. +Donec auctor est ipsum, sit amet elementum enim malesuada a. +Sed leo justo, efficitur in pharetra eu, suscipit id nibh. +Donec dapibus justo dui, id sodales augue mattis vel. +Mauris accumsan vel justo vel egestas. +Maecenas tempus ligula eget convallis elementum. +Etiam iaculis interdum magna eget maximus. +Nulla sodales odio lectus, sit amet vulputate tellus hendrerit sit amet. +Curabitur id aliquam mi, eget accumsan justo. +Duis tempus metus a semper ultrices. +Curabitur semper vulputate eros. +Duis bibendum condimentum quam, in scelerisque tortor feugiat a. +Nunc placerat nibh neque, nec vehicula leo consectetur eu. +Aliquam a nunc imperdiet, facilisis metus quis, placerat libero. + +Donec leo felis, efficitur pulvinar mauris nec, sagittis lacinia turpis. +Praesent ut gravida tortor, sit amet aliquam ex. +Suspendisse quis nunc facilisis, tincidunt arcu sit amet, molestie turpis. +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Sed varius urna non magna condimentum hendrerit quis quis felis. +Phasellus facilisis odio velit, non lobortis magna gravida vestibulum. +Aenean scelerisque ac mi nec aliquet. + +Fusce mollis ut est id accumsan. +Curabitur augue libero, pellentesque ac justo sit amet, mattis pulvinar ipsum. +Phasellus sagittis mattis urna. +Etiam eget scelerisque est. +Nulla at sollicitudin velit. +Duis vulputate lacinia tempus. +Ut ac sem dui. +Donec sed pretium dui, sit amet laoreet sapien. +Sed nec lacus nulla. + +Vestibulum placerat neque at eros hendrerit, id convallis nisl cursus. +Ut sit amet diam mi. +Nullam erat nisi, blandit eget efficitur ut, porta id massa. +Aenean bibendum purus velit. +Mauris commodo efficitur lectus eu sollicitudin. +Morbi consectetur dictum suscipit. +Aliquam dignissim elit id dolor congue, vulputate euismod erat sodales. +Duis quis enim at sapien viverra elementum. +Vivamus nec eros sed nisi pharetra gravida. +Morbi leo justo, hendrerit faucibus lorem ac, tempus commodo quam. +Mauris et velit ornare, bibendum mauris quis, aliquam ante. +Vivamus efficitur orci nec gravida varius. +Cras justo eros, porta eget odio ac, vulputate tincidunt ex. +Cras at placerat ipsum. +Proin eu lectus at justo porttitor ornare. + +Fusce ut risus odio. +Praesent sit amet facilisis felis. +Maecenas urna risus, scelerisque ultrices tortor vel, imperdiet congue nunc. +Fusce vestibulum interdum felis id porta. +Donec malesuada molestie est non efficitur. +Quisque hendrerit eleifend massa vitae ultrices. +Phasellus faucibus neque mi, quis aliquam ante sagittis et. +Etiam ut neque sit amet orci dignissim tincidunt rutrum nec ex. +Phasellus scelerisque, leo nec pretium placerat, ante turpis imperdiet enim, convallis scelerisque arcu dolor non tortor. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nullam quis ipsum sapien. +Integer aliquam commodo euismod. +Integer elit elit, condimentum rutrum est a, suscipit ultrices urna. +Nam scelerisque maximus lacus et volutpat. +Morbi quis lectus a lorem tincidunt interdum ac nec neque. +Cras vitae nulla commodo odio posuere porta. + +Pellentesque et quam sed tellus aliquet euismod. +Suspendisse ut est ullamcorper, fermentum tellus sed, commodo est. +Donec venenatis tempor orci, sit amet eleifend lectus pharetra ut. +Integer euismod, diam nec tristique commodo, ante lorem tincidunt est, in egestas augue risus at est. +Nulla ultrices, mi eget tincidunt ornare, arcu est ultrices neque, vel vestibulum nisi orci sed lectus. +Nunc scelerisque tortor ligula, ut iaculis sem fringilla eget. +Etiam ornare lacus in odio congue, nec consectetur eros auctor. +Aliquam a ante congue, scelerisque lacus ac, sollicitudin quam. +Etiam maximus nec mi vitae egestas. +Curabitur eget augue nunc. +Etiam eu felis elit. +Pellentesque mattis eros nec aliquam vulputate. + +Vestibulum odio velit, imperdiet eu dui nec, sollicitudin volutpat quam. +Curabitur lacus est, luctus ut tellus quis, porttitor tincidunt risus. +Aliquam dolor lectus, facilisis ultrices libero sit amet, placerat euismod sapien. +Fusce hendrerit aliquam nunc in molestie. +Nulla eu varius lectus, nec tincidunt sapien. +Sed a euismod eros. +Donec dignissim ultricies scelerisque. +Quisque id luctus tellus. +Integer at facilisis felis, ut porttitor eros. +In in iaculis urna. +Suspendisse auctor, erat tempus aliquet vulputate, justo ipsum rutrum odio, blandit scelerisque orci nulla in arcu. +Curabitur fermentum lorem sed erat lobortis, ut efficitur lacus pellentesque. +Nam eleifend semper consectetur. +In eleifend quis diam finibus vestibulum. +Cras mauris arcu, commodo a mattis nec, dignissim quis libero. + +Quisque eget ligula accumsan, cursus purus et, tincidunt sem. +Nunc hendrerit nulla non tempor pharetra. +Aliquam tristique nisl nisi, sit amet sagittis mi fermentum sit amet. +Nulla tellus ante, rhoncus id euismod non, consectetur in mi. +Mauris posuere orci justo, nec fermentum dolor suscipit dapibus. +Nunc iaculis eros et risus ornare, sit amet malesuada velit vehicula. +Nulla ut aliquam ex. +Vestibulum ac eros justo. +Morbi in arcu a neque suscipit posuere. +Mauris nec neque sit amet leo iaculis euismod sit amet et dui. +Morbi ac dapibus mi, ut elementum erat. +Pellentesque cursus imperdiet condimentum. +Aliquam a quam pulvinar, feugiat dui et, lacinia enim. +Aliquam id lectus ex. + +Fusce at quam nulla. +Donec sit amet placerat magna, vitae feugiat metus. +Sed dapibus augue urna, quis viverra neque viverra id. +Donec mollis venenatis tortor et viverra. +In nec est ligula. +Nam feugiat mi ac arcu suscipit dignissim ac eu tellus. +Donec interdum magna nec elementum iaculis. +Nunc cursus nec nisi at interdum. +Vestibulum quis eleifend risus, sollicitudin faucibus massa. +Praesent tincidunt magna in enim lobortis aliquet. +Proin sed mi vitae dui sagittis aliquet in eget nulla. +Etiam eu ante nisi. +Cras pharetra malesuada enim, sed elementum odio pulvinar ut. +Donec ornare libero quis ligula mollis, a viverra nunc finibus. + +Morbi blandit finibus ligula pharetra rhoncus. +Phasellus porta fringilla dui congue vulputate. +Phasellus scelerisque varius velit, eget euismod erat luctus ut. +Cras quis bibendum augue. +Sed varius nec tortor in tempor. +Proin bibendum sapien ut odio tempus pellentesque. +Pellentesque ut erat congue, pellentesque turpis vitae, gravida diam. +Integer eleifend orci erat, non facilisis enim porta sit amet. + +Aliquam vel mauris a eros fringilla blandit non dignissim ipsum. +Donec vel nulla vitae odio scelerisque egestas in a arcu. +Fusce fermentum nisl nec leo pharetra rhoncus. +Morbi vestibulum tellus sit amet tincidunt dignissim. +Fusce in massa tortor. +Aliquam pulvinar augue risus, at tincidunt felis porta quis. +Suspendisse in nulla in libero tempus dictum. +Maecenas egestas laoreet ex at dapibus. +Phasellus sem leo, gravida ac quam eget, pharetra dapibus odio. +Vivamus ultrices elit vitae tellus ullamcorper ultricies. +Duis nec fringilla ante, a bibendum erat. +Praesent eleifend condimentum iaculis. +Sed ultrices erat quis bibendum dignissim. + +Aliquam sagittis orci id urna tempor, sit amet accumsan mauris pretium. +Vestibulum erat lacus, condimentum et facilisis semper, porttitor in purus. +Quisque scelerisque turpis eget sapien vehicula aliquet sit amet quis quam. +Cras quis lorem metus. +Nam vel egestas augue. +Etiam sed justo iaculis ante consequat ornare eu et leo. +Sed non tortor at lorem fringilla dictum sed et arcu. +Phasellus eget dolor viverra, condimentum urna condimentum, tristique massa. +Vestibulum porttitor, quam scelerisque lobortis eleifend, lectus urna suscipit velit, sed sodales nibh nisi gravida lorem. +Maecenas massa diam, scelerisque euismod metus et, congue tincidunt tortor. + +Vivamus convallis mi vel neque varius suscipit. +Curabitur id tellus magna. +Cras ac nisi eu est tincidunt volutpat et a orci. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. +Nunc ac orci non est eleifend euismod ac vitae est. +Nullam venenatis vel sapien sit amet pharetra. +Curabitur urna ligula, sagittis non euismod eu, venenatis interdum felis. + +Curabitur vel arcu nisl. +Ut vel tellus sit amet erat finibus tempus id quis lectus. +Phasellus tincidunt neque ut urna mollis, faucibus pharetra massa semper. +Proin bibendum felis non purus pretium molestie. +Mauris nec congue mi. +Nulla nec molestie eros. +Praesent non nunc purus. +Pellentesque tincidunt vestibulum purus ut pharetra. + +Morbi in gravida nibh, nec ultrices enim. +Quisque feugiat mi nec dui fermentum, eu eleifend dolor posuere. +Vestibulum hendrerit erat ante, non mollis orci tempus sed. +Quisque interdum dolor diam, et tristique dui condimentum quis. +Maecenas interdum leo erat, a sagittis sapien porta in. +Ut ut tincidunt diam. +Praesent rutrum egestas ligula. +Quisque ac urna consectetur, maximus orci ac, dignissim ipsum. +Vivamus id ullamcorper dui, in bibendum nunc. +Praesent varius ipsum in est rhoncus mattis. +Nullam rutrum, diam ac pellentesque mollis, nibh velit pretium erat, vitae tempor tellus libero quis justo. +Vestibulum porta velit vel fringilla aliquam. + +Mauris risus ligula, sollicitudin eu est sed, malesuada mollis ante. +Donec mattis pretium nisi pharetra facilisis. +Vestibulum eu dictum dui, semper tincidunt justo. +Suspendisse at vulputate odio. +In eu orci ante. +Nam tincidunt tortor ac lacus tincidunt dapibus. +Curabitur at urna a velit molestie blandit a in augue. +Morbi interdum sem et urna euismod rutrum. +Donec semper arcu vel massa pellentesque consequat. + +Etiam a lacus cursus lorem gravida congue. +Cras malesuada libero erat, sed rutrum justo rutrum a. +Nulla tempor, odio et convallis ornare, nibh velit mattis libero, non placerat tellus erat a metus. +Ut nec placerat nisi. +Ut efficitur malesuada purus a porttitor. +Vestibulum condimentum tortor in quam finibus, at eleifend est convallis. +Praesent sodales porta urna, at aliquet tellus pulvinar eu. +Quisque placerat, lorem a tincidunt euismod, sem ipsum consectetur nulla, a semper neque lectus sit amet sapien. +Aenean lobortis massa ut nulla interdum, id tincidunt tellus rutrum. +Sed ut semper mauris. +Vivamus vel dignissim sem. +Morbi efficitur lacinia nulla, vel sollicitudin urna dignissim ut. +Quisque commodo, purus in tincidunt fringilla, lacus dolor vulputate mauris, sit amet aliquet est mi sed enim. +Nunc hendrerit turpis at nisi vulputate, ut auctor nibh suscipit. +Cras libero nulla, consequat nec gravida ac, ornare quis magna. +Etiam ex risus, molestie ac pulvinar sed, pellentesque non mauris. + +Morbi feugiat vitae nibh eu finibus. +Duis eros lectus, consectetur non sem non, volutpat egestas ante. +Vestibulum a purus metus. +Integer ut sapien justo. +Nullam a finibus orci. +Maecenas dictum, lectus vel maximus dictum, magna libero egestas nunc, ut sagittis ipsum mi eu dolor. +Phasellus auctor pellentesque congue. +Nulla mollis ligula ut magna rhoncus, id accumsan justo ultrices. +Etiam pharetra ornare quam, sit amet pulvinar tellus tempor ac. +Quisque eros ante, scelerisque id arcu vel, elementum eleifend nisi. +Sed vel turpis eu nulla tempus congue vitae ac erat. + +Nunc imperdiet ultrices nisi finibus ullamcorper. +Curabitur dictum risus tellus, a eleifend quam rutrum eu. +Vestibulum leo nisl, lobortis eget volutpat ut, consectetur ac metus. +Aliquam erat volutpat. +Proin non leo justo. +Vivamus elementum, ligula maximus placerat lacinia, velit augue vehicula enim, vitae eleifend magna neque sit amet libero. +Etiam fermentum sed lacus at viverra. +In lacinia, velit iaculis consectetur pharetra, leo est venenatis lorem, non hendrerit elit dolor at neque. +Vivamus eget purus quis turpis hendrerit dapibus placerat ac leo. +Donec hendrerit sagittis enim. +Pellentesque ultrices libero semper ultrices pellentesque. +Sed ut sollicitudin nisl, ac imperdiet ligula. +Ut malesuada facilisis lacus, nec euismod tellus luctus iaculis. +Suspendisse porttitor nibh urna, vel placerat nulla ultricies eu. +Mauris sodales turpis orci, non pretium risus ullamcorper at. +Nulla ac ullamcorper tortor. + +Suspendisse sed molestie nisi. +Nunc viverra nec nisl sed semper. +Ut dignissim, urna eu aliquet facilisis, lacus erat ultrices lorem, eget gravida augue magna at eros. +Pellentesque ac dignissim turpis, a viverra nulla. +Morbi blandit felis quis tortor semper, at aliquet enim commodo. +Cras eu volutpat ligula, a tempus mi. +Nunc sed nulla eu ligula tincidunt aliquet et et lectus. +Maecenas tincidunt mi vel leo lacinia cursus eu non risus. +Curabitur in erat volutpat, tempus orci eget, pulvinar orci. +Suspendisse ut convallis velit. +Nulla ullamcorper sapien velit, et viverra tellus venenatis nec. +Nullam gravida ac quam non porttitor. +Proin in nibh vel erat cursus tempus a non sapien. +Pellentesque commodo suscipit ligula quis ultrices. + +Proin cursus justo ut tellus dapibus ultricies. +Etiam lobortis, sem nec cursus commodo, nibh risus finibus justo, tempor viverra eros eros eget lacus. +Maecenas convallis cursus ligula sed sagittis. +Suspendisse a rutrum neque. +Nunc nec semper dolor. +Praesent quis libero pulvinar felis viverra congue. +Maecenas vulputate elit lorem, ac consequat metus iaculis non. +Curabitur sollicitudin mauris nulla, vitae porta felis vestibulum vel. +Nulla facilisi. +Curabitur suscipit purus tortor, quis viverra dui egestas id. +Aenean id ullamcorper dolor. + +Donec id mattis metus. +Morbi varius venenatis auctor. +Quisque ac ipsum vitae lorem malesuada varius. +In eget urna eu augue rhoncus venenatis vel vitae ipsum. +Duis ante nisi, facilisis eu egestas a, hendrerit feugiat magna. +Mauris orci ipsum, fermentum eu placerat at, faucibus dapibus arcu. +Pellentesque at posuere enim. +Nullam faucibus lectus at fringilla sollicitudin. + +Integer posuere, diam nec sodales placerat, turpis ligula tempor erat, pharetra accumsan nulla libero faucibus sapien. +Integer mollis et mi id dictum. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed ut nibh libero. +Donec sodales velit at metus ornare, et gravida est sagittis. +Nulla eget tortor nec neque consectetur suscipit vitae eget ligula. +Nulla facilisi. +Maecenas in pretium lectus. +Duis aliquam accumsan imperdiet. +Donec blandit vehicula facilisis. +Fusce lobortis dictum arcu id efficitur. +Integer convallis ex eu sem vehicula egestas. +Sed vestibulum pharetra metus eget finibus. +Phasellus egestas vestibulum eros quis iaculis. + +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Nullam tincidunt felis vitae venenatis accumsan. +Vivamus volutpat tempus felis non maximus. +Curabitur ullamcorper lorem lorem, a condimentum ex sollicitudin non. +Nam varius imperdiet neque, vitae ultricies risus sollicitudin quis. +Donec viverra, ex ut porttitor pretium, enim velit tincidunt ante, non viverra ligula turpis sed ex. +Suspendisse mauris dolor, efficitur a dui non, sagittis tempor nulla. +Morbi semper, justo vel imperdiet fermentum, lacus massa pharetra est, at laoreet nunc ligula ac urna. +Nullam condimentum mi et ipsum pulvinar luctus. +Phasellus imperdiet ultricies elit, a finibus magna pellentesque id. +Vestibulum lobortis consequat augue, at accumsan leo sodales sit amet. +Vestibulum lacinia fringilla congue. + +Nam id sapien eu ligula consectetur fringilla. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Donec nec dapibus eros. +Duis feugiat nibh felis, et gravida orci facilisis et. +Vestibulum viverra erat sapien, sit amet fringilla purus congue vitae. +Nullam a est varius, accumsan sem ut, placerat velit. +Etiam tincidunt odio quis sapien ornare, at tempor nibh condimentum. +In hac habitasse platea dictumst. +Nam et laoreet ex, vel aliquam nisl. +Sed pharetra molestie ante, quis congue lectus semper non. +Sed ultrices nisl ligula, a aliquet nisl feugiat eget. +Donec eget mi augue. +Integer non magna posuere augue aliquam maximus sit amet id ante. +Mauris risus diam, feugiat vel orci non, scelerisque vulputate mauris. + +Maecenas tempor pellentesque tortor. +Praesent ullamcorper nibh a arcu dictum malesuada. +Sed efficitur aliquet commodo. +Aenean tincidunt diam augue, eget consequat dui porttitor et. +Maecenas scelerisque risus sed pretium luctus. +Donec vitae purus at elit malesuada accumsan. +Suspendisse potenti. +Cras tellus enim, molestie vestibulum rutrum at, fermentum vel orci. +Aliquam a tempus tortor, a finibus ligula. + +Aliquam et lorem a sapien rhoncus venenatis. +Nulla eleifend odio nulla, a rhoncus justo porttitor eu. +Donec ut orci at mauris varius commodo aliquam ac mi. +Cras rhoncus fringilla tincidunt. +Cras sit amet justo leo. +Fusce in elit sollicitudin, condimentum est eget, blandit sapien. +Aenean et massa quis enim aliquam tempus vitae et augue. +Phasellus ultricies urna eu turpis placerat pretium. +In ac mattis augue. +Pellentesque sed dictum nisl, ac tempor massa. +Morbi vel interdum ante. +Duis ultrices erat rhoncus venenatis sodales. +Aenean nibh mi, tempus sit amet lacinia sed, cursus ut ipsum. +Curabitur felis felis, imperdiet ac turpis ut, blandit mattis magna. +Integer ac dui eu ex facilisis tempus non eget orci. +In tempus velit lobortis luctus finibus. + +Integer ultrices arcu dui, id varius arcu placerat quis. +Integer mattis nulla sed dui pretium lacinia. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Fusce fringilla elit et nibh volutpat mattis. +Praesent fringilla magna ante, at maximus sem convallis at. +Maecenas eleifend mattis nibh, ut lobortis velit efficitur nec. +Proin porttitor lorem sapien, id ullamcorper odio finibus a. +Etiam in justo quis purus ultrices finibus et ac odio. +Fusce dictum a metus ut faucibus. +Vestibulum eu pharetra libero. +Suspendisse potenti. +Aenean eget leo lacus. +Aenean accumsan ac enim vel vestibulum. + +Donec faucibus volutpat augue sit amet maximus. +Aliquam consectetur, eros et aliquet mattis, metus elit scelerisque neque, at accumsan ex mi posuere nibh. +Maecenas at ullamcorper arcu. +Vivamus eget accumsan mi. +Aliquam quis pharetra est, id porta diam. +Etiam vitae quam eget neque scelerisque cursus vel ornare nisi. +Nam laoreet efficitur nisl, at consequat leo ultricies in. +Suspendisse in eleifend nibh. +Nunc vestibulum fringilla pretium. +Quisque mattis justo massa, facilisis iaculis nunc varius id. +Sed eu quam augue. +In efficitur pretium fringilla. +Mauris lacinia vestibulum sem quis lacinia. +Vestibulum eu viverra purus. + +Suspendisse vitae velit quis elit iaculis venenatis. +Vestibulum in turpis tellus. +Donec in tellus tellus. +Nam urna dolor, consectetur vel ullamcorper placerat, porta sit amet quam. +Praesent dapibus lorem ut eros vulputate, ac malesuada massa venenatis. +Integer id risus nulla. +Sed erat risus, fringilla quis tempor nec, pulvinar eget enim. +Nam vitae ipsum pharetra, pretium ipsum eu, fringilla magna. +Nullam laoreet interdum elit, a consequat augue pellentesque sit amet. +In non nunc at leo euismod interdum eget non elit. +Donec magna tellus, posuere eu ipsum quis, posuere convallis enim. +Cras convallis arcu sed nulla eleifend aliquet. +Suspendisse dictum, magna et ullamcorper laoreet, augue diam condimentum augue, vitae auctor libero urna quis tortor. +Donec tellus mi, ultricies blandit sapien quis, convallis ornare felis. +Duis nec dui id enim viverra vulputate. +Fusce condimentum vitae leo aliquam dignissim. + +Sed tempus rhoncus massa, sit amet faucibus lorem ullamcorper sed. +Morbi dictum a turpis ut sagittis. +Nulla viverra in quam at facilisis. +Morbi volutpat lorem dolor, in tempor nisi euismod et. +Sed in nisl non libero pharetra porta. +In id feugiat risus. +Nulla at dolor libero. +Nullam tincidunt neque ac lectus hendrerit euismod. +Fusce tincidunt venenatis lorem, sit amet volutpat libero varius et. +Nullam sed suscipit nisi. +Nulla tellus massa, malesuada sed ipsum quis, maximus sollicitudin dolor. +Ut nec dui a mauris lacinia sodales. +Duis condimentum tellus ac elit pharetra facilisis eget ut nulla. + +Pellentesque eleifend posuere consectetur. +Nunc varius eu magna facilisis sollicitudin. +Vestibulum ut porta nunc, id pellentesque ligula. +Donec nec magna est. +Duis tincidunt risus et mi congue, ut pellentesque lectus vulputate. +Nullam sed molestie nisl, blandit consectetur arcu. +Praesent viverra porta nibh id semper. +Proin aliquet posuere metus id varius. +Maecenas et aliquam felis. +Sed imperdiet aliquet tellus. +Mauris lorem erat, laoreet ut metus eu, venenatis commodo diam. +Proin nec elementum arcu. +Ut lacus libero, aliquet sed pellentesque sit amet, sodales interdum ipsum. +Cras nunc tellus, posuere vitae enim lacinia, consectetur euismod tellus. +Nullam scelerisque turpis eu felis faucibus consequat. +Aenean vitae nisl erat. + +Donec luctus mauris ipsum, et tincidunt lectus bibendum sit amet. +Duis pretium mauris nisi, eget convallis nisi iaculis sed. +Quisque vitae congue nibh. +Mauris gravida sed nisl iaculis aliquet. +Integer at nulla eros. +Pellentesque vehicula risus ac dui feugiat, in semper lectus commodo. +Praesent magna metus, vestibulum in sem non, auctor tincidunt libero. +Nam posuere ante tortor, nec molestie dui tempus nec. +Morbi tincidunt lorem lorem, et semper metus consectetur a. +Suspendisse potenti. + +Nam suscipit eros odio, quis vehicula ante interdum non. +Mauris faucibus lectus quis accumsan aliquam. +Praesent in arcu dictum, hendrerit ipsum eu, molestie nisl. +Donec pharetra lacus sapien, at facilisis lectus gravida et. +Aenean tristique mattis purus, at pellentesque risus dignissim at. +Donec a urna est. +Cras non velit quis lacus mattis mattis. +Sed fermentum cursus blandit. +Nunc malesuada ornare sapien posuere cursus. +Integer fermentum in mauris ac blandit. +Etiam tempor, quam sit amet euismod ultrices, eros est congue quam, sit amet congue mauris tellus a est. + +Quisque id ex nisi. +Etiam fermentum magna sed ex molestie, non scelerisque eros fringilla. +Cras ut bibendum nulla, at pretium leo. +Duis malesuada imperdiet odio, in tempus turpis rhoncus ut. +Aliquam sit amet semper felis, ut finibus turpis. +Vivamus nec ex viverra, vehicula nulla at, ullamcorper arcu. +Etiam ac imperdiet sapien. +Donec sit amet dolor nec lectus fermentum scelerisque. +Nullam ornare aliquam est, eget sodales ligula consectetur in. +Vivamus varius semper gravida. +Aliquam erat volutpat. + +Quisque nec finibus ante. +Etiam diam orci, tristique non nisi in, mollis molestie orci. +Quisque ut gravida sapien. +Sed sed purus lorem. +Suspendisse rhoncus, nunc eu fringilla semper, nulla nisl malesuada nulla, et mattis odio nibh vel nisl. +Sed scelerisque vitae erat at aliquam. +Fusce lobortis odio sed pulvinar efficitur. +Proin quis facilisis leo. +Fusce sed magna sit amet dui bibendum venenatis. +Vivamus purus arcu, finibus vulputate tortor vel, suscipit semper nisl. +Etiam non volutpat arcu, quis rhoncus libero. +Etiam eu ipsum in quam convallis venenatis. +Ut sed nibh nec neque ultricies aliquet a quis nibh. +Donec quam lorem, tristique eu maximus quis, finibus at massa. +Aliquam non ipsum eget enim tristique vulputate ut at nisl. + +Nam vestibulum nulla bibendum, rutrum arcu sit amet, dictum quam. +Maecenas ac ex eu mi maximus euismod vel sit amet diam. +Pellentesque et sodales turpis. +Etiam mattis, enim ac malesuada ornare, ante tellus mollis sem, eu accumsan augue enim sed turpis. +Quisque accumsan vitae velit et scelerisque. +Praesent non risus nec urna vestibulum viverra id id metus. +Integer eleifend, orci vel dictum feugiat, mi lectus consequat ante, ac faucibus odio nisl in ex. +Curabitur fermentum faucibus metus suscipit porta. +Suspendisse vel vestibulum diam. +In sed molestie quam. +Duis efficitur est ac turpis pulvinar, id malesuada tellus commodo. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Etiam cursus nibh vitae nisi tincidunt venenatis. + +Donec eget diam quis lacus accumsan viverra quis ac nulla. +Cras malesuada orci eget dolor luctus molestie. +Integer malesuada vestibulum ex, id convallis metus faucibus sed. +Sed turpis felis, commodo gravida pharetra et, placerat quis turpis. +Donec elit nunc, aliquam vel suscipit sit amet, vulputate in libero. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Donec congue metus eros, at pretium urna vehicula sed. +Etiam dictum risus sit amet condimentum accumsan. + +Ut elit sapien, tempus vitae ex sit amet, consequat convallis velit. +Curabitur quis convallis eros. +Cras finibus egestas dui, aliquam egestas dui mollis et. +Integer non risus turpis. +Praesent quis tincidunt nunc. +Proin tincidunt enim sit amet porttitor tempus. +Mauris pellentesque scelerisque elit fermentum gravida. +Curabitur dictum vulputate eros eget sodales. +Integer dictum urna tortor. +In hac habitasse platea dictumst. +Morbi ac arcu dapibus quam euismod elementum id at metus. +Fusce gravida accumsan tempor. +Pellentesque ac lacus porttitor, aliquam orci sit amet, condimentum nulla. +Aliquam et molestie felis, ac vehicula ex. + +Proin purus urna, dignissim ut vulputate id, finibus quis nunc. +Nullam pretium commodo magna et pretium. +Proin pulvinar quam ex, sit amet hendrerit tellus posuere ultricies. +Nam ultricies faucibus tortor id pretium. +Nam placerat, libero lacinia molestie iaculis, purus enim varius urna, vel egestas turpis urna nec libero. +Aliquam commodo tristique nibh. +Sed egestas eu tortor ut pulvinar. +Cras ligula lorem, porta eget fermentum et, cursus a velit. +In at congue leo, iaculis tincidunt neque. +Pellentesque tincidunt diam purus, vitae posuere libero fringilla sed. +Aenean sit amet tempor mauris. +Proin scelerisque erat eu varius tincidunt. +Quisque tempus nunc a maximus efficitur. +Duis magna quam, mollis id diam vel, hendrerit dictum ante. + +Mauris convallis felis neque, non blandit arcu accumsan sit amet. +Phasellus sit amet ex imperdiet, imperdiet elit in, faucibus erat. +Fusce rutrum nunc velit, at posuere metus commodo sit amet. +Maecenas sed lacinia tortor. +Aliquam id convallis arcu, id maximus tellus. +Cras sed accumsan nulla, vitae lacinia sem. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Phasellus ac vulputate velit. + +Sed ac tortor pretium nulla imperdiet ultricies id et quam. +Pellentesque congue, ante ac eleifend tempus, libero justo mollis massa, quis mollis lacus ex vel ante. +Aliquam vehicula felis nulla, et finibus velit imperdiet vitae. +Maecenas condimentum tortor nisi. +Integer sed finibus leo. +Quisque accumsan mi libero. +Vivamus hendrerit dolor vel erat venenatis, commodo condimentum metus iaculis. +Integer blandit mauris vitae orci semper efficitur. +Maecenas ullamcorper libero dolor, at dictum mauris laoreet nec. +Aliquam sed suscipit nibh. +In mollis vitae risus ac laoreet. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Cras consectetur iaculis dictum. +Donec ornare leo ac turpis semper, id hendrerit dolor semper. + +Phasellus ac erat velit. +Phasellus vulputate eleifend gravida. +Ut venenatis at elit quis placerat. +Donec molestie tortor eget ante placerat, sed dictum velit viverra. +Donec et lectus non nunc ultricies feugiat. +Aenean hendrerit sollicitudin dui molestie pulvinar. +Aenean varius ante non urna ultrices sagittis. +Proin massa elit, laoreet nec lectus vitae, convallis aliquet quam. +Praesent id vulputate felis. + +Curabitur bibendum enim erat. +Proin sagittis elementum lectus vel lobortis. +Integer aliquam sollicitudin nibh, sit amet aliquam dui faucibus eget. +Praesent diam leo, malesuada a purus ac, scelerisque fringilla magna. +Proin vulputate lacus ac eleifend tincidunt. +Duis in sagittis tortor. +Phasellus ultrices libero in odio porttitor consectetur. +Donec elementum neque in semper lobortis. +Praesent at felis felis. +Nullam ut condimentum tortor. +Nulla sed gravida tellus. +Aenean consectetur eget nulla eu blandit. +Sed est lectus, dignissim ut lorem nec, ornare faucibus nisl. +Donec leo arcu, molestie non aliquam sit amet, dignissim a massa. +Praesent lobortis massa non semper ornare. + +Aliquam viverra, dui et semper sodales, leo nunc sodales mi, eget posuere ex felis nec nulla. +Suspendisse hendrerit tincidunt nulla, id pulvinar leo posuere eget. +Morbi ut aliquam leo. +Ut interdum lacus lacus, et tincidunt neque facilisis ut. +Donec et facilisis sapien, quis accumsan metus. +Pellentesque aliquet dapibus odio sed ultricies. +Ut posuere dictum orci, in ultrices massa pharetra sed. +Donec feugiat eu tortor non aliquam. +Pellentesque laoreet lorem faucibus convallis egestas. +Nulla condimentum a augue vel malesuada. +Ut sagittis mauris fermentum odio fringilla vulputate. +Donec sem nisl, imperdiet quis nibh vitae, laoreet pulvinar nulla. + +Vestibulum non nulla vitae ligula gravida lobortis. +Pellentesque at ipsum vel odio finibus hendrerit sit amet ac augue. +Donec convallis sit amet libero a accumsan. +Sed vel metus mauris. +Nam nisl eros, laoreet in diam tempor, porta tincidunt felis. +Vivamus euismod tellus quis metus pellentesque, vitae eleifend nisl commodo. +Proin dignissim vestibulum lacus venenatis faucibus. +Nulla vulputate suscipit urna vel rutrum. +Vestibulum elit purus, facilisis ac ante quis, aliquam convallis libero. +Fusce vitae dolor eu purus tincidunt varius. +Duis arcu risus, congue vitae maximus et, sollicitudin quis dui. +Quisque eu dolor justo. +Duis vel tincidunt erat, a bibendum metus. +Duis eget magna lectus. +Nunc erat turpis, aliquet eu ante a, commodo pretium est. +Praesent ac egestas lectus. + +Phasellus lorem felis, aliquam eu pharetra ac, vehicula ut ligula. +Nulla convallis dui vitae ornare ultricies. +Vestibulum ut risus vel quam pulvinar volutpat. +Nunc accumsan lectus nec nisi dapibus dictum sed quis quam. +Cras ullamcorper augue sit amet hendrerit malesuada. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Nulla sem felis, finibus ac dui nec, luctus finibus sem. + +Suspendisse metus urna, auctor sed efficitur eu, dictum at nibh. +Morbi in ligula ac ex ultricies rutrum. +Donec euismod eu nisl in auctor. +Cras vitae nibh lobortis, ultrices ante at, pretium nunc. +Aliquam fringilla lacus eu elit efficitur accumsan. +Fusce cursus est odio, eu placerat mi eleifend non. +Mauris commodo quis ligula eu ullamcorper. +Nulla non purus interdum, ullamcorper metus nec, congue nisl. +Interdum et malesuada fames ac ante ipsum primis in faucibus. +Donec nec maximus dui. +Vestibulum ac metus iaculis ipsum volutpat scelerisque. +Mauris erat leo, lobortis ut magna sit amet, euismod ultricies ligula. +Duis et convallis quam, vel rutrum enim. + +Donec at dolor consectetur, feugiat massa ac, malesuada turpis. +Vestibulum volutpat, velit et porta auctor, est nibh consectetur est, eget accumsan dolor nulla eu elit. +Aenean nec sapien in orci mollis dapibus non non nunc. +Maecenas sodales nisl ac blandit facilisis. +Nunc quis leo ullamcorper, maximus sem non, iaculis leo. +Nunc nec tempor odio, vel rutrum neque. +Proin ut tortor semper sapien porttitor pellentesque sed id nulla. + +Donec pellentesque, augue ut elementum tempor, lacus sapien bibendum quam, tempor auctor tellus elit sed felis. +Aenean sodales nec arcu id imperdiet. +Curabitur tempor leo eget faucibus mattis. +Mauris pharetra, ex ut imperdiet dictum, risus elit efficitur elit, at commodo urna urna at turpis. +Morbi vitae erat at magna auctor auctor vel ac massa. +Donec neque ex, laoreet eget urna nec, mattis pretium lectus. +Praesent a nulla eros. + +Nunc non lacinia massa, vitae iaculis lacus. +Suspendisse potenti. +Suspendisse gravida tellus quis orci laoreet porttitor. +Ut at nulla ac nunc pretium venenatis a vitae orci. +Mauris tincidunt in nisi efficitur auctor. +Nulla eget porttitor libero, id egestas elit. +Aliquam erat volutpat. +Sed rhoncus in ipsum nec pulvinar. +Integer vitae neque augue. +Aliquam posuere diam sed neque efficitur volutpat. + +Praesent finibus metus lectus, eget porttitor justo dictum ac. +Sed malesuada vitae ex a varius. +Ut ex lacus, egestas fermentum ligula id, aliquet commodo odio. +Donec eget tortor id ligula bibendum porta. +Sed quis venenatis tortor. +Ut vehicula, mauris ac pellentesque rutrum, neque dolor imperdiet purus, non consectetur enim sapien eget est. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. +Cras lobortis mauris dui. +Suspendisse sed maximus ante. +Curabitur ac dui nec elit eleifend placerat et ac ipsum. + +In scelerisque nunc eget enim vestibulum, sed commodo velit efficitur. +Phasellus dignissim non est quis sodales. +Nullam nec diam non metus ultricies euismod sit amet sit amet magna. +Praesent imperdiet justo quis volutpat pulvinar. +Quisque justo leo, scelerisque sit amet nisl vitae, molestie placerat nulla. +Mauris vitae est consequat, feugiat nunc vel, iaculis lacus. +Etiam fermentum tempus sollicitudin. +Suspendisse finibus nibh sit amet est ornare finibus. +Vivamus fermentum vel odio sit amet tempor. +Maecenas molestie felis eu justo mattis, id ultrices eros finibus. +Pellentesque lobortis tincidunt interdum. +Curabitur in est eget velit lacinia pretium. +Vestibulum eu magna auctor, malesuada nibh at, lobortis nulla. +Cras convallis blandit elit sit amet faucibus. + +In viverra suscipit sem, et facilisis est consequat nec. +Aliquam erat volutpat. +Pellentesque aliquet efficitur laoreet. +Suspendisse nunc tellus, luctus in eleifend eget, placerat at tellus. +Aenean porta lectus et risus porttitor, id fermentum orci convallis. +Curabitur eleifend ex mauris, non iaculis orci tincidunt non orci aliquam. + + diff --git a/rust/src/main.rs b/rust/src/main.rs index ce11863..fc5c081 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -1,7 +1,5 @@ #![allow(dead_code, unused)] -use std::fs::read; - use chrono::{ DateTime, Local, @@ -42,21 +40,20 @@ use tokio::{ async fn main() -> anyhow::Result<()> { let listener = TcpListener::bind("127.0.0.1:9090").await?; - let file = fs::read("test.md").await?; + let file = fs::read("../lorem.md").await?; tokio::spawn(async move { - sleep(Duration::from_secs(2)).await; + sleep(Duration::from_secs(1)).await; let mut connection = TcpStream::connect("127.0.0.1:9090").await.unwrap(); - connection.write_all(&file[..]).await.unwrap(); + _ = send_file(&mut connection, file).await; }); - let mut read_buffer = [0u8; 2<<16]; match listener.accept().await { Ok((mut stream, address)) => { println!("accepted connection request from {}", address); - let size = stream.read(&mut read_buffer).await?; - fs::write("test-copy.md", &read_buffer[0..size]).await?; + let file = receive_file(&mut stream).await?; + fs::write("test-lorem.md", file).await?; } Err(error) => { println!("this is unexpected.. {}", error.to_string()); @@ -66,4 +63,67 @@ async fn main() -> anyhow::Result<()> { Ok(()) } +async fn receive_file(stream: &mut TcpStream) -> Result, anyhow::Error> { + const BUFFER_SIZE: usize = 4096; + let mut buffer = [0u8; BUFFER_SIZE]; + let mut index_counter: usize = 0; + let mut processing_buffer = Vec::::new(); + let mut file = Vec::::new(); + let mut size: usize = 0; + + loop { + let num_bytes = stream.read(&mut buffer[..]).await?; + processing_buffer.extend(&buffer[0..num_bytes]); + if 0 == index_counter { + size = usize::from_be_bytes(processing_buffer.drain(0..8).collect::>().try_into().unwrap()); + } else { + _ = processing_buffer.drain(0..8); + } + let block_size = usize::from_be_bytes(processing_buffer.drain(0..8).collect::>().try_into().unwrap()); + let index = usize::from_be_bytes(processing_buffer.drain(0..8).collect::>().try_into().unwrap()); + + if index_counter != index { + panic!("meh, counter = {index_counter}, index = {index}"); + } + + file.extend(processing_buffer.drain(0..block_size)); + + index_counter += 1; + if block_size >= size { + break; + } else { + size -= block_size; + } + } + + Ok(file) +} + +async fn send_file(stream: &mut TcpStream, mut file: Vec) -> Result<(), anyhow::Error> { + const BLOCK_SIZE: usize = 2048; + let size: usize = file.len(); + let mut remaining = size; + let mut index: usize = 0; + + while remaining > 0 { + let mut block = Vec::::new(); + let len = if remaining >= BLOCK_SIZE { + BLOCK_SIZE + } else { + remaining + }; + + block.extend(size.to_be_bytes()); + block.extend(len.to_be_bytes()); + block.extend(index.to_be_bytes()); + block.extend(file.drain(0..len)); + + stream.write(&block[..]).await?; + + remaining -= len; + index += 1; + } + + Ok(()) +}