Created
April 30, 2012 06:46
-
-
Save rustyoz/2556072 to your computer and use it in GitHub Desktop.
A compression algorithm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set a, text_uncompressed | |
set b, compress_to_here | |
JSR compress | |
SET A, compress_to_here | |
add b, 1 | |
jsr decompress | |
sub pc, 1 | |
;compress | |
;takes A as string start | |
;takes B as compressed data stream start. | |
;returns A as data streem length. | |
;returns B compressed data stream end. | |
; X - string pointer | |
; Y - data stream pointer | |
; I - nibble offset | |
; J - character offset | |
; Z - word buffer buffer | |
:compress | |
SET PUSH, X | |
SET PUSH, Y | |
SET PUSH, I | |
SET PUSH, J | |
SET PUSH, Z | |
SET PUSH, B | |
SET X, A ; set | |
SET Y, B | |
SET I, 0 ; clear registers | |
SET J, 0 | |
SET Z, 0 | |
:compress_loop | |
SET A, [X] | |
IFE A, 0 ; null character end compression | |
SET PC, compress_end | |
SET A, [compress_table+A] | |
SET PUSH, A | |
AND A, 0xf000 | |
SHR A, 12 | |
IFN A, J | |
JSR compress_charoffset | |
SET A, POP | |
AND A, 0x000f | |
SHL A, I ; shift by nibble offset | |
BOR Z, A ; add nibble to word buffer | |
ADD X, 1 ; we have finished passing a character from the string, so increment string pointer | |
ADD I, 0x4 | |
IFN I, 0x10 | |
SET PC, compress_loop | |
SET [Y], Z ; we have filled a word with compressed data, so write it. | |
SET Z, 0 ; clear word buffer | |
ADD Y, 1 | |
SET I, 0x0 ; reset nibble offset back to 0 | |
SET PC, compress_loop | |
:compress_charoffset | |
SET B, 0xf | |
SHL B, I ; shift by nibble offset | |
BOR Z, B ; add to word buffer | |
ADD I, 0x4 ; shift nibble offset | |
IFN I, 0x10 | |
SET PC, compress_charoffset1 ; if nibble offset is not 16bits continue to write new dictionary value to stream | |
SET [Y], Z ; if nibble offset is at 16bits word buffer is full, write word | |
SET I, 0x0 ;reset nibble offset | |
SET Z, 0 ;clear word buffer | |
ADD Y, 1 ; increment data stream pointer | |
:compress_charoffset1 | |
SHL A, I ; shift by nibble offset | |
BOR Z, A ; add to word buffer | |
ADD I, 0x4 ; shift nibble offset | |
IFN I, 0x10 | |
SET PC, POP ; if nibble offset is not 16bits continue on back to character passer | |
SET [Y], Z ; if nibble offset is at 16bits word buffer is full, write word | |
SET I, 0x0 ;reset nibble offset | |
SET Z, 0 ;clear word buffer | |
ADD Y, 1 ; increment data stream pointer | |
SET PC, POP | |
:compress_end | |
SET A, [compress_table+A] ;find null character | |
SET PUSH, A | |
AND A, 0xf000 | |
SHR A, 12 | |
IFN A, J | |
JSR compress_charoffset | |
SET A, POP | |
AND A, 0x000f | |
SHL A, I ; shift by nibble offset | |
BOR Z, A ; add nibble to word buffer | |
SET [Y], Z ; we have filled alast word with compressed data, so write it. | |
SET B, POP ; get back extraction start point | |
SET A, Y ; set a to end | |
SUB A, B ; sub start to get length | |
SET B, Y | |
SET Z, POP | |
SET J, POP | |
SET I, POP | |
SET Y, POP | |
SET X, POP | |
SET PC, POP | |
;decompress | |
;takes A as data stream start location | |
;takes B as extraction start location | |
;returns A as length of extracted string | |
;returns B as end of extrated string | |
:decompress | |
SET PUSH, X | |
SET PUSH, Y | |
SET PUSH, I | |
SET PUSH, J | |
SET PUSH, Z | |
SET PUSH, B | |
SET X, A ; set up pionters takes A as data stream pointer | |
SET Y, B ; takes b as extration start | |
SET I, 0 ; clear registers | |
SET J, 0 | |
SET Z, 0 | |
:decompress_loop | |
SET A, [X] ;set a to location word | |
SET B, 0xf ; | |
SHL B, I ; shift B by nibble offset | |
AND B, A ; extract nibble | |
SHR B, I ; shift B back | |
IFE B, 0xF | |
SET PC, decompress_charoffset | |
SET Z, J | |
ADD Z, B | |
SET Z, [Z] | |
IFE Z, 0 ; ascii esc found | |
SET PC, decompress_end ; end decompression | |
SET [Y], Z | |
ADD Y, 1 ; advance extraction pointer | |
ADD I, 0x4 ; move nibble offset | |
IFN I, 0x10 | |
SET PC, decompress_loop | |
ADD X, 1 ;advance next word | |
SET I, 0 ; set nibble offset to 0 | |
SET PC, decompress_loop | |
:decompress_charoffset | |
ADD I, 0x4 | |
IFE I, 0x10 | |
SET PC, decompress_charoffset_nw ; next word | |
SET B, 0xf ; | |
SHL B, I ; shift B by nibble offset | |
AND B, A ; extract nibble | |
SHR B, I ; shift B back | |
MUL B, 15 ; multiply offset by 15 | |
ADD B, decompress_table | |
SET J, B ; set charoffset | |
ADD I, 0x4 | |
IFN I, 0x10 | |
SET PC, decompress_loop | |
ADD X, 1 ;advance next word | |
SET I, 0 ; set nibble offset to 0 | |
SET PC, decompress_loop | |
:decompress_charoffset_nw | |
ADD X, 1 ; advance to next word | |
SET I, 0 ; set nibble offset | |
SET A, [X] ;set a to location word | |
SET B, 0xf ; | |
AND B, A ; extract nibble | |
MUL B, 15 ; multiply offset by 15 | |
ADD B, decompress_table | |
SET J, B ; set charoffset | |
SET I, 0x4 | |
SET PC, decompress_loop | |
:decompress_end | |
SET [Y], 0 ; add null pointer to end of text. | |
SET B, POP ; get original extration point | |
SUB Y, B ; get length | |
SET A, Y ;return length | |
ADD B, A | |
SET Z, POP | |
SET J, POP | |
SET I, POP | |
SET Y, POP | |
SET X, POP | |
SET PC, POP | |
:compress_table | |
dat 0x7000 | |
dat 0x7001 | |
dat 0x7002 | |
dat 0x7003 | |
dat 0x7004 | |
dat 0x7005 | |
dat 0x7006 | |
dat 0x7007 | |
dat 0x7008 | |
dat 0x500E | |
dat 0x7009 | |
dat 0x700A | |
dat 0x700B | |
dat 0x700C | |
dat 0x700D | |
dat 0x700E | |
dat 0x8000 | |
dat 0x8001 | |
dat 0x8002 | |
dat 0x8003 | |
dat 0x8004 | |
dat 0x8005 | |
dat 0x8006 | |
dat 0x6008 | |
dat 0x8007 | |
dat 0x8008 | |
dat 0x8009 | |
dat 0x800A | |
dat 0x800B | |
dat 0x800C | |
dat 0x800D | |
dat 0x800E | |
dat 0x0000 | |
dat 0x500D | |
dat 0x200D | |
dat 0x5007 | |
dat 0x5000 | |
dat 0x5008 | |
dat 0x5005 | |
dat 0x200C | |
dat 0x3001 | |
dat 0x3000 | |
dat 0x400D | |
dat 0x5006 | |
dat 0x1009 | |
dat 0x1003 | |
dat 0x1002 | |
dat 0x300A | |
dat 0x100C | |
dat 0x100D | |
dat 0x2004 | |
dat 0x3006 | |
dat 0x300E | |
dat 0x3009 | |
dat 0x4004 | |
dat 0x4006 | |
dat 0x4005 | |
dat 0x4007 | |
dat 0x100E | |
dat 0x4002 | |
dat 0x4001 | |
dat 0x5004 | |
dat 0x4000 | |
dat 0x300B | |
dat 0x500C | |
dat 0x2007 | |
dat 0x3002 | |
dat 0x2001 | |
dat 0x2006 | |
dat 0x2008 | |
dat 0x300D | |
dat 0x3005 | |
dat 0x200E | |
dat 0x2005 | |
dat 0x3008 | |
dat 0x400C | |
dat 0x300C | |
dat 0x2002 | |
dat 0x3003 | |
dat 0x3007 | |
dat 0x2009 | |
dat 0x5002 | |
dat 0x200B | |
dat 0x2000 | |
dat 0x2003 | |
dat 0x400A | |
dat 0x4008 | |
dat 0x200A | |
dat 0x5001 | |
dat 0x5003 | |
dat 0x500B | |
dat 0x500A | |
dat 0x6002 | |
dat 0x5009 | |
dat 0x6006 | |
dat 0x4003 | |
dat 0x6004 | |
dat 0x0004 | |
dat 0x1007 | |
dat 0x000C | |
dat 0x000B | |
dat 0x0001 | |
dat 0x1004 | |
dat 0x1000 | |
dat 0x000A | |
dat 0x0006 | |
dat 0x4009 | |
dat 0x100A | |
dat 0x0009 | |
dat 0x000E | |
dat 0x0005 | |
dat 0x0003 | |
dat 0x1001 | |
dat 0x400B | |
dat 0x0008 | |
dat 0x0007 | |
dat 0x0002 | |
dat 0x000D | |
dat 0x1008 | |
dat 0x1005 | |
dat 0x3004 | |
dat 0x1006 | |
dat 0x400E | |
dat 0x6000 | |
dat 0x6005 | |
dat 0x6001 | |
dat 0x6007 | |
dat 0x9000 | |
dat 0x9001 | |
dat 0x9002 | |
dat 0x9003 | |
dat 0x6009 | |
dat 0x9004 | |
dat 0x9005 | |
dat 0x9006 | |
dat 0x9007 | |
dat 0x9008 | |
dat 0x9009 | |
dat 0x900A | |
dat 0x900B | |
dat 0x900C | |
dat 0x900D | |
dat 0x900E | |
dat 0xA000 | |
dat 0xA001 | |
dat 0xA002 | |
dat 0xA003 | |
dat 0xA004 | |
dat 0xA005 | |
dat 0x100B | |
dat 0xA006 | |
dat 0xA007 | |
dat 0xA008 | |
dat 0xA009 | |
dat 0xA00A | |
dat 0xA00B | |
dat 0xA00C | |
dat 0xA00D | |
dat 0xA00E | |
dat 0xB000 | |
dat 0xB001 | |
dat 0xB002 | |
dat 0xB003 | |
dat 0xB004 | |
dat 0xB005 | |
dat 0xB006 | |
dat 0xB007 | |
dat 0xB008 | |
dat 0xB009 | |
dat 0xB00A | |
dat 0xB00B | |
dat 0xB00C | |
dat 0xB00D | |
dat 0xB00E | |
dat 0xC000 | |
dat 0xC001 | |
dat 0xC002 | |
dat 0xC003 | |
dat 0xC004 | |
dat 0xC005 | |
dat 0xC006 | |
dat 0xC007 | |
dat 0xC008 | |
dat 0x6003 | |
dat 0xC009 | |
dat 0xC00A | |
dat 0xC00B | |
dat 0xC00C | |
dat 0xC00D | |
dat 0xC00E | |
dat 0xD000 | |
dat 0xD001 | |
dat 0xD004 | |
dat 0xD005 | |
dat 0xD006 | |
dat 0xD007 | |
dat 0xD008 | |
dat 0xD009 | |
dat 0xD00A | |
dat 0xD00B | |
dat 0xD00C | |
dat 0xD00D | |
dat 0xD00E | |
dat 0xE000 | |
dat 0xE001 | |
dat 0xE002 | |
dat 0xE003 | |
dat 0xE004 | |
dat 0xE005 | |
dat 0xE006 | |
dat 0xE007 | |
dat 0xE008 | |
dat 0xE009 | |
dat 0xE00A | |
dat 0xE00B | |
dat 0xD002 | |
dat 0xE00C | |
dat 0xE00D | |
dat 0xE00E | |
dat 0xF000 | |
dat 0xF001 | |
dat 0xF002 | |
dat 0xF003 | |
dat 0x600A | |
dat 0xF004 | |
dat 0xF005 | |
dat 0x600B | |
dat 0xF006 | |
dat 0xF007 | |
dat 0x600C | |
dat 0x600D | |
dat 0xF008 | |
dat 0xF009 | |
dat 0xF00A | |
dat 0xF00B | |
dat 0xF00C | |
dat 0xF00D | |
dat 0x600E | |
dat 0xF00E | |
dat 0xD003 | |
:decompress_table | |
dat 0x0020 | |
dat 0x0065 | |
dat 0x0074 | |
dat 0x006F | |
dat 0x0061 | |
dat 0x006E | |
dat 0x0069 | |
dat 0x0073 | |
dat 0x0072 | |
dat 0x006C | |
dat 0x0068 | |
dat 0x0064 | |
dat 0x0063 | |
dat 0x0075 | |
dat 0x006D | |
dat 0x0067 | |
dat 0x0070 | |
dat 0x002E | |
dat 0x002D | |
dat 0x0066 | |
dat 0x0077 | |
dat 0x0079 | |
dat 0x0062 | |
dat 0x0076 | |
dat 0x002C | |
dat 0x006B | |
dat 0x0095 | |
dat 0x0030 | |
dat 0x0031 | |
dat 0x003A | |
dat 0x0053 | |
dat 0x0043 | |
dat 0x004D | |
dat 0x0054 | |
dat 0x0032 | |
dat 0x0049 | |
dat 0x0044 | |
dat 0x0041 | |
dat 0x0045 | |
dat 0x0050 | |
dat 0x0057 | |
dat 0x0052 | |
dat 0x0027 | |
dat 0x0022 | |
dat 0x0048 | |
dat 0x0029 | |
dat 0x0028 | |
dat 0x0042 | |
dat 0x004E | |
dat 0x0078 | |
dat 0x0047 | |
dat 0x0033 | |
dat 0x004F | |
dat 0x004A | |
dat 0x0035 | |
dat 0x002F | |
dat 0x003F | |
dat 0x004C | |
dat 0x0046 | |
dat 0x0034 | |
dat 0x003E | |
dat 0x003C | |
dat 0x003B | |
dat 0x005F | |
dat 0x0036 | |
dat 0x0038 | |
dat 0x0037 | |
dat 0x0039 | |
dat 0x0056 | |
dat 0x006A | |
dat 0x0055 | |
dat 0x0071 | |
dat 0x004B | |
dat 0x002A | |
dat 0x007A | |
dat 0x0024 | |
dat 0x0058 | |
dat 0x0051 | |
dat 0x0059 | |
dat 0x003D | |
dat 0x0026 | |
dat 0x002B | |
dat 0x0023 | |
dat 0x0025 | |
dat 0x005D | |
dat 0x005B | |
dat 0x005A | |
dat 0x0040 | |
dat 0x0021 | |
dat 0x0009 | |
dat 0x007B | |
dat 0x007D | |
dat 0x005C | |
dat 0x00B7 | |
dat 0x0060 | |
dat 0x007C | |
dat 0x005E | |
dat 0x007E | |
dat 0x0017 | |
dat 0x0083 | |
dat 0x00DF | |
dat 0x00E2 | |
dat 0x00E5 | |
dat 0x00E6 | |
dat 0x00ED | |
dat 0x0000 | |
dat 0x0001 | |
dat 0x0002 | |
dat 0x0003 | |
dat 0x0004 | |
dat 0x0005 | |
dat 0x0006 | |
dat 0x0007 | |
dat 0x0008 | |
dat 0x000A | |
dat 0x000B | |
dat 0x000C | |
dat 0x000D | |
dat 0x000E | |
dat 0x000F | |
dat 0x0010 | |
dat 0x0011 | |
dat 0x0012 | |
dat 0x0013 | |
dat 0x0014 | |
dat 0x0015 | |
dat 0x0016 | |
dat 0x0018 | |
dat 0x0019 | |
dat 0x001A | |
dat 0x001B | |
dat 0x001C | |
dat 0x001D | |
dat 0x001E | |
dat 0x001F | |
dat 0x007F | |
dat 0x0080 | |
dat 0x0081 | |
dat 0x0082 | |
dat 0x0084 | |
dat 0x0085 | |
dat 0x0086 | |
dat 0x0087 | |
dat 0x0088 | |
dat 0x0089 | |
dat 0x008A | |
dat 0x008B | |
dat 0x008C | |
dat 0x008D | |
dat 0x008E | |
dat 0x008F | |
dat 0x0090 | |
dat 0x0091 | |
dat 0x0092 | |
dat 0x0093 | |
dat 0x0094 | |
dat 0x0096 | |
dat 0x0097 | |
dat 0x0098 | |
dat 0x0099 | |
dat 0x009A | |
dat 0x009B | |
dat 0x009C | |
dat 0x009D | |
dat 0x009E | |
dat 0x009F | |
dat 0x00A0 | |
dat 0x00A1 | |
dat 0x00A2 | |
dat 0x00A3 | |
dat 0x00A4 | |
dat 0x00A5 | |
dat 0x00A6 | |
dat 0x00A7 | |
dat 0x00A8 | |
dat 0x00A9 | |
dat 0x00AA | |
dat 0x00AB | |
dat 0x00AC | |
dat 0x00AD | |
dat 0x00AE | |
dat 0x00AF | |
dat 0x00B0 | |
dat 0x00B1 | |
dat 0x00B2 | |
dat 0x00B3 | |
dat 0x00B4 | |
dat 0x00B5 | |
dat 0x00B6 | |
dat 0x00B8 | |
dat 0x00B9 | |
dat 0x00BA | |
dat 0x00BB | |
dat 0x00BC | |
dat 0x00BD | |
dat 0x00BE | |
dat 0x00BF | |
dat 0x00D7 | |
dat 0x00F7 | |
dat 0x00C0 | |
dat 0x00C1 | |
dat 0x00C2 | |
dat 0x00C3 | |
dat 0x00C4 | |
dat 0x00C5 | |
dat 0x00C6 | |
dat 0x00C7 | |
dat 0x00C8 | |
dat 0x00C9 | |
dat 0x00CA | |
dat 0x00CB | |
dat 0x00CC | |
dat 0x00CD | |
dat 0x00CE | |
dat 0x00CF | |
dat 0x00D0 | |
dat 0x00D1 | |
dat 0x00D2 | |
dat 0x00D3 | |
dat 0x00D4 | |
dat 0x00D5 | |
dat 0x00D6 | |
dat 0x00D8 | |
dat 0x00D9 | |
dat 0x00DA | |
dat 0x00DB | |
dat 0x00DC | |
dat 0x00DD | |
dat 0x00DE | |
dat 0x00E0 | |
dat 0x00E1 | |
dat 0x00E3 | |
dat 0x00E4 | |
dat 0x00E7 | |
dat 0x00E8 | |
dat 0x00E9 | |
dat 0x00EA | |
dat 0x00EB | |
dat 0x00EC | |
dat 0x00EE | |
:text_uncompressed | |
dat "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ultricies tortor eu leo sagittis id elementum mi vulputate. Vestibulum sit amet tortor tortor, sit amet molestie tellus. Pellentesque tellus est, suscipit eget posuere nec, dapibus porttitor nibh. Duis ac enim vel lectus faucibus tempus. Cras sem nisl, consectetur id malesuada non, congue sit amet elit. Proin tempus neque non augue faucibus vel egestas libero blandit. Pellentesque volutpat ullamcorper erat, adipiscing sodales metus viverra vel. Etiam aliquam faucibus dui, vitae laoreet purus lobortis nec. Vestibulum porta dictum pulvinar. Phasellus semper euismod est a faucibus. In libero diam, consequat at ornare quis, lacinia vitae nunc. Vivamus nec fringilla elit. Aliquam a lectus in lorem laoreet lacinia. Morbi quis pulvinar massa. Maecenas vehicula velit eget leo euismod pellentesque. Phasellus lobortis vehicula scelerisque. Nulla suscipit luctus porta. Pellentesque vestibulum, tellus nec egestas elementum, nulla erat ornare nibh, sit amet egestas nunc ante nec nunc. Pellentesque at risus erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris ullamcorper felis sed ante blandit blandit. Curabitur laoreet augue quis augue gravida ac tempus ligula convallis. Donec laoreet tortor et sem volutpat rutrum. Donec aliquam purus eget enim lacinia vitae euismod enim dictum. Nullam sem leo, feugiat nec dictum et, condimentum vel quam. Aenean venenatis augue eu tellus viverra imperdiet. Sed luctus, magna sed pellentesque tempus, odio sapien ultrices augue, et suscipit nisi erat a elit. Suspendisse est lectus, vehicula in sagittis ac, lacinia id massa. Pellentesque auctor, nunc imperdiet congue dictum, enim nulla placerat tortor, a molestie dolor purus nec quam. Ut eu rhoncus velit. Vestibulum neque mi, condimentum ut feugiat tincidunt, lobortis non orci. Maecenas consequat, felis sit amet facilisis commodo, arcu nisi ultrices urna, vel bibendum est ligula vel dui. Pellentesque quis adipiscing sapien. Donec adipiscing convallis ligula in dictum. Donec ac scelerisque nulla. In leo dui, imperdiet a porttitor ac, convallis id risus. Vivamus a ornare leo. Maecenas ligula augue, bibendum vitae dapibus sit amet, cursus vel diam. Pellentesque tempor, leo nec semper varius, ipsum velit pretium lorem, vitae malesuada enim libero sed dui. Maecenas tempus sem arcu. Proin sed diam in erat cursus accumsan. Ut aliquam, mauris et imperdiet volutpat, tortor lacus lobortis massa, at vehicula dui ante bibendum elit. Suspendisse a dui leo, quis interdum mi. Pellentesque augue est, dignissim nec vulputate ac, blandit mattis lectus. Proin imperdiet orci vitae velit accumsan tempor pharetra ante aliquet. Quisque mollis lectus nec arcu semper aliquet. Etiam vestibulum odio ullamcorper turpis dictum auctor. Ut sem dolor, elementum vitae ultricies in, aliquam eget ante. Sed quis euismod lorem. Aenean metus dui, dictum vel ultricies in, luctus a sem. Integer aliquam nibh a neque mattis et suscipit ante gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas rhoncus diam erat, id pellentesque elit. Fusce et nisl placerat urna mollis adipiscing. Donec congue orci massa, sed sollicitudin ante. Curabitur posuere nisl eu augue imperdiet iaculis. Nullam justo nunc, sagittis nec mattis at, cursus et libero. Duis at diam metus. Nullam elementum, dolor sit amet suscipit pulvinar, ante mi vestibulum purus, et porta risus tellus a metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse potenti. Nulla et nunc est, vel pellentesque purus. Vestibulum mollis pretium metus vel blandit. Etiam eu risus mi, ut aliquet mauris. Aliquam lacinia, urna sit amet semper egestas, justo ante mollis arcu, vitae iaculis dui nibh vitae dolor. Praesent ac arcu metus, sit amet sagittis quam. Curabitur est magna, posuere sit amet congue pulvinar, lacinia in tellus. Morbi sed lacus quis sem tristique pulvinar eget eget ligula. Donec tellus odio, sagittis nec interdum et, aliquam quis arcu. Phasellus ac eleifend orci. In commodo venenatis tortor, ut tempus risus feugiat congue. Cras pharetra ligula vel dolor aliquet nec adipiscing eros pretium. Nam sollicitudin libero eget eros aliquet a adipiscing elit posuere. Nunc adipiscing ornare est quis bibendum. Proin at felis eros. Nunc mi ipsum, ullamcorper sit amet congue id, gravida nec mi. Fusce tincidunt ligula in massa posuere fringilla. Aliquam sagittis erat in dolor commodo viverra. In hac habitasse platea dictumst. Etiam quis nulla augue. Ut nulla ipsum, auctor ut luctus sed, euismod sed ligula. Donec aliquet, ipsum ut iaculis vestibulum, mi purus venenatis metus, id porttitor metus mauris et elit. Vestibulum id ante vitae dolor lacinia sodales. Vestibulum sit amet felis nulla, non hendrerit eros. Integer lectus enim, blandit non rhoncus accumsan, dignissim eu leo. Proin vel purus ac leo varius placerat. Nam aliquam, risus sed tristique tincidunt, quam nisl suscipit erat, vitae pulvinar nisi nibh quis justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce elementum tincidunt imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque congue dapibus magna, et tristique arcu accumsan eget. Proin tristique adipiscing metus, sed elementum nibh aliquet eget. Nullam ullamcorper ligula sed tortor condimentum in hendrerit nulla adipiscing. Sed erat enim, volutpat sit amet cursus et, ultricies placerat urna. Mauris eget tellus libero. Nam rhoncus dapibus purus in egestas. Duis turpis magna, mattis vitae iaculis nec, fermentum a risus. Pellentesque dapibus nunc ut dui bibendum vel egestas sem bibendum. Aenean aliquam ultrices eros, id pretium arcu consectetur et. Cras nec nulla a nisl malesuada dapibus. Phasellus porta sodales felis a hendrerit. Sed ut lorem vel massa consectetur laoreet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet est turpis. Sed vel dignissim nisi. Vestibulum ultrices facilisis quam sit amet vestibulum. Quisque congue tincidunt ipsum vel condimentum. Curabitur eleifend dictum rutrum. Donec aliquet condimentum dolor porttitor vestibulum. Curabitur mattis viverra velit vitae viverra. Maecenas est orci, varius non lobortis eget, vulputate a nulla. Pellentesque elementum tempus nibh sed placerat. Duis quis leo magna, nec tincidunt ante. Aliquam felis dui, elementum id adipiscing sed, fringilla eu eros. Proin quis urna ligula. Nulla sit amet erat sodales lectus ullamcorper vehicula eget quis enim. Mauris eu turpis sapien, quis sollicitudin turpis. Nulla ullamcorper dui id augue cursus vel adipiscing tortor volutpat. Pellentesque in sapien massa, ac luctus eros. Sed non augue in lectus bibendum eleifend nec eget nunc. Donec in nulla purus. Integer lacinia sagittis blandit. Nunc venenatis elementum velit, in ultricies turpis pretium eu. Morbi nec mi ut purus suscipit convallis ut id lorem. Nulla eu risus magna. Nunc consequat sagittis magna in pulvinar. Donec sodales pellentesque ullamcorper. Nulla rutrum hendrerit elementum. Vivamus lacus justo, pulvinar ut rutrum nec, imperdiet cursus purus. Ut consequat sagittis mi vel dapibus. Phasellus accumsan, enim nec ullamcorper congue, nunc mauris pulvinar erat, vel cursus arcu felis sit amet erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ac sapien sit amet leo gravida dapibus nec sed tellus. Cras velit mauris, varius non interdum id, eleifend ac libero. Vestibulum nisl elit, tincidunt quis mollis eget, vestibulum eget nunc. Duis eget odio urna, id venenatis neque. Suspendisse porta dui condimentum libero ultrices egestas. Sed pellentesque, eros vel varius malesuada, justo magna rutrum erat, at facilisis nunc massa sit amet sapien. Donec metus dolor, aliquet sit amet vulputate eu, porttitor nec lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur ornare commodo ipsum ut eleifend. Nam laoreet leo id sapien gravida pellentesque. Integer augue mi, adipiscing eget aliquet a, venenatis vel erat. Sed feugiat tincidunt turpis a luctus. Duis luctus ante et purus commodo blandit. Donec ac nunc quam. Donec sapien mauris, molestie sit amet condimentum non, tempor ac justo. Aliquam mollis leo in sem mollis interdum. Sed fermentum scelerisque odio, non rutrum magna vehicula interdum. Aenean sagittis, purus vitae auctor eleifend, nisl odio euismod odio, at suscipit tortor ante et leo. Phasellus venenatis lorem ac neque dignissim ultrices. Suspendisse blandit adipiscing tellus, id consectetur dolor auctor a. Vivamus sollicitudin sollicitudin risus, vitae vehicula nisl semper vel. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris aliquet vulputate leo quis molestie. Proin aliquet mollis mi, sed tincidunt quam malesuada sit amet. Quisque ipsum orci, bibendum eget suscipit vel, scelerisque ut nulla. Phasellus porta, enim quis luctus blandit, eros neque tempus orci, rutrum ultrices nisi elit sed nisl. In non sem ultrices elit accumsan mattis ut vel dui. Maecenas nec mi erat. Sed et elit id dolor suscipit venenatis id ac magna. Praesent sagittis laoreet risus, ac ultrices lacus sodales eu. Nunc augue augue, ullamcorper ut tristique et, iaculis in tortor. Phasellus ultrices odio quis urna mollis imperdiet nec at magna. Aliquam id justo at libero porta volutpat. Mauris vitae purus molestie lorem ullamcorper pulvinar. Donec luctus urna elit. Donec consectetur, metus id ultrices iaculis, mauris est pretium orci, ac rutrum lacus nibh in dolor. Vestibulum eu augue id magna adipiscing ullamcorper. In hac habitasse platea dictumst. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris ligula libero, convallis in ullamcorper quis, euismod in enim. Cras iaculis volutpat porta. Praesent non faucibus tortor. In hac habitasse platea dictumst. Duis posuere egestas varius. Aliquam non sem ut ante tincidunt varius. Fusce sit amet mauris nec ante pharetra fermentum ut sit amet felis. Mauris erat enim, sagittis nec molestie at, sagittis et nisl. Aliquam faucibus nunc a libero pharetra mollis. Sed risus eros, ornare eu tempus id, accumsan at lacus. Sed gravida euismod cursus. Mauris ac erat non tellus aliquet mattis. Nunc eu leo ligula. Phasellus vel quam massa, et tempus enim. Mauris tincidunt imperdiet risus sed ullamcorper. Phasellus mollis ultrices egestas. Nullam metus augue, tristique eu sagittis et, feugiat vitae felis. Proin malesuada commodo velit in malesuada. Nam ut commodo eros. Vestibulum arcu augue, lacinia ut laoreet a, accumsan et risus. Proin ultrices lorem a nunc placerat gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc luctus tortor ac ligula faucibus ac feugiat lorem tempor. Ut vitae purus magna. Donec molestie enim at nibh rutrum tincidunt. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis nec massa ipsum, eu venenatis augue. Sed sit amet turpis sit amet ligula malesuada euismod. Maecenas nec tellus quis turpis bibendum blandit. Vestibulum ornare, velit eu tempus congue, risus metus ultricies neque, sit amet semper leo nunc id tortor. Sed id orci erat, a cursus massa. Sed commodo tempus lectus, a sodales odio vehicula nec. Aenean nec neque eu elit condimentum ultricies id vel ipsum. Nunc ornare, lacus non eleifend feugiat, lorem diam congue nisi, at sodales tellus nibh et mi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam congue, eros non imperdiet volutpat, sapien augue gravida ante, at suscipit mauris eros nec mauris. Suspendisse potenti. Nullam iaculis vestibulum eros. Maecenas sit amet quam et risus lacinia ultricies et vitae erat. Fusce est dui, laoreet in tincidunt sit amet, cursus eget est. Aenean eu neque leo, ac aliquam orci. Sed rhoncus dui vel erat semper at suscipit augue tempus. Suspendisse nec arcu eu nulla pretium consequat. Fusce neque nisi, vehicula at gravida et, varius ut nulla. In hac habitasse platea dictumst. Donec id tellus in erat ultrices bibendum. Praesent nibh purus, cursus vel volutpat eu, ultrices quis lectus. Phasellus diam ipsum, fringilla non mollis et, lobortis posuere urna. Aliquam elementum arcu ac nisl consectetur ut tincidunt purus pellentesque. Ut sollicitudin tortor ut leo viverra consectetur. Maecenas ac felis nisi. Sed elementum molestie luctus. Maecenas eget orci sed libero tincidunt pharetra ut sed nulla. Aliquam convallis quam sit amet urna bibendum scelerisque. Vivamus sodales malesuada massa in consequat. Aliquam ut nibh nec magna blandit varius. Quisque vel sodales tellus. Nulla quis ullamcorper purus. Ut sollicitudin dolor et neque commodo vitae vehicula felis tempor. Morbi mauris arcu, scelerisque vitae pellentesque ut, porta ac nulla. Etiam sit amet sem a erat mollis ultrices. Maecenas quis felis quis libero feugiat lacinia non sit amet nibh. Ut egestas aliquam velit, eu tincidunt lacus sollicitudin sed. Aenean gravida massa quis ligula ultrices et condimentum orci volutpat. Quisque viverra ipsum et lectus lobortis a porta nunc tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tempus neque vitae libero ultrices elementum sit amet quis erat. In semper ultrices nibh at aliquet. Cras ultricies imperdiet felis, at feugiat risus lobortis sit amet. Praesent scelerisque dolor ac ligula bibendum nec varius libero varius. Praesent magna diam, laoreet quis porta nec, posuere in quam. Nunc at nibh interdum purus mollis vestibulum. Phasellus scelerisque consequat mattis. Ut sit amet urna at urna semper faucibus in nec libero. Integer ut sem urna, sed auctor erat. Donec et metus augue. Nullam at nunc velit. Praesent viverra sagittis enim, quis cursus nulla mollis a. Integer eleifend fringilla augue eu ornare. Sed eleifend, mi nec vestibulum porttitor, lacus elit euismod augue, in mollis sapien risus luctus urna. Ut vitae mi at nibh hendrerit porttitor at sed ligula. Praesent nec adipiscing arcu. Ut ornare pellentesque arcu, vel bibendum metus lobortis nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi purus urna, interdum vel suscipit eu, egestas at dui. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel tortor neque. Donec at pulvinar mi. Curabitur vel nisi urna. Donec eget nisl purus. Phasellus a congue arcu. In id augue risus. Sed sagittis sapien a dui pulvinar ut fringilla diam vestibulum. Praesent non mi vel purus convallis rutrum. Quisque laoreet molestie mollis. Proin posuere sem sit amet elit sagittis mollis pretium quam pellentesque. Sed ut viverra lacus. Nam tincidunt sollicitudin magna sed auctor. Mauris rutrum convallis semper. Cras adipiscing semper feugiat. Aliquam nec magna augue. Donec ut augue dolor, in porttitor nunc. Integer iaculis arcu quis mi facilisis feugiat dapibus elit condimentum. Nam mi turpis, varius vel lobortis sit amet, posuere ut neque. Suspendisse et lacinia justo. Nulla vitae eros odio, sit amet scelerisque leo. Proin eget ante quam, nec posuere orci. Integer non rhoncus leo. Praesent vel nisi vel nisl tempor varius ut quis quam. Duis fermentum eleifend consectetur. Suspendisse urna elit, eleifend a eleifend sed, faucibus eget justo. Curabitur suscipit semper ipsum, id sollicitudin leo gravida ullamcorper. Suspendisse potenti. Duis luctus lacus dui. Nunc non tellus massa. Nullam luctus ullamcorper nisi eget pulvinar. In bibendum condimentum quam, at hendrerit metus molestie et. Nullam posuere dolor quis augue sodales quis vulputate risus scelerisque. Phasellus vel augue leo. In a iaculis lacus. In consectetur faucibus commodo. Mauris diam urna, lacinia et feugiat quis, commodo non ante. Quisque vestibulum turpis ac velit placerat feugiat. Proin aliquam lacus eget odio tristique non ultricies urna gravida. Mauris sit amet dolor nisl. Nullam at nisi sed justo porttitor consectetur quis sit amet dui. Nunc interdum, nulla eu egestas rhoncus, lectus libero tincidunt nisi, eget bibendum odio libero vitae risus. Phasellus adipiscing bibendum laoreet. Nulla tempor felis in ipsum viverra condimentum. Duis laoreet eleifend leo, in laoreet purus commodo ut. Donec justo urna, varius eu porta vel, gravida vitae lorem. Nulla sed nibh dui. In hac habitasse platea dictumst. Quisque convallis arcu vel nunc gravida ornare. Morbi luctus laoreet lacinia. Pellentesque et lorem quis ante tincidunt suscipit. Vestibulum iaculis metus non nunc mattis sit amet pretium magna facilisis. Proin ullamcorper justo sem, vel rutrum nisl. Sed eros felis, posuere et mattis sit amet, vehicula in mauris. Nullam elit eros, cursus in iaculis viverra, cursus id urna. Cras sit amet dolor elit, quis rhoncus turpis. Integer et augue odio, quis semper eros. Etiam faucibus ligula a sapien pretium lacinia. Proin tempus neque placerat elit accumsan quis ultrices enim dignissim. Nulla facilisi. Fusce aliquam imperdiet diam. Nullam posuere sollicitudin ante, non posuere risus volutpat eu. Donec mauris arcu, tincidunt sit amet varius ac, pretium et leo. Aliquam porta pretium elit non vehicula. Mauris nec nisl mauris. Fusce lorem arcu, consectetur sit amet sodales bibendum, volutpat et lacus. Aenean tristique diam ac urna scelerisque feugiat. Vestibulum consectetur convallis justo, ac semper libero blandit sed. Quisque ultricies accumsan turpis in bibendum. Cras tristique fermentum lacus quis posuere. Etiam nisl velit, adipiscing in eleifend non, porta id justo. Cras vel mi ut est dapibus vehicula. In fermentum enim at nunc placerat rhoncus. Quisque nulla metus, pretium ac aliquam ut, vulputate quis ipsum. Nam a justo et ligula elementum porta. Curabitur gravida, quam et ullamcorper commodo, metus enim egestas diam, eu vulputate risus tortor non nulla. Suspendisse potenti. Suspendisse congue egestas nunc eget iaculis. Nulla facilisi. Curabitur tempus fringilla purus quis imperdiet. Sed malesuada libero sed neque sodales blandit. Vestibulum iaculis vehicula rutrum. Sed tempus augue vitae massa volutpat sed convallis libero porttitor. Nulla facilisi. Phasellus tristique dui non justo porttitor rutrum. Vestibulum egestas tortor sit amet tellus semper aliquet. Quisque feugiat hendrerit lacus, non sodales eros hendrerit vitae. Cras interdum odio egestas quam consectetur tempor. Suspendisse potenti. Donec lorem ipsum, blandit fermentum auctor eget, porta in justo. Praesent est ipsum, viverra in blandit et, hendrerit id urna. Maecenas scelerisque, arcu eu ornare blandit, turpis ipsum pulvinar nulla, a consequat metus augue ut felis. Aliquam non lacus lorem, at malesuada est. Morbi pretium accumsan convallis. Fusce tempor luctus eros vel lobortis. In hac habitasse platea dictumst. Donec urna mauris, posuere a fermentum vitae, lobortis id massa. Morbi fringilla ultricies sem ac sodales. Nulla dolor felis, bibendum vel eleifend nec, interdum at metus. Etiam sollicitudin lacus non sem interdum pretium imperdiet nisl pretium. Nullam eu turpis eu enim tincidunt pulvinar at vitae dolor. Proin vitae massa eget nisi tincidunt ornare. Pellentesque congue purus id quam venenatis hendrerit. Fusce et ante tellus, non placerat est. Fusce scelerisque, diam non bibendum iaculis, elit arcu elementum magna, id euismod mauris nisi id libero. Sed eget lorem lorem, ac convallis lectus. Vivamus vehicula placerat sem, vel ullamcorper nisi euismod et. Aliquam mollis tellus mi, a eleifend nisi. Phasellus congue pulvinar luctus. Fusce velit metus, dapibus sit amet suscipit vel, pellentesque eu sapien. Curabitur auctor, ipsum ut adipiscing placerat, leo purus euismod augue, eget interdum purus neque vel massa. In sed elit risus, vitae pharetra risus. Aliquam venenatis tellus non risus luctus at iaculis lorem ultrices. Integer fringilla est sed erat mollis tristique. Sed egestas lacinia eros, ut blandit enim semper egestas. Nulla ac augue dolor. Ut aliquam dui vel lacus hendrerit interdum accumsan arcu pretium. Nulla placerat orci vitae ligula sollicitudin consequat. Integer lacus erat, sagittis pretium aliquam lacinia, luctus et velit. Morbi odio dui, mattis vel vehicula eget, blandit nec justo. Duis mattis dolor ac turpis dictum interdum et ut libero. Nam ac est in quam adipiscing consequat sed a est. Aenean eget mauris vel mauris congue interdum eu at ipsum. Fusce feugiat ultricies enim porta viverra. In aliquam venenatis volutpat. Integer eget vehicula mauris. Aliquam non mauris ut sapien pulvinar iaculis nec consequat lectus. Morbi vitae libero tortor. Etiam at nunc et ipsum consectetur sagittis. Suspendisse sagittis leo vel enim sagittis ut fringilla orci semper. Duis sagittis turpis ut neque faucibus in varius massa imperdiet. Duis a vestibulum neque. Aliquam id condimentum enim. Praesent sit amet nisi sapien, ut facilisis sem. Sed et aliquam diam. Proin accumsan magna lacinia erat feugiat interdum. Ut fermentum posuere purus, eget sagittis nisi suscipit in. Nunc aliquet ipsum eget nulla convallis tristique. In tempor sollicitudin ultrices. Suspendisse orci tortor, sagittis sit amet malesuada id, feugiat accumsan velit. Aenean at augue a nisl vulputate tincidunt sit amet a justo. Nullam consequat lobortis lacus id tempus. Mauris varius dignissim tempor. Sed nec arcu est, et lobortis metus. Morbi luctus magna ut massa aliquam tristique. Donec in mauris sapien. Donec pharetra sollicitudin dolor, quis porttitor elit condimentum eget. Morbi eu orci neque, eu eleifend tortor. Proin feugiat neque non velit euismod dignissim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus id nunc ut velit porttitor condimentum sit amet non arcu. Suspendisse potenti. Donec nec elit at dui rhoncus pellentesque. Integer feugiat mollis sodales. Suspendisse congue venenatis suscipit. Vivamus pulvinar bibendum nibh, feugiat scelerisque nibh vehicula dictum. Phasellus commodo, lacus ultrices sagittis pretium, orci magna suscipit justo, ac porta sapien lorem a ligula. In cursus malesuada nibh vel pretium. Nunc a posuere arcu. Quisque dapibus, dui eu eleifend porta, nulla neque laoreet ligula, eu ultricies elit erat a sapien. Etiam lorem nisi, porttitor sit amet venenatis vitae, scelerisque at metus. Vivamus pretium orci sed orci laoreet hendrerit. Mauris hendrerit malesuada nisi in rhoncus. Fusce cursus rutrum ultrices. Fusce in eros tortor, eget dapibus enim. Ut eleifend faucibus porttitor. Fusce ornare quam non justo bibendum viverra. Duis non erat a quam feugiat congue. Phasellus vulputate ultricies neque, ut faucibus nisi adipiscing vel. Nulla facilisi. Praesent ut commodo nisi. Curabitur tristique metus a urna ultrices id tempus nisi volutpat. Vivamus sodales laoreet lacus eu molestie. Ut elit tortor, rutrum vel cursus a, sodales ac neque. Maecenas ut velit metus, at pulvinar ipsum. Etiam vel risus quis purus dictum convallis. Integer malesuada orci non urna malesuada id lobortis risus facilisis. Maecenas tincidunt viverra sapien nec tincidunt. Etiam ultricies tincidunt auctor. Curabitur lacinia, augue sit amet faucibus sagittis, nunc urna interdum neque, tincidunt accumsan dui tellus quis dui. Donec vel ante ac justo cursus tincidunt ac in ante. Ut nec augue a magna egestas blandit. Nunc imperdiet convallis lorem, sed accumsan sem vulputate quis. Donec blandit orci gravida ligula pulvinar in varius urna imperdiet. Curabitur nec erat a eros scelerisque tristique eu sed enim. Nullam a suscipit nulla. Mauris feugiat, diam quis facilisis convallis, justo ligula condimentum justo, nec ornare erat lacus at lorem. Donec dui dolor, elementum eu tempor tincidunt, lacinia et tellus. Fusce elit dui, luctus eu dictum vitae, posuere eu augue. Donec id urna sit amet lorem hendrerit consequat eu sed libero. Vestibulum eget dapibus tellus. Nulla turpis tellus, tristique nec hendrerit at, dignissim ut nulla. Pellentesque sed ipsum a mauris dapibus consectetur. Nulla eleifend viverra elit, in tincidunt est cursus ac. Sed magna mauris, consequat sed blandit eu, sodales in dolor. Nam sed felis mauris. Donec eleifend tortor mi. Phasellus pharetra lectus enim, sed auctor odio. Phasellus sollicitudin, urna sit amet venenatis vehicula, tortor urna euismod sem, sit amet ornare orci velit ut dolor. Duis in posuere massa. Vestibulum at velit quam. Cras a leo ac augue hendrerit pretium. Ut vehicula sagittis pharetra. Aliquam ut arcu vel lectus dictum luctus. Donec ut urna libero, vel fermentum odio. Curabitur in diam dolor. Sed sed felis enim, vitae dictum dui. Integer quis justo eget dui mollis posuere. In hac habitasse platea dictumst. Donec lorem enim, imperdiet ut fermentum ac, dignissim sit amet velit. In lacinia tempus massa id sollicitudin. Maecenas euismod risus nec turpis fermentum ac viverra ante molestie. Nam vitae magna magna. Donec gravida magna eu felis ornare quis viverra ante fermentum. Nullam placerat nulla id augue facilisis et ultricies velit blandit. Vestibulum commodo accumsan vulputate. Nunc suscipit vestibulum sem, quis vulputate augue tincidunt et. Cras mollis, dui id imperdiet ornare, nisi mauris vehicula ante, at lobortis urna elit sit amet lorem. Vestibulum in lorem nisi, sed scelerisque erat. Nunc porta nulla eget leo tincidunt auctor. Fusce sed neque eu mauris sollicitudin molestie. Praesent nunc arcu, mollis vitae rutrum non, vehicula quis dolor. Nulla facilisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent velit quam, fringilla sed commodo rutrum, molestie sed tellus. Integer dictum, nisi eget condimentum volutpat, augue enim bibendum tellus, sit amet condimentum purus sem id risus. Pellentesque blandit venenatis luctus. Nullam urna elit, tincidunt eu volutpat eget, euismod et nulla. Sed porta sollicitudin sagittis. Pellentesque imperdiet, purus et volutpat laoreet, purus augue scelerisque quam, ut auctor nulla sem eget nisi. Maecenas tortor metus, tincidunt at tincidunt non, ornare et diam. Aliquam nec lorem dui, a auctor mi. Vestibulum auctor diam sit amet quam pulvinar lobortis. Aliquam eget dolor eu ipsum porttitor tempor quis vitae nibh. Sed ut imperdiet ligula. Maecenas sollicitudin congue lectus in fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales arcu vitae enim tristique lacinia. Quisque in ullamcorper elit. Ut lacinia egestas nunc, quis consectetur augue elementum non. Praesent volutpat vulputate ante, a tempor quam interdum et. Aliquam feugiat nisi quis diam aliquam ac mattis nisl vulputate. Nulla id enim magna, nec adipiscing metus. Vestibulum ultrices pellentesque rutrum. Praesent non vehicula massa. Quisque pharetra porta nisl, in cursus lacus aliquet eget. Nullam eget nibh felis, egestas rhoncus nulla. Morbi sed orci sapien, quis facilisis odio. Vestibulum augue mauris, cursus a placerat a, dapibus ac odio. Fusce vulputate luctus commodo. Proin vulputate fringilla volutpat. Mauris ante est, placerat et aliquet dignissim, tincidunt eu nisi. Quisque justo elit, pulvinar in condimentum vel, interdum at augue. Donec sed elit a purus feugiat auctor. Integer at neque enim, semper lobortis enim. Vestibulum nunc felis, viverra ac pellentesque id, rhoncus eu mauris. Ut ligula nibh, aliquet aliquet interdum accumsan, varius a massa. Vivamus aliquam, nunc in vestibulum consectetur, massa purus imperdiet tellus, et tempor velit sapien fringilla magna. Ut eget urna non nisi tempus elementum vel eget urna. Sed convallis adipiscing ipsum eu accumsan. Proin non urna eu dolor venenatis convallis vitae nec leo. Mauris aliquam ornare tincidunt. In non augue lectus, eu feugiat ante. Nulla interdum aliquam nisl in convallis. Sed in libero elit. Proin lorem est, porta vitae ultricies non, consectetur in ante. Maecenas a ultricies dui. Morbi viverra, enim quis elementum porttitor, arcu mauris elementum sem, non consequat odio odio sit amet sapien. Vivamus laoreet congue turpis, ac ornare felis consectetur sit amet. Ut nunc dui, ornare eu interdum ut, ullamcorper eget ligula. Proin ullamcorper dictum orci in posuere. Donec a tempus urna. Nunc hendrerit, orci non pharetra accumsan, enim nulla vulputate sapien, quis bibendum lectus orci nec urna. Quisque fermentum purus sem, sit amet varius justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed porta mauris nec purus condimentum eleifend. Pellentesque sit amet velit magna, pharetra euismod lacus. Mauris vulputate erat et dui sagittis ac egestas justo sollicitudin. Proin convallis, enim eu lacinia aliquam, erat ipsum cursus sapien, eu rhoncus erat est et tortor. Sed est purus, dignissim et gravida sit amet, dapibus vel lectus. Curabitur convallis, risus ut molestie viverra, dolor metus cursus tellus, eu posuere orci felis scelerisque elit. Donec venenatis aliquet tortor, eget blandit metus condimentum nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus id tristique lacus. Ut in odio porttitor tellus viverra facilisis at et lorem. Fusce vehicula odio ut lacus commodo venenatis. Vivamus vitae condimentum velit. In hac habitasse platea dictumst. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam lectus odio, faucibus vitae egestas et, varius placerat felis. Praesent facilisis hendrerit mollis. Aenean viverra elit vel dui suscipit congue. Mauris non nulla libero. Ut luctus, sem sit amet placerat mollis, risus nisi varius tortor, sed egestas tellus urna sit amet urna. In id mi id nulla fermentum aliquet. Vivamus facilisis imperdiet tempus. Nam sit amet odio non mi ullamcorper sagittis sit amet ac est. Maecenas id magna in diam porttitor feugiat sed quis dui. Etiam nec nunc eu mi vulputate semper. Aliquam vel velit vel felis cursus ultricies. Vestibulum in nisl lacus, sit amet egestas augue. Nullam nisl diam, vehicula et tincidunt eget, consectetur quis nibh. Nulla purus dui, congue ut ullamcorper quis, cursus vel enim. Cras vitae nisl massa, non sodales purus. Curabitur hendrerit malesuada rhoncus. Suspendisse tristique sem eget lectus molestie viverra. Nullam quis diam sed magna tempor tempor quis sed turpis. Nullam laoreet purus eget tortor lacinia pretium. In convallis purus et felis placerat elementum. Suspendisse ut sem sit amet arcu scelerisque tempus. In neque sem, mattis at vestibulum ac, volutpat vel elit. Etiam augue ipsum, consequat ut hendrerit at, mattis in elit. Curabitur auctor, ante et tristique vehicula, ligula sapien luctus turpis, vitae suscipit velit neque eu neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed consequat convallis pretium. Nullam at sapien eget tortor congue vulputate. Cras leo diam, porta sed sodales et, eleifend vitae velit. Sed laoreet urna in urna dignissim eu posuere tortor ornare. Aliquam erat volutpat. Vestibulum eleifend, turpis gravida dignissim tristique, magna nisi volutpat enim, in interdum ligula neque varius quam. Vestibulum vehicula aliquet consequat. Donec viverra orci ut magna facilisis sagittis. Sed tincidunt iaculis neque at sollicitudin. Vivamus eget rutrum lectus. Integer urna dolor, lacinia accumsan tristique eu, aliquam vitae risus. Mauris eget eros id lectus adipiscing faucibus ullamcorper sit amet velit. Duis sed lacus ante. Pellentesque eleifend, libero et dictum congue, nulla dui hendrerit arcu, et pharetra nunc ipsum quis massa. Pellentesque at metus nibh. Duis iaculis molestie augue, vulputate sagittis turpis pretium in. Nullam eu dui eget magna feugiat congue ac sit amet neque. Mauris quis posuere dolor. Sed vulputate vestibulum dui, ut rhoncus quam iaculis in. Pellentesque vitae diam mauris. Nam ut pulvinar metus. Morbi dapibus pretium nunc, vitae dignissim justo vestibulum sed. Curabitur sed diam metus. Nulla risus neque, fringilla nec adipiscing nec, eleifend ut tortor. Sed sed felis id dolor facilisis semper. Nam sit amet sollicitudin libero. Curabitur vitae dui eget libero accumsan tempor nec blandit elit. Sed sit amet ante sem, vel semper nisi. Duis est felis, cursus et sollicitudin et, condimentum ac purus. Curabitur iaculis sodales tristique. Mauris malesuada commodo vulputate. Phasellus venenatis ultricies semper. Donec tellus velit, viverra eu pellentesque quis, varius sit amet elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec et enim magna, quis rutrum enim. Cras nunc nisi, varius dictum hendrerit sed, viverra at turpis. Sed sed odio tortor. Nulla facilisi. Ut vestibulum tempus orci ut blandit. Quisque hendrerit sagittis mi eget molestie. Maecenas interdum ullamcorper eros, sed ullamcorper urna porttitor sit amet. Etiam eu sem quis urna vehicula pharetra. Sed imperdiet pellentesque diam, quis interdum magna sollicitudin quis. Nam tristique tincidunt molestie. Nunc urna mauris, porta vitae sollicitudin quis, dignissim sed tortor. Etiam vel nulla purus. Aenean neque mi, ullamcorper in ultrices id, ultricies eget sapien. Nullam sodales odio in odio rutrum sed rutrum ligula placerat. Sed odio lectus, pellentesque commodo adipiscing" | |
dat 0 | |
:text_uncompressed_end | |
:compress_to_here | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment