├── .formatter.exs
├── .github
└── workflows
│ └── elixir.yml
├── .gitignore
├── LICENSE
├── README.md
├── assets
└── example.png
├── examples
├── barcodes.html
├── custom_fonts_and_styles.html
├── hello.html
├── invoice.html
├── list_of_people.html
├── page_numbering.html
└── two_page_table.html
├── lib
├── base_template
│ ├── base_template.html.eex
│ ├── normalize.css
│ └── paper.css
├── rapport.ex
└── rapport
│ ├── barcode.ex
│ ├── font.ex
│ ├── image.ex
│ ├── page.ex
│ ├── page_numbering.ex
│ └── report.ex
├── mix.exs
├── mix.lock
└── test
├── barcode_test.exs
├── example_templates
├── barcode_page.html.eex
├── charts_page.html.eex
├── charts_report.html.eex
├── invoice_page.html.eex
├── invoice_report.html.eex
├── list_of_people_cover_page.html.eex
├── list_of_people_page.html.eex
├── list_of_people_report.html.eex
├── page_numbering_page.html.eex
├── table_page.html.eex
└── table_report.html.eex
├── example_test.exs
├── font_test.exs
├── fonts
├── font.woff2
├── no.font
└── tangerine.woff2
├── image_test.exs
├── images
├── acme.png
├── gif.gif
├── jpg.jpg
├── logo
│ ├── editablefile.ai
│ ├── horizontal.png
│ ├── horizontal.svg
│ ├── vertical.png
│ └── vertical.svg
├── no.image
├── png.png
└── top_secret_stamp.png
├── page_numbering_test.exs
├── page_test.exs
├── rapport_test.exs
├── templates
├── empty.html.eex
├── hello.html.eex
├── list.html.eex
├── list_map.html.eex
└── two_fields.html.eex
└── test_helper.exs
/.formatter.exs:
--------------------------------------------------------------------------------
1 | [
2 | inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"]
3 | ]
4 |
--------------------------------------------------------------------------------
/.github/workflows/elixir.yml:
--------------------------------------------------------------------------------
1 | name: Elixir CI
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | pull_request:
7 | branches: [ master ]
8 |
9 | jobs:
10 | build:
11 |
12 | name: Build and test
13 | runs-on: ubuntu-20.04
14 |
15 | steps:
16 | - uses: actions/checkout@v3
17 | - name: Set up Elixir
18 | uses: erlef/setup-beam@988e02bfe678367a02564f65ca2e37726dc0268f
19 | with:
20 | elixir-version: '1.16.0' # Define the elixir version [required]
21 | otp-version: '26.2.1' # Define the OTP version [required]
22 | - name: Restore dependencies cache
23 | uses: actions/cache@v3
24 | with:
25 | path: deps
26 | key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
27 | restore-keys: ${{ runner.os }}-mix-
28 | - name: Install dependencies
29 | run: mix deps.get
30 | - name: Run tests
31 | run: mix test
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # The directory Mix will write compiled artifacts to.
2 | /_build/
3 |
4 | # If you run "mix test --cover", coverage assets end up here.
5 | /cover/
6 |
7 | # The directory Mix downloads your dependencies sources to.
8 | /deps/
9 |
10 | # Where 3rd-party dependencies like ExDoc output generated docs.
11 | /doc/
12 |
13 | # Ignore .fetch files in case you like to edit your project deps locally.
14 | /.fetch
15 |
16 | # If the VM crashes, it generates a dump, let's ignore it too.
17 | erl_crash.dump
18 |
19 | # Also ignore archive artifacts (built via "mix archive.build").
20 | *.ez
21 | TODO.txt
22 | *.tar
23 |
24 | # Visual Studio code stuff
25 | /.vscode/
26 |
27 | /.elixir_ls/
28 | .DS_Store
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 Richard Nyström
2 |
3 | MIT License
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining
6 | a copy of this software and associated documentation files (the
7 | "Software"), to deal in the Software without restriction, including
8 | without limitation the rights to use, copy, modify, merge, publish,
9 | distribute, sublicense, and/or sell copies of the Software, and to
10 | permit persons to whom the Software is furnished to do so, subject to
11 | the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be
14 | included in all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | Rapport aims to provide a robust set of modules to generate HTML reports that both looks good in the browser and when being printed.
4 |
5 | [](https://github.com/ricn/rapport/actions/workflows/elixir.yml)
6 | [](https://hex.pm/packages/rapport)
7 | [](https://coveralls.io/github/ricn/rapport?branch=master)
8 |
9 | ## Installation
10 |
11 | The package can be installed
12 | by adding `rapport` to your list of dependencies in `mix.exs`:
13 |
14 | ```elixir
15 | def deps do
16 | [
17 | {:rapport, "~> 0.7"}
18 | ]
19 | end
20 | ```
21 |
22 | ## Notable features
23 | * Specify paper size for the report
24 | * Specify rotation for the report
25 | * Image helpers
26 | * Font helpers
27 | * Page numbering
28 | * Add custom styling & even Javascript
29 | * Barcodes
30 |
31 | ## Hello world
32 |
33 | ```elixir
34 | page_template = "
<%= @hello %>
"
35 | html_report =
36 | Rapport.new
37 | |> Rapport.add_page(page_template, %{hello: "Hello world!"})
38 | |> Rapport.save_to_file("/home/users/ricn/hello.html")
39 | ```
40 |
41 | The snippet above generates a report containing only one page with a heading that says "Hello world!".
42 |
43 | [See example here](https://rawgit.com/ricn/rapport/master/examples/hello.html)
44 |
45 | ## More examples
46 | * [Custom fonts and styling](https://rawgit.com/ricn/rapport/master/examples/custom_fonts_and_styles.html)
47 | * [Invoice](https://rawgit.com/ricn/rapport/master/examples/invoice.html)
48 | * [Page numbering](https://rawgit.com/ricn/rapport/master/examples/page_numbering.html)
49 | * [List of people with cover page](https://rawgit.com/ricn/rapport/master/examples/list_of_people.html)
50 | * [Barcodes](https://rawgit.com/ricn/rapport/master/examples/barcodes.html)
51 | * More examples are coming...
52 |
53 | If you want to see how the examples has been created, you can look at the `example_test.exs` file in the test folder.
54 |
55 | ## Phoenix integration
56 |
57 | It's easy to Integrate Rapport with Phoenix. Just load the template as a module attribute, create the HTML for the report
58 | and send a response with the generated HTML:
59 |
60 | ```elixir
61 | defmodule ReportsWeb.ReportController do
62 | use ReportsWeb, :controller
63 |
64 | @page_template File.read!(Path.join(__DIR__, "../templates/report/hello.html.eex"))
65 |
66 | def hello(conn, _params) do
67 | html_report =
68 | Rapport.new
69 | |> Rapport.add_page(@page_template, %{hello: "Hello World!"})
70 | |> Rapport.generate_html
71 |
72 | conn
73 | |> put_resp_content_type("text/html")
74 | |> send_resp(200, html_report)
75 | end
76 | end
77 | ```
78 |
79 | ## Upcoming features
80 | * Charts
81 | * PDF conversion
82 |
83 | ## Credits
84 |
85 | The following people have contributed ideas, documentation, or code to Rapport:
86 |
87 | * Richard Nyström
88 |
89 | ## Contributing
90 |
91 | 1. Fork it
92 | 2. Create your feature branch (`git checkout -b my-new-feature`)
93 | 3. Commit your changes (`git commit -am 'Add some feature'`)
94 | 4. Push to the branch (`git push origin my-new-feature`)
95 | 5. Create new Pull Request
96 |
--------------------------------------------------------------------------------
/assets/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ricn/rapport/b5ebb91f3c41800de66f6a5e121d0f8c4637e747/assets/example.png
--------------------------------------------------------------------------------
/examples/barcodes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Report
6 |
8 |
101 |
102 |
103 |
104 |
105 |
Quisquam magni sed voluptate eligendi optio numquam nulla sequi corporis! Saepe voluptatem dolore nesciunt. Id laudantium qui aut eaque fuga quia eum iure. Pariatur natus vel sint blanditiis!Ut rerum dolore numquam autem animi iure adipisci ratione qui. Quaerat harum ea quis qui non reiciendis vero? Consequatur qui molestias voluptas. Blanditiis voluptas non vel cumque illo corporis perferendis dolor! Iste aut impedit illo distinctio.Et id impedit voluptatem error. Numquam cupiditate aut dolores aperiam commodi quas porro impedit. Debitis ea libero voluptas molestiae sunt. In impedit ex iste. Repellat et amet ipsum reiciendis reprehenderit rem a iste.Nihil repellendus perferendis laborum soluta ut sed repellendus enim voluptatibus. Sit accusantium ad atque. Explicabo ex et deserunt culpa est accusantium. Est ut exercitationem quo aut debitis! Earum quaerat aut quasi omnis et est.Vel nesciunt vero suscipit unde accusamus est sed. Aut voluptas impedit sed laborum a dolore quasi eveniet eos. Nobis quasi quaerat ab et et nam optio repellendus.Ab non unde asperiores molestias aut. Nihil qui ut ut harum neque quisquam. Nisi temporibus aut consectetur quos praesentium. Officia dolorem debitis distinctio consequuntur. Minus consectetur quaerat at qui molestiae ut modi facere.Et qui modi dolor molestiae ducimus incidunt ut et aut. Illo omnis hic ut qui nihil molestias! Molestias ipsum a dolore natus nostrum. Voluptas itaque vel voluptate. Animi dolorem quis exercitationem praesentium.Vitae tempore et totam nulla et assumenda nemo! Non repellendus provident nemo accusamus? Eius error laboriosam recusandae corrupti perspiciatis et iusto corrupti. Non voluptas debitis reprehenderit.Autem quis accusantium sapiente ut eligendi beatae deleniti cum earum. Ut repudiandae sint porro delectus libero laboriosam autem deserunt voluptatem. Tempora quibusdam quis dignissimos sed et earum aliquam rerum. Et unde et cum perferendis commodi sint et.Porro ut dolores provident. Nihil odio tempora enim est aut ducimus.Dolorum quo veniam doloribus optio. Possimus tenetur qui eius aut est alias reiciendis. Ut qui dignissimos quibusdam vel dolorem? Reprehenderit nisi omnis sunt sit aliquam officiis facilis officia in. Aut tempore laboriosam cupiditate amet velit ex accusantium minus laborum.Aliquid nulla temporibus ut quo aut possimus ex? Unde facilis iusto ut quo itaque adipisci doloribus! Laboriosam maxime facere distinctio et praesentium ex. Molestias vitae est et ut reprehenderit eveniet sint. Ut quo quod nobis saepe ea.Dignissimos possimus suscipit dolorum cupiditate nobis non et consequatur. Facilis doloribus molestiae praesentium eveniet suscipit. Voluptas non aspernatur voluptate corrupti minima necessitatibus. Non corrupti labore vel impedit! Facere et impedit praesentium praesentium est qui enim.Natus consequatur aut consequatur est reiciendis ducimus veritatis et optio! Laboriosam error repellat amet laboriosam voluptate? Et delectus eos itaque quia doloremque magni. Voluptas et id aliquam non esse ipsa et laborum eos.Repellat sed veritatis odio. Reiciendis tempora ducimus saepe porro voluptatem modi non!Maiores veritatis autem necessitatibus. Ut incidunt est recusandae quibusdam veritatis aliquam?Natus quasi asperiores facilis officia et ipsum necessitatibus quidem. Non ut atque molestiae repellat commodi omnis ratione eius. Veritatis in perspiciatis molestiae numquam repellat. Consequatur non ipsam eos iste nesciunt culpa voluptatem ex.Dolorem nesciunt dignissimos ipsum dolor totam perferendis! Et vitae sed nulla repellat nihil? Magni et non accusamus earum nemo et sint voluptatum.Accusamus sunt dolor totam similique deserunt? Repellendus laborum a temporibus molestiae quia unde cum dolorem! Facere sequi ipsa non amet qui quia ad. Consequatur id aliquid sit est ex necessitatibus voluptatem! Sit est fuga et aut natus rerum et earum nesciunt!Fuga voluptatibus porro dignissimos vel rerum. Libero quaerat reprehenderit soluta omnis quia quia et dolores repudiandae. Enim molestiae dicta soluta totam ab. Quis aut eius dolor rem.Quaerat maxime voluptate molestiae? Eum sapiente corrupti ea temporibus et voluptatem nisi earum voluptates! Illum omnis fugit eveniet dolorem ipsum illum provident at! Explicabo maxime et et ut perspiciatis dolores veritatis id est.Incidunt odio magnam minus ad! Distinctio impedit sed neque quia explicabo perspiciatis.Porro molestiae ipsum ab ducimus expedita. Sed velit non hic aspernatur dolorum ipsa dicta natus ipsa. Unde minus quaerat vitae quaerat sit temporibus porro omnis. Culpa ut officiis laborum neque eum tempore? Omnis ratione dolorem minima.
108 |
109 | 1 of 4
110 |
111 |
112 |
Random text
113 |
Quisquam magni sed voluptate eligendi optio numquam nulla sequi corporis! Saepe voluptatem dolore nesciunt. Id laudantium qui aut eaque fuga quia eum iure. Pariatur natus vel sint blanditiis!Ut rerum dolore numquam autem animi iure adipisci ratione qui. Quaerat harum ea quis qui non reiciendis vero? Consequatur qui molestias voluptas. Blanditiis voluptas non vel cumque illo corporis perferendis dolor! Iste aut impedit illo distinctio.Et id impedit voluptatem error. Numquam cupiditate aut dolores aperiam commodi quas porro impedit. Debitis ea libero voluptas molestiae sunt. In impedit ex iste. Repellat et amet ipsum reiciendis reprehenderit rem a iste.Nihil repellendus perferendis laborum soluta ut sed repellendus enim voluptatibus. Sit accusantium ad atque. Explicabo ex et deserunt culpa est accusantium. Est ut exercitationem quo aut debitis! Earum quaerat aut quasi omnis et est.Vel nesciunt vero suscipit unde accusamus est sed. Aut voluptas impedit sed laborum a dolore quasi eveniet eos. Nobis quasi quaerat ab et et nam optio repellendus.Ab non unde asperiores molestias aut. Nihil qui ut ut harum neque quisquam. Nisi temporibus aut consectetur quos praesentium. Officia dolorem debitis distinctio consequuntur. Minus consectetur quaerat at qui molestiae ut modi facere.Et qui modi dolor molestiae ducimus incidunt ut et aut. Illo omnis hic ut qui nihil molestias! Molestias ipsum a dolore natus nostrum. Voluptas itaque vel voluptate. Animi dolorem quis exercitationem praesentium.Vitae tempore et totam nulla et assumenda nemo! Non repellendus provident nemo accusamus? Eius error laboriosam recusandae corrupti perspiciatis et iusto corrupti. Non voluptas debitis reprehenderit.Autem quis accusantium sapiente ut eligendi beatae deleniti cum earum. Ut repudiandae sint porro delectus libero laboriosam autem deserunt voluptatem. Tempora quibusdam quis dignissimos sed et earum aliquam rerum. Et unde et cum perferendis commodi sint et.Porro ut dolores provident. Nihil odio tempora enim est aut ducimus.Dolorum quo veniam doloribus optio. Possimus tenetur qui eius aut est alias reiciendis. Ut qui dignissimos quibusdam vel dolorem? Reprehenderit nisi omnis sunt sit aliquam officiis facilis officia in. Aut tempore laboriosam cupiditate amet velit ex accusantium minus laborum.Aliquid nulla temporibus ut quo aut possimus ex? Unde facilis iusto ut quo itaque adipisci doloribus! Laboriosam maxime facere distinctio et praesentium ex. Molestias vitae est et ut reprehenderit eveniet sint. Ut quo quod nobis saepe ea.Dignissimos possimus suscipit dolorum cupiditate nobis non et consequatur. Facilis doloribus molestiae praesentium eveniet suscipit. Voluptas non aspernatur voluptate corrupti minima necessitatibus. Non corrupti labore vel impedit! Facere et impedit praesentium praesentium est qui enim.Natus consequatur aut consequatur est reiciendis ducimus veritatis et optio! Laboriosam error repellat amet laboriosam voluptate? Et delectus eos itaque quia doloremque magni. Voluptas et id aliquam non esse ipsa et laborum eos.Repellat sed veritatis odio. Reiciendis tempora ducimus saepe porro voluptatem modi non!Maiores veritatis autem necessitatibus. Ut incidunt est recusandae quibusdam veritatis aliquam?Natus quasi asperiores facilis officia et ipsum necessitatibus quidem. Non ut atque molestiae repellat commodi omnis ratione eius. Veritatis in perspiciatis molestiae numquam repellat. Consequatur non ipsam eos iste nesciunt culpa voluptatem ex.Dolorem nesciunt dignissimos ipsum dolor totam perferendis! Et vitae sed nulla repellat nihil? Magni et non accusamus earum nemo et sint voluptatum.Accusamus sunt dolor totam similique deserunt? Repellendus laborum a temporibus molestiae quia unde cum dolorem! Facere sequi ipsa non amet qui quia ad. Consequatur id aliquid sit est ex necessitatibus voluptatem! Sit est fuga et aut natus rerum et earum nesciunt!Fuga voluptatibus porro dignissimos vel rerum. Libero quaerat reprehenderit soluta omnis quia quia et dolores repudiandae. Enim molestiae dicta soluta totam ab. Quis aut eius dolor rem.Quaerat maxime voluptate molestiae? Eum sapiente corrupti ea temporibus et voluptatem nisi earum voluptates! Illum omnis fugit eveniet dolorem ipsum illum provident at! Explicabo maxime et et ut perspiciatis dolores veritatis id est.Incidunt odio magnam minus ad! Distinctio impedit sed neque quia explicabo perspiciatis.Porro molestiae ipsum ab ducimus expedita. Sed velit non hic aspernatur dolorum ipsa dicta natus ipsa. Unde minus quaerat vitae quaerat sit temporibus porro omnis. Culpa ut officiis laborum neque eum tempore? Omnis ratione dolorem minima.
114 |
115 | 2 of 4
116 |
117 |
118 |
Random text
119 |
Quisquam magni sed voluptate eligendi optio numquam nulla sequi corporis! Saepe voluptatem dolore nesciunt. Id laudantium qui aut eaque fuga quia eum iure. Pariatur natus vel sint blanditiis!Ut rerum dolore numquam autem animi iure adipisci ratione qui. Quaerat harum ea quis qui non reiciendis vero? Consequatur qui molestias voluptas. Blanditiis voluptas non vel cumque illo corporis perferendis dolor! Iste aut impedit illo distinctio.Et id impedit voluptatem error. Numquam cupiditate aut dolores aperiam commodi quas porro impedit. Debitis ea libero voluptas molestiae sunt. In impedit ex iste. Repellat et amet ipsum reiciendis reprehenderit rem a iste.Nihil repellendus perferendis laborum soluta ut sed repellendus enim voluptatibus. Sit accusantium ad atque. Explicabo ex et deserunt culpa est accusantium. Est ut exercitationem quo aut debitis! Earum quaerat aut quasi omnis et est.Vel nesciunt vero suscipit unde accusamus est sed. Aut voluptas impedit sed laborum a dolore quasi eveniet eos. Nobis quasi quaerat ab et et nam optio repellendus.Ab non unde asperiores molestias aut. Nihil qui ut ut harum neque quisquam. Nisi temporibus aut consectetur quos praesentium. Officia dolorem debitis distinctio consequuntur. Minus consectetur quaerat at qui molestiae ut modi facere.Et qui modi dolor molestiae ducimus incidunt ut et aut. Illo omnis hic ut qui nihil molestias! Molestias ipsum a dolore natus nostrum. Voluptas itaque vel voluptate. Animi dolorem quis exercitationem praesentium.Vitae tempore et totam nulla et assumenda nemo! Non repellendus provident nemo accusamus? Eius error laboriosam recusandae corrupti perspiciatis et iusto corrupti. Non voluptas debitis reprehenderit.Autem quis accusantium sapiente ut eligendi beatae deleniti cum earum. Ut repudiandae sint porro delectus libero laboriosam autem deserunt voluptatem. Tempora quibusdam quis dignissimos sed et earum aliquam rerum. Et unde et cum perferendis commodi sint et.Porro ut dolores provident. Nihil odio tempora enim est aut ducimus.Dolorum quo veniam doloribus optio. Possimus tenetur qui eius aut est alias reiciendis. Ut qui dignissimos quibusdam vel dolorem? Reprehenderit nisi omnis sunt sit aliquam officiis facilis officia in. Aut tempore laboriosam cupiditate amet velit ex accusantium minus laborum.Aliquid nulla temporibus ut quo aut possimus ex? Unde facilis iusto ut quo itaque adipisci doloribus! Laboriosam maxime facere distinctio et praesentium ex. Molestias vitae est et ut reprehenderit eveniet sint. Ut quo quod nobis saepe ea.Dignissimos possimus suscipit dolorum cupiditate nobis non et consequatur. Facilis doloribus molestiae praesentium eveniet suscipit. Voluptas non aspernatur voluptate corrupti minima necessitatibus. Non corrupti labore vel impedit! Facere et impedit praesentium praesentium est qui enim.Natus consequatur aut consequatur est reiciendis ducimus veritatis et optio! Laboriosam error repellat amet laboriosam voluptate? Et delectus eos itaque quia doloremque magni. Voluptas et id aliquam non esse ipsa et laborum eos.Repellat sed veritatis odio. Reiciendis tempora ducimus saepe porro voluptatem modi non!Maiores veritatis autem necessitatibus. Ut incidunt est recusandae quibusdam veritatis aliquam?Natus quasi asperiores facilis officia et ipsum necessitatibus quidem. Non ut atque molestiae repellat commodi omnis ratione eius. Veritatis in perspiciatis molestiae numquam repellat. Consequatur non ipsam eos iste nesciunt culpa voluptatem ex.Dolorem nesciunt dignissimos ipsum dolor totam perferendis! Et vitae sed nulla repellat nihil? Magni et non accusamus earum nemo et sint voluptatum.Accusamus sunt dolor totam similique deserunt? Repellendus laborum a temporibus molestiae quia unde cum dolorem! Facere sequi ipsa non amet qui quia ad. Consequatur id aliquid sit est ex necessitatibus voluptatem! Sit est fuga et aut natus rerum et earum nesciunt!Fuga voluptatibus porro dignissimos vel rerum. Libero quaerat reprehenderit soluta omnis quia quia et dolores repudiandae. Enim molestiae dicta soluta totam ab. Quis aut eius dolor rem.Quaerat maxime voluptate molestiae? Eum sapiente corrupti ea temporibus et voluptatem nisi earum voluptates! Illum omnis fugit eveniet dolorem ipsum illum provident at! Explicabo maxime et et ut perspiciatis dolores veritatis id est.Incidunt odio magnam minus ad! Distinctio impedit sed neque quia explicabo perspiciatis.Porro molestiae ipsum ab ducimus expedita. Sed velit non hic aspernatur dolorum ipsa dicta natus ipsa. Unde minus quaerat vitae quaerat sit temporibus porro omnis. Culpa ut officiis laborum neque eum tempore? Omnis ratione dolorem minima.
120 |
121 | 3 of 4
122 |
123 |
124 |
Random text
125 |
Quisquam magni sed voluptate eligendi optio numquam nulla sequi corporis! Saepe voluptatem dolore nesciunt. Id laudantium qui aut eaque fuga quia eum iure. Pariatur natus vel sint blanditiis!Ut rerum dolore numquam autem animi iure adipisci ratione qui. Quaerat harum ea quis qui non reiciendis vero? Consequatur qui molestias voluptas. Blanditiis voluptas non vel cumque illo corporis perferendis dolor! Iste aut impedit illo distinctio.Et id impedit voluptatem error. Numquam cupiditate aut dolores aperiam commodi quas porro impedit. Debitis ea libero voluptas molestiae sunt. In impedit ex iste. Repellat et amet ipsum reiciendis reprehenderit rem a iste.Nihil repellendus perferendis laborum soluta ut sed repellendus enim voluptatibus. Sit accusantium ad atque. Explicabo ex et deserunt culpa est accusantium. Est ut exercitationem quo aut debitis! Earum quaerat aut quasi omnis et est.Vel nesciunt vero suscipit unde accusamus est sed. Aut voluptas impedit sed laborum a dolore quasi eveniet eos. Nobis quasi quaerat ab et et nam optio repellendus.Ab non unde asperiores molestias aut. Nihil qui ut ut harum neque quisquam. Nisi temporibus aut consectetur quos praesentium. Officia dolorem debitis distinctio consequuntur. Minus consectetur quaerat at qui molestiae ut modi facere.Et qui modi dolor molestiae ducimus incidunt ut et aut. Illo omnis hic ut qui nihil molestias! Molestias ipsum a dolore natus nostrum. Voluptas itaque vel voluptate. Animi dolorem quis exercitationem praesentium.Vitae tempore et totam nulla et assumenda nemo! Non repellendus provident nemo accusamus? Eius error laboriosam recusandae corrupti perspiciatis et iusto corrupti. Non voluptas debitis reprehenderit.Autem quis accusantium sapiente ut eligendi beatae deleniti cum earum. Ut repudiandae sint porro delectus libero laboriosam autem deserunt voluptatem. Tempora quibusdam quis dignissimos sed et earum aliquam rerum. Et unde et cum perferendis commodi sint et.Porro ut dolores provident. Nihil odio tempora enim est aut ducimus.Dolorum quo veniam doloribus optio. Possimus tenetur qui eius aut est alias reiciendis. Ut qui dignissimos quibusdam vel dolorem? Reprehenderit nisi omnis sunt sit aliquam officiis facilis officia in. Aut tempore laboriosam cupiditate amet velit ex accusantium minus laborum.Aliquid nulla temporibus ut quo aut possimus ex? Unde facilis iusto ut quo itaque adipisci doloribus! Laboriosam maxime facere distinctio et praesentium ex. Molestias vitae est et ut reprehenderit eveniet sint. Ut quo quod nobis saepe ea.Dignissimos possimus suscipit dolorum cupiditate nobis non et consequatur. Facilis doloribus molestiae praesentium eveniet suscipit. Voluptas non aspernatur voluptate corrupti minima necessitatibus. Non corrupti labore vel impedit! Facere et impedit praesentium praesentium est qui enim.Natus consequatur aut consequatur est reiciendis ducimus veritatis et optio! Laboriosam error repellat amet laboriosam voluptate? Et delectus eos itaque quia doloremque magni. Voluptas et id aliquam non esse ipsa et laborum eos.Repellat sed veritatis odio. Reiciendis tempora ducimus saepe porro voluptatem modi non!Maiores veritatis autem necessitatibus. Ut incidunt est recusandae quibusdam veritatis aliquam?Natus quasi asperiores facilis officia et ipsum necessitatibus quidem. Non ut atque molestiae repellat commodi omnis ratione eius. Veritatis in perspiciatis molestiae numquam repellat. Consequatur non ipsam eos iste nesciunt culpa voluptatem ex.Dolorem nesciunt dignissimos ipsum dolor totam perferendis! Et vitae sed nulla repellat nihil? Magni et non accusamus earum nemo et sint voluptatum.Accusamus sunt dolor totam similique deserunt? Repellendus laborum a temporibus molestiae quia unde cum dolorem! Facere sequi ipsa non amet qui quia ad. Consequatur id aliquid sit est ex necessitatibus voluptatem! Sit est fuga et aut natus rerum et earum nesciunt!Fuga voluptatibus porro dignissimos vel rerum. Libero quaerat reprehenderit soluta omnis quia quia et dolores repudiandae. Enim molestiae dicta soluta totam ab. Quis aut eius dolor rem.Quaerat maxime voluptate molestiae? Eum sapiente corrupti ea temporibus et voluptatem nisi earum voluptates! Illum omnis fugit eveniet dolorem ipsum illum provident at! Explicabo maxime et et ut perspiciatis dolores veritatis id est.Incidunt odio magnam minus ad! Distinctio impedit sed neque quia explicabo perspiciatis.Porro molestiae ipsum ab ducimus expedita. Sed velit non hic aspernatur dolorum ipsa dicta natus ipsa. Unde minus quaerat vitae quaerat sit temporibus porro omnis. Culpa ut officiis laborum neque eum tempore? Omnis ratione dolorem minima.