breezy_pdf_lite 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +22 -0
- data/.travis.yml +5 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +40 -0
- data/LICENSE.txt +165 -0
- data/README.md +74 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/breezy_pdf_lite.gemspec +29 -0
- data/example/config.ru +15 -0
- data/example/ex.html +366 -0
- data/example/pragmatic.rb +31 -0
- data/lib/breezy_pdf_lite.rb +33 -0
- data/lib/breezy_pdf_lite/client.rb +24 -0
- data/lib/breezy_pdf_lite/intercept.rb +10 -0
- data/lib/breezy_pdf_lite/intercept/base.rb +44 -0
- data/lib/breezy_pdf_lite/intercept/html.rb +49 -0
- data/lib/breezy_pdf_lite/interceptor.rb +43 -0
- data/lib/breezy_pdf_lite/middleware.rb +14 -0
- data/lib/breezy_pdf_lite/render_request.rb +20 -0
- data/lib/breezy_pdf_lite/util.rb +49 -0
- data/lib/breezy_pdf_lite/version.rb +5 -0
- metadata +139 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4645bb1f1bbd92cf3cf60199b151cbc56bb3b19e
|
4
|
+
data.tar.gz: 6fdd5da0ff5367451b01a3b7efd66045e63a5b0d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 28bbd3ba22f00f49d5dc0cc4037636db49250915bbf15b45f9e339add01eae7765db092cdb5c3c27c6c2f8c96520041cbd5dbd2c875cc75331dbcb0fb41aada0
|
7
|
+
data.tar.gz: dc8f6dd3f1e6dbc7733fad8d83be440a0d21f7e2dd2c20098fca05dad00985e421646a659e2d9ab9d2ca3375540d72ae47c487051660a8223b8a7aa9f40f9bda
|
data/.gitignore
ADDED
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.3
|
3
|
+
Style/StringLiterals:
|
4
|
+
EnforcedStyle: double_quotes
|
5
|
+
Metrics/LineLength:
|
6
|
+
Max: 110
|
7
|
+
Metrics/MethodLength:
|
8
|
+
Max: 20
|
9
|
+
Style/ClassAndModuleChildren:
|
10
|
+
Enabled: false
|
11
|
+
Style/ClassVars:
|
12
|
+
Enabled: false
|
13
|
+
Metrics/CyclomaticComplexity:
|
14
|
+
Enabled: false
|
15
|
+
Metrics/PerceivedComplexity:
|
16
|
+
Enabled: false
|
17
|
+
Metrics/AbcSize:
|
18
|
+
Enabled: false
|
19
|
+
Security/Open:
|
20
|
+
Enabled: false
|
21
|
+
Naming/HeredocDelimiterNaming:
|
22
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
breezy_pdf_lite (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.4.0)
|
10
|
+
minitest (5.11.3)
|
11
|
+
minitest-stub-const (0.6)
|
12
|
+
parallel (1.12.1)
|
13
|
+
parser (2.5.1.0)
|
14
|
+
ast (~> 2.4.0)
|
15
|
+
powerpack (0.1.2)
|
16
|
+
rainbow (3.0.0)
|
17
|
+
rake (10.5.0)
|
18
|
+
rubocop (0.54.0)
|
19
|
+
parallel (~> 1.10)
|
20
|
+
parser (>= 2.5)
|
21
|
+
powerpack (~> 0.1)
|
22
|
+
rainbow (>= 2.2.2, < 4.0)
|
23
|
+
ruby-progressbar (~> 1.7)
|
24
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
25
|
+
ruby-progressbar (1.9.0)
|
26
|
+
unicode-display_width (1.4.0)
|
27
|
+
|
28
|
+
PLATFORMS
|
29
|
+
ruby
|
30
|
+
|
31
|
+
DEPENDENCIES
|
32
|
+
breezy_pdf_lite!
|
33
|
+
bundler (~> 1.16)
|
34
|
+
minitest (~> 5.0)
|
35
|
+
minitest-stub-const (~> 0.6)
|
36
|
+
rake (~> 10.0)
|
37
|
+
rubocop (= 0.54)
|
38
|
+
|
39
|
+
BUNDLED WITH
|
40
|
+
1.16.0
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
GNU LESSER GENERAL PUBLIC LICENSE
|
2
|
+
Version 3, 29 June 2007
|
3
|
+
|
4
|
+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
5
|
+
Everyone is permitted to copy and distribute verbatim copies
|
6
|
+
of this license document, but changing it is not allowed.
|
7
|
+
|
8
|
+
|
9
|
+
This version of the GNU Lesser General Public License incorporates
|
10
|
+
the terms and conditions of version 3 of the GNU General Public
|
11
|
+
License, supplemented by the additional permissions listed below.
|
12
|
+
|
13
|
+
0. Additional Definitions.
|
14
|
+
|
15
|
+
As used herein, "this License" refers to version 3 of the GNU Lesser
|
16
|
+
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
17
|
+
General Public License.
|
18
|
+
|
19
|
+
"The Library" refers to a covered work governed by this License,
|
20
|
+
other than an Application or a Combined Work as defined below.
|
21
|
+
|
22
|
+
An "Application" is any work that makes use of an interface provided
|
23
|
+
by the Library, but which is not otherwise based on the Library.
|
24
|
+
Defining a subclass of a class defined by the Library is deemed a mode
|
25
|
+
of using an interface provided by the Library.
|
26
|
+
|
27
|
+
A "Combined Work" is a work produced by combining or linking an
|
28
|
+
Application with the Library. The particular version of the Library
|
29
|
+
with which the Combined Work was made is also called the "Linked
|
30
|
+
Version".
|
31
|
+
|
32
|
+
The "Minimal Corresponding Source" for a Combined Work means the
|
33
|
+
Corresponding Source for the Combined Work, excluding any source code
|
34
|
+
for portions of the Combined Work that, considered in isolation, are
|
35
|
+
based on the Application, and not on the Linked Version.
|
36
|
+
|
37
|
+
The "Corresponding Application Code" for a Combined Work means the
|
38
|
+
object code and/or source code for the Application, including any data
|
39
|
+
and utility programs needed for reproducing the Combined Work from the
|
40
|
+
Application, but excluding the System Libraries of the Combined Work.
|
41
|
+
|
42
|
+
1. Exception to Section 3 of the GNU GPL.
|
43
|
+
|
44
|
+
You may convey a covered work under sections 3 and 4 of this License
|
45
|
+
without being bound by section 3 of the GNU GPL.
|
46
|
+
|
47
|
+
2. Conveying Modified Versions.
|
48
|
+
|
49
|
+
If you modify a copy of the Library, and, in your modifications, a
|
50
|
+
facility refers to a function or data to be supplied by an Application
|
51
|
+
that uses the facility (other than as an argument passed when the
|
52
|
+
facility is invoked), then you may convey a copy of the modified
|
53
|
+
version:
|
54
|
+
|
55
|
+
a) under this License, provided that you make a good faith effort to
|
56
|
+
ensure that, in the event an Application does not supply the
|
57
|
+
function or data, the facility still operates, and performs
|
58
|
+
whatever part of its purpose remains meaningful, or
|
59
|
+
|
60
|
+
b) under the GNU GPL, with none of the additional permissions of
|
61
|
+
this License applicable to that copy.
|
62
|
+
|
63
|
+
3. Object Code Incorporating Material from Library Header Files.
|
64
|
+
|
65
|
+
The object code form of an Application may incorporate material from
|
66
|
+
a header file that is part of the Library. You may convey such object
|
67
|
+
code under terms of your choice, provided that, if the incorporated
|
68
|
+
material is not limited to numerical parameters, data structure
|
69
|
+
layouts and accessors, or small macros, inline functions and templates
|
70
|
+
(ten or fewer lines in length), you do both of the following:
|
71
|
+
|
72
|
+
a) Give prominent notice with each copy of the object code that the
|
73
|
+
Library is used in it and that the Library and its use are
|
74
|
+
covered by this License.
|
75
|
+
|
76
|
+
b) Accompany the object code with a copy of the GNU GPL and this license
|
77
|
+
document.
|
78
|
+
|
79
|
+
4. Combined Works.
|
80
|
+
|
81
|
+
You may convey a Combined Work under terms of your choice that,
|
82
|
+
taken together, effectively do not restrict modification of the
|
83
|
+
portions of the Library contained in the Combined Work and reverse
|
84
|
+
engineering for debugging such modifications, if you also do each of
|
85
|
+
the following:
|
86
|
+
|
87
|
+
a) Give prominent notice with each copy of the Combined Work that
|
88
|
+
the Library is used in it and that the Library and its use are
|
89
|
+
covered by this License.
|
90
|
+
|
91
|
+
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
92
|
+
document.
|
93
|
+
|
94
|
+
c) For a Combined Work that displays copyright notices during
|
95
|
+
execution, include the copyright notice for the Library among
|
96
|
+
these notices, as well as a reference directing the user to the
|
97
|
+
copies of the GNU GPL and this license document.
|
98
|
+
|
99
|
+
d) Do one of the following:
|
100
|
+
|
101
|
+
0) Convey the Minimal Corresponding Source under the terms of this
|
102
|
+
License, and the Corresponding Application Code in a form
|
103
|
+
suitable for, and under terms that permit, the user to
|
104
|
+
recombine or relink the Application with a modified version of
|
105
|
+
the Linked Version to produce a modified Combined Work, in the
|
106
|
+
manner specified by section 6 of the GNU GPL for conveying
|
107
|
+
Corresponding Source.
|
108
|
+
|
109
|
+
1) Use a suitable shared library mechanism for linking with the
|
110
|
+
Library. A suitable mechanism is one that (a) uses at run time
|
111
|
+
a copy of the Library already present on the user's computer
|
112
|
+
system, and (b) will operate properly with a modified version
|
113
|
+
of the Library that is interface-compatible with the Linked
|
114
|
+
Version.
|
115
|
+
|
116
|
+
e) Provide Installation Information, but only if you would otherwise
|
117
|
+
be required to provide such information under section 6 of the
|
118
|
+
GNU GPL, and only to the extent that such information is
|
119
|
+
necessary to install and execute a modified version of the
|
120
|
+
Combined Work produced by recombining or relinking the
|
121
|
+
Application with a modified version of the Linked Version. (If
|
122
|
+
you use option 4d0, the Installation Information must accompany
|
123
|
+
the Minimal Corresponding Source and Corresponding Application
|
124
|
+
Code. If you use option 4d1, you must provide the Installation
|
125
|
+
Information in the manner specified by section 6 of the GNU GPL
|
126
|
+
for conveying Corresponding Source.)
|
127
|
+
|
128
|
+
5. Combined Libraries.
|
129
|
+
|
130
|
+
You may place library facilities that are a work based on the
|
131
|
+
Library side by side in a single library together with other library
|
132
|
+
facilities that are not Applications and are not covered by this
|
133
|
+
License, and convey such a combined library under terms of your
|
134
|
+
choice, if you do both of the following:
|
135
|
+
|
136
|
+
a) Accompany the combined library with a copy of the same work based
|
137
|
+
on the Library, uncombined with any other library facilities,
|
138
|
+
conveyed under the terms of this License.
|
139
|
+
|
140
|
+
b) Give prominent notice with the combined library that part of it
|
141
|
+
is a work based on the Library, and explaining where to find the
|
142
|
+
accompanying uncombined form of the same work.
|
143
|
+
|
144
|
+
6. Revised Versions of the GNU Lesser General Public License.
|
145
|
+
|
146
|
+
The Free Software Foundation may publish revised and/or new versions
|
147
|
+
of the GNU Lesser General Public License from time to time. Such new
|
148
|
+
versions will be similar in spirit to the present version, but may
|
149
|
+
differ in detail to address new problems or concerns.
|
150
|
+
|
151
|
+
Each version is given a distinguishing version number. If the
|
152
|
+
Library as you received it specifies that a certain numbered version
|
153
|
+
of the GNU Lesser General Public License "or any later version"
|
154
|
+
applies to it, you have the option of following the terms and
|
155
|
+
conditions either of that published version or of any later version
|
156
|
+
published by the Free Software Foundation. If the Library as you
|
157
|
+
received it does not specify a version number of the GNU Lesser
|
158
|
+
General Public License, you may choose any version of the GNU Lesser
|
159
|
+
General Public License ever published by the Free Software Foundation.
|
160
|
+
|
161
|
+
If the Library as you received it specifies that a proxy can decide
|
162
|
+
whether future versions of the GNU Lesser General Public License shall
|
163
|
+
apply, that proxy's public statement of acceptance of any version is
|
164
|
+
permanent authorization for you to choose that version for the
|
165
|
+
Library.
|
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# BreezyPDFLite
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/danielwestendorf/breezy_pdf_lite-ruby.svg?branch=master)](https://travis-ci.org/danielwestendorf/breezy_pdf_lite-ruby)
|
4
|
+
|
5
|
+
A ruby client for [BreezyPDFLite](https://github.com/danielwestendorf/breezy-pdf-lite), a one-click-to-deploy microservice for converting HTML to PDF with Google Chrome. Send the library a chunk of HTML, get a PDF of it back. Configure how the PDF is rendered via [`meta` tags](https://github.com/danielwestendorf/breezy-pdf-lite#2-configure-with-meta-tags-optional) in the HTML.
|
6
|
+
|
7
|
+
Use pragmatically, or as a Rack Middleware.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'breezy_pdf_lite'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install breezy_pdf_lite
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
BreezyPDFLite requires some configuration before you can use it. Somewhere in your application (perhaps in `config/intializers/breezy_pdf_lite.rb`), configure the `base_url`and the `secret_api_key` of your service. Get these from your Heroku configuration.
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
BreezyPDFLite.setup do |config|
|
31
|
+
config.secret_api_key = ENV["BREEZYPDF_SECRET_API_KEY"]
|
32
|
+
config.base_url = ENV.fetch("BREEZYPDF_BASE_URL", "http://localhost:5001")
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
### Middleware
|
37
|
+
|
38
|
+
Add the Middleware to your stack.
|
39
|
+
|
40
|
+
_Ruby on Rails_
|
41
|
+
```ruby
|
42
|
+
# config/application.rb
|
43
|
+
config.middleware.use BreezyPDFLite::Middleware
|
44
|
+
```
|
45
|
+
|
46
|
+
Any URL ending in `.pdf` will be intercepted, rendered as HTML, rendered to a PDF, and then returned to the client.
|
47
|
+
|
48
|
+
_Rack/Sinatra/etc_
|
49
|
+
|
50
|
+
See `example/config.ru`
|
51
|
+
|
52
|
+
### Pragmatic
|
53
|
+
|
54
|
+
See `example/pragmatic.rb`
|
55
|
+
|
56
|
+
|
57
|
+
## Examples
|
58
|
+
Examples depend on the [BreezyPDFLite](https://github.com/danielwestendorf/breezy-pdf-lite) microservice being avialable.
|
59
|
+
|
60
|
+
_Middleware_
|
61
|
+
|
62
|
+
`BREEZYPDF_SECRET_API_KEY=YOURSECRETKEY BREEZYPDF_BASE_URL=https://YOURHEROKUAPPORWHATEVER.herokuapp.com/ rackup example/config.ru`
|
63
|
+
|
64
|
+
Visit `https://localhost:9292` and click the link to download the PDF.
|
65
|
+
|
66
|
+
_Pragmatic_
|
67
|
+
|
68
|
+
`BREEZYPDF_SECRET_API_KEY=YOURSECRETKEY BREEZYPDF_BASE_URL=https://YOURHEROKUAPPORWHATEVER.herokuapp.com/ ruby example/pragmatic.rb`
|
69
|
+
|
70
|
+
The PDF will be downloaded to `example/example.pdf`
|
71
|
+
|
72
|
+
## License
|
73
|
+
|
74
|
+
See `LICENSE.txt`.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "bundler/setup"
|
5
|
+
require "breezy_pdf_lite"
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require "irb"
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path("lib", __dir__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require "breezy_pdf_lite/version"
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = "breezy_pdf_lite"
|
10
|
+
spec.version = BreezyPDFLite::VERSION
|
11
|
+
spec.authors = ["Daniel Westendorf"]
|
12
|
+
spec.email = ["daniel@prowestech.com"]
|
13
|
+
|
14
|
+
spec.summary = "Ruby/rack middleware for BreezyPDF Lite. HTML to PDF."
|
15
|
+
spec.license = "GPLv3"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
25
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
26
|
+
spec.add_development_dependency "minitest-stub-const", "~> 0.6"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "rubocop", "0.54"
|
29
|
+
end
|
data/example/config.ru
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
|
4
|
+
require "breezy_pdf_lite"
|
5
|
+
|
6
|
+
html = File.read(File.expand_path("ex.html", __dir__))
|
7
|
+
|
8
|
+
BreezyPDFLite.setup do |config|
|
9
|
+
config.secret_api_key = ENV["BREEZYPDF_SECRET_API_KEY"]
|
10
|
+
config.base_url = ENV.fetch("BREEZYPDF_BASE_URL", "http://localhost:5001")
|
11
|
+
config.middleware_path_matchers = [/as-pdf.pdf/]
|
12
|
+
end
|
13
|
+
|
14
|
+
use BreezyPDFLite::Middleware
|
15
|
+
run proc { |_env| ["200", { "Content-Type" => "text/html" }, [html]] }
|
data/example/ex.html
ADDED
@@ -0,0 +1,366 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta name="breezy-pdf-variable" content="pdfRenderReady">
|
7
|
+
<meta name="breezy-pdf-displayBackground" content="true">
|
8
|
+
<meta name="breezy-pdf-marginTop" content="0.4">
|
9
|
+
<meta name="breezy-pdf-marginBottom" content="0.7">
|
10
|
+
<meta name="breezy-pdf-footerTemplate" content=" <style type="text/css">
|
11
|
+
#footer {
|
12
|
+
font-size: 12px;
|
13
|
+
font-weight: 400;
|
14
|
+
line-height: 1.5;
|
15
|
+
color: #212529;
|
16
|
+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
|
17
|
+
width: 100%;
|
18
|
+
align-items: flex-end;
|
19
|
+
padding-bottom: 0.4cm;
|
20
|
+
color: lightgrey;
|
21
|
+
}
|
22
|
+
|
23
|
+
.left {
|
24
|
+
flex: none;
|
25
|
+
padding-left: 0.7cm;
|
26
|
+
padding-right: 0.1cm;
|
27
|
+
}
|
28
|
+
|
29
|
+
.center {
|
30
|
+
flex: auto;
|
31
|
+
padding-left: 0.7cm;
|
32
|
+
padding-right: 0.7cm;
|
33
|
+
text-align: center;
|
34
|
+
}
|
35
|
+
|
36
|
+
.right {
|
37
|
+
flex: none;
|
38
|
+
padding-left: 0.1cm;
|
39
|
+
padding-right: 0.7cm;
|
40
|
+
}
|
41
|
+
|
42
|
+
.grow {
|
43
|
+
flex: auto;
|
44
|
+
}
|
45
|
+
|
46
|
+
.text {
|
47
|
+
font-size: 8px;
|
48
|
+
overflow: hidden;
|
49
|
+
text-overflow: ellipsis;
|
50
|
+
white-space: nowrap;
|
51
|
+
}
|
52
|
+
|
53
|
+
.text img {
|
54
|
+
height: 16px;
|
55
|
+
}
|
56
|
+
</style>
|
57
|
+
<div id="footer">
|
58
|
+
<div class="left text">
|
59
|
+
<span class="date"></span>
|
60
|
+
</div>
|
61
|
+
<div class="text center grow">
|
62
|
+
<a href="https://breezypdf.com">
|
63
|
+
<img src="data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwNnB4IiBoZWlnaHQ9IjczcHgiIHZpZXdCb3g9IjAgMCA0MDYgNzMiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iTGlnaHRCRyI+CiAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTQuMDAwMDAwLCAxMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMjAuNTExMjc4LDIuMzUgTDIyOC43MDU5ODUsMi4zNSBDMjMzLjE0MjQzLDIuMzUgMjM2LjMzMjQsMi43NTc5MzY4OCAyMzguMjkxNTk0LDMuNTY0NTM5MzQgQzI0MC4yNTA3ODksNC4zNzExNDE4IDI0MS44MDQ5NTcsNS42NjkxMjI3NyAyNDIuOTM1MjYyLDcuNDc3MDI0ODMgQzI0NC4wNjU1NjYsOS4yNzU2NTU2IDI0NC42MzA3MTgsMTEuNDM1ODY2OCAyNDQuNjMwNzE4LDEzLjk0NTI5NjcgQzI0NC42MzA3MTgsMTYuNzM1OTU1OCAyNDMuODg2NjAxLDE5LjA1Mzc3ODkgMjQyLjQwNzc4NiwyMC44OTg3NjYxIEMyNDAuOTI4OTcxLDIyLjc0OTkzNDIgMjM4LjkxMzI2MiwyNC4wMzI0NjMxIDIzNi4zNzk0OTYsMjQuNzUyNTMzNSBDMjM0Ljg5MTI2MiwyNS4xNjk3NDE2IDIzMi4xODE2NzEsMjUuMzgyOTgxNCAyMjguMjQ0NDQ0LDI1LjM4Mjk4MTQgTDIyOC4yNDQ0NDQsNDIuMyBMMjIwLjUxMTI3OCw0Mi4zIEwyMjAuNTExMjc4LDIuMzUgWiBNMjI4LjI0NDQ0NCwxNy45NjkwMzc3IEwyMzAuNjkzNDM3LDE3Ljk2OTAzNzcgQzIzMi42MjQzNzQsMTcuOTY5MDM3NyAyMzMuOTcxMzIsMTcuODI5OTY4MyAyMzQuNzI0ODU2LDE3LjU2MTEwMDggQzIzNS40NzgzOTIsMTcuMjkyMjMzMyAyMzYuMDY4NjYyLDE2LjgzNzk0IDIzNi41MDUwODUsMTYuMjE2NzYzNCBDMjM2LjkzODM2OSwxNS41OTU1ODY4IDIzNy4xNTE4NzEsMTQuODM1MzQwOCAyMzcuMTUxODcxLDEzLjk0NTI5NjcgQzIzNy4xNTE4NzEsMTIuNDA5MzUyNSAyMzYuNTM5NjIzLDExLjI4NzUyNjEgMjM1LjMzNzEwNCwxMC41ODI5MDc5IEMyMzQuNDUxNjk5LDEwLjA1NDQ0NDIgMjMyLjgxMjc1OCw5Ljc5NDg0Nzk5IDIzMC40MjAyOCw5Ljc5NDg0Nzk5IEwyMjguMjQ0NDQ0LDkuNzk0ODQ3OTkgTDIyOC4yNDQ0NDQsMTcuOTY5MDM3NyBaIE0yNTIuMjEwMDM3LDIuMzUgTDI2MS4zNzE3ODIsMi4zNSBDMjY3LjI3NzYyMywyLjM1IDI3MS42NjY5NzEsMy4wNzMxNjA4MyAyNzQuNTMwNDA5LDQuNTEwMjExMTkgQzI3Ny40MDAxMjYsNS45NTY1MzI4NCAyNzkuNzY0MzQ3LDguMjkyODk4NTggMjgxLjYxOTkzLDExLjUzNzg1MSBDMjgzLjQ3NTUxMywxNC43NzA0NDE3IDI4NC40MDgwMTQsMTguNTUzMTI5MSAyODQuNDA4MDE0LDIyLjg4MjgyMjggQzI4NC40MDgwMTQsMjUuOTYwODkxOSAyODMuODg5OTU4LDI4Ljc4NTU0NTggMjgyLjg1Mzg0NSwzMS4zNzIyMzY0IEMyODEuODA4MzE0LDMzLjk0OTY1NTggMjgwLjM3NjU5NSwzNi4wOTEzMjQ0IDI3OC41NDkyNjksMzcuNzk0MTUxOCBDMjc2LjcxMjUyNSwzOS40OTA3OTgzIDI3NC43MzQ0OTIsNDAuNjY4MjUyNSAyNzIuNTk5NDczLDQxLjMyNjUxNDMgQzI3MC40NzA3MzMsNDEuOTc1NTA0OCAyNjYuNzY4OTg2LDQyLjMgMjYxLjUwNjc5MSw0Mi4zIEwyNTIuMjEwMDM3LDQyLjMgTDI1Mi4yMTAwMzcsMi4zNSBaIE0yNTkuOTExODA2LDkuNjgwNTAyMDUgTDI1OS45MTE4MDYsMzQuODU4MjQyNCBMMjYzLjQ5NDI0MywzNC44NTgyNDI0IEMyNjcuMDIzMzA0LDM0Ljg1ODI0MjQgMjY5LjU4NTMyNywzNC40NTk1NzY5IDI3MS4xNzcxNzMsMzMuNjYyMjQ1NyBDMjcyLjc2OTAxOCwzMi44NjQ5MTQ1IDI3NC4wNjU3MjksMzEuNTI5ODQ4NCAyNzUuMDgzMDAyLDI5LjY0Nzc3NiBDMjc2LjA5Mzk5NywyNy43NjU3MDM2IDI3Ni41OTk0OTQsMjUuNDUwOTcwOCAyNzYuNTk5NDk0LDIyLjY5NzM5NjkgQzI3Ni41OTk0OTQsMTguNDYwNDE2MiAyNzUuMzkzODM2LDE1LjE2OTEwNzMgMjcyLjk4NTY2LDEyLjgzMjc0MTUgQzI3MC44MTkyNDMsMTAuNzM3NDI5NCAyNjcuMzM0MTM4LDkuNjgwNTAyMDUgMjYyLjUzMzQ4NCw5LjY4MDUwMjA1IEwyNTkuOTExODA2LDkuNjgwNTAyMDUgWiBNMjkxLjg1NTQ2NCwyLjM1IEwzMTIsMi4zNSBMMzEyLDkuNzY3MDM0MTEgTDI5OS40OTEyOTgsOS43NjcwMzQxMSBMMjk5LjQ5MTI5OCwxNy4wMTQwOTQ1IEwzMTIsMTcuMDE0MDk0NSBMMzEyLDI0LjMyNjA1NCBMMjk5LjQ5MTI5OCwyNC4zMjYwNTQgTDI5OS40OTEyOTgsNDIuMyBMMjkxLjg1NTQ2NCw0Mi4zIEwyOTEuODU1NDY0LDIuMzUgWiIgaWQ9IkZpbGwtMiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LjcyNjY2OTcsMjguNjI2NDM4NyBMMjQuNzI2NjY5NywzMi4yMjk2NTYxIEwwLDIwLjY2MzkyOTUgTDAsMTcuNDU2MTQ4NiBMMjQuNzI2NjY5Nyw1Ljg0Mjk2OTY0IEwyNC43MjY2Njk3LDkuNDY4MzMxNDMgTDQuNjQwNjY1NSwxOS4wOTE2NzQgTDI0LjcyNjY2OTcsMjguNjI2NDM4NyBaIE0zMS4xNjcwOTAzLDM3LjE4Njg0OCBMMzEuMTY3MDkwMywwIEwzNC41MDI0NzI3LDAgTDM0LjUwMjQ3MjcsMTQuOTY2NDgwNCBDMzUuOTA2MDM2LDEzLjE5MTc2MTUgMzcuNDc1NDQ3LDExLjg2OTQyMTggMzkuMjE2ODQ4MywxMC45ODM2NDQxIEM0MC45NTgyNDk2LDEwLjExMDUyMDMgNDIuODYyNDI3Myw5LjY2NDQ2NzkzIDQ0LjkzODU5NTQsOS42NjQ0Njc5MyBDNDguNjI0MTAwNyw5LjY2NDQ2NzkzIDUxLjc2OTA2NTMsMTEuMDQzNzUwNCA1NC4zODI3MDI4LDEzLjc5NTk4ODQgQzU2Ljk5MDE5NzksMTYuNTQ4MjI2NCA1OC4yOTU0ODEsMTkuODkyMDM3NCA1OC4yOTU0ODEsMjMuODIxMDk0NCBDNTguMjk1NDgxLDI3LjY5OTUzNTYgNTYuOTgwOTg0MSwzMS4wMTgwMzg2IDU0LjM0Mjc3NjUsMzMuNzYwNzg2MiBDNTEuNzEwNzExNSwzNi41MDY2OTcyIDQ4LjU0MTE3NjgsMzcuODc2NDg5MiA0NC44MzcyNDQsMzcuODc2NDg5MiBDNDIuNzE1MDA3MSwzNy44NzY0ODkyIDQwLjc5MjQwMTgsMzcuNDA1MTI4OSAzOS4wNjk0MjgxLDM2LjQ3MTg5ODggQzM3LjM0NjQ1NDMsMzUuNTM4NjY4NiAzNS44MjYxODM0LDM0LjEzMDkxNDcgMzQuNTAyNDcyNywzMi4yNTQ5NjQgTDM0LjUwMjQ3MjcsMzcuMTg2ODQ4IEwzMS4xNjcwOTAzLDM3LjE4Njg0OCBaIE00NC41NzYxODczLDM0LjU1MTY1OTIgQzQ2LjQ0OTY1MjYsMzQuNTUxNjU5MiA0OC4xNjM0MTI1LDM0LjA3Mzk3MTkgNDkuNzQ4MTc5OSwzMy4xMzEyNTEzIEM1MS4zMjY4MDQ2LDMyLjE4ODUzMDcgNTIuNTg2MDE5LDMwLjg1NjcwMDUgNTMuNTE2NjA5MSwyOS4xNDg0MTQ5IEM1NC40NTY0MTI5LDI3LjQ0MDEyOTIgNTQuOTIzMjQzNiwyNS42MzA2MTE4IDU0LjkyMzI0MzYsMjMuNzE5ODYyNyBDNTQuOTIzMjQzNiwyMS44MTg2MDQgNTQuNDQ3MTk5MiwxOS45OTk1OTYxIDUzLjUwNzM5NTMsMTguMjcyMzI5NSBDNTIuNTY3NTkxNSwxNi41NDgyMjY0IDUxLjMwMjIzNDYsMTUuMjAwNTc4OSA0OS43MDgyNTM1LDE0LjI0MjA0MDggQzQ4LjEyMzQ4NjIsMTMuMjgzNTAyNyA0Ni40MzEyMjUsMTIuODAyNjUxOSA0NC42MjUzMjc0LDEyLjgwMjY1MTkgQzQyLjc4ODcxNzIsMTIuODAyNjUxOSA0MS4wNDczMTU5LDEzLjI4MzUwMjcgMzkuMzk0OTgxLDE0LjI0MjA0MDggQzM3Ljc0NTcxNzQsMTUuMjAwNTc4OSAzNi40NzExNDY4LDE2LjQ5NzYxMDYgMzUuNTg2NjI1NSwxOC4xMjM2NDU0IEMzNC43MDUxNzU1LDE5Ljc1NjAwNzMgMzQuMjU2NzcyMywyMS41ODEzNDIxIDM0LjI1Njc3MjMsMjMuNjI4MTIxNCBDMzQuMjU2NzcyMywyNi43MzQ2NzA1IDM1LjI1MTg1ODgsMjkuMzI1NTcwNCAzNy4yMzg5NjA0LDMxLjQxMzQ3NTEgQzM5LjIyNjA2MiwzMy41MDEzNzk4IDQxLjY3Mzg1MTksMzQuNTUxNjU5MiA0NC41NzYxODczLDM0LjU1MTY1OTIgWiBNNjMuMTM1Nzc4MSwxMC4zNTQxMDkyIEw2Ni41NTcxNTU1LDEwLjM1NDEwOTIgTDY2LjU1NzE1NTUsMTQuMjc2ODM5MiBDNjcuNTc5ODgzMywxMi43MzYyMTg2IDY4LjY1Nzg5MzYsMTEuNTgxNTQ0MSA2OS43ODUwNDQsMTAuODE1OTc5IEM3MC45MjE0MDgxLDEwLjA1MDQxMzkgNzIuMDk3Njk4Niw5LjY2NDQ2NzkzIDczLjMzMjM0MjksOS42NjQ0Njc5MyBDNzQuMjU2NzkwNSw5LjY2NDQ2NzkzIDc1LjI0NTczNDQsOS45NzQ0OTAxNCA3Ni4yOTkxNzQ3LDEwLjU4MTg4MDYgTDc0LjU1MTYzMDksMTMuNDk1NDU2NyBDNzMuODQ4MzEzNiwxMy4xNzI3ODA1IDczLjI1ODYzMjgsMTMuMDI0MDk2NCA3Mi43NzY0NDU4LDEzLjAyNDA5NjQgQzcxLjY2NDY1MTcsMTMuMDI0MDk2NCA3MC41ODY2NDE0LDEzLjQ5NTQ1NjcgNjkuNTQ4NTU3NCwxNC40MzUwMTM4IEM2OC41MTA0NzM0LDE1LjM4NzIyNDkgNjcuNzE4MDg5NywxNi44NTE5MjE3IDY3LjE4MDYyMDIsMTguODM4NTk0NiBDNjYuNzYyOTI5NiwyMC4zNjk3MjQ3IDY2LjU1NzE1NTUsMjMuNDYwNDU2NCA2Ni41NTcxNTU1LDI4LjExMzk1MyBMNjYuNTU3MTU1NSwzNy4xODY4NDggTDYzLjEzNTc3ODEsMzcuMTg2ODQ4IEw2My4xMzU3NzgxLDEwLjM1NDEwOTIgWiBNMTAxLjA4NDE5OCwyOC4yODE2MTgxIEwxMDMuOTAzNjEsMjkuODEyNzQ4MiBDMTAyLjk3OTE2MiwzMS42OTE4NjI0IDEwMS45MTAzNjYsMzMuMTk3Njg0NiAxMDAuNzAwMjkxLDM0LjM1MjM1OTIgQzk5LjQ4MTAwMzQsMzUuNTAzODcwMiA5OC4xMTczNjY0LDM2LjM4MDE1NzUgOTYuNjAzMjM4LDM2Ljk3NDg5NCBDOTUuMDg2MDM4MywzNy41NzU5NTc1IDkzLjM2OTIwNywzNy44NzY0ODkyIDkxLjQ1NTgxNTUsMzcuODc2NDg5MiBDODcuMjA4MjcwNiwzNy44NzY0ODkyIDgzLjg4ODI0NDUsMzYuNDQ2NTkwOCA4MS40OTU3MzczLDMzLjU3NzMwMzYgQzc5LjEwMDE1ODgsMzAuNzA0ODUyOSA3Ny45MDg1MTIxLDI3LjQ2NTQzNzIgNzcuOTA4NTEyMSwyMy44NDY0MDI0IEM3Ny45MDg1MTIxLDIwLjQ0NTY0ODUgNzguOTIyMDI2LDE3LjQwODY5NjIgODAuOTQ5MDU0LDE0Ljc0ODE5OTUgQzgzLjUxMzU1MTUsMTEuMzYzMjYzMSA4Ni45NTY0Mjc3LDkuNjY0NDY3OTMgOTEuMjYyMzI2NSw5LjY2NDQ2NzkzIEM5NS42OTcyMTc5LDkuNjY0NDY3OTMgOTkuMjQ0NTE2OCwxMS40MDQzODg1IDEwMS44OTE5MzgsMTQuODc0NzM5MiBDMTAzLjc4MDc2LDE3LjMyMzI4MiAxMDQuNzM1OTIsMjAuMzc5MjE1MiAxMDQuNzY5NzA0LDI0LjAzOTM3NTQgTDgxLjM1NzUzMDgsMjQuMDM5Mzc1NCBDODEuNDE1ODg0NywyNy4xNzEyMzI0IDgyLjM4NjQwMTEsMjkuNzMwNDk3NCA4NC4yNTA2NTI1LDMxLjcyNjY2MDggQzg2LjEyMTA0NjUsMzMuNzE5NjYwOCA4OC40MjQ0ODczLDM0LjcyMjQ4NzcgOTEuMTcwMTg4OCwzNC43MjI0ODc3IEM5Mi40OTM4OTk1LDM0LjcyMjQ4NzcgOTMuNzg2ODk3NiwzNC40ODUyMjU4IDk1LjAzNjg5ODIsMzQuMDA3NTM4NSBDOTYuMjg2ODk4OCwzMy41MjY2ODc4IDk3LjM1NTY5NTMsMzIuODkzOTg5NCA5OC4yMzEwMDI5LDMyLjEwMzExNjQgQzk5LjEwNjMxMDQsMzEuMzIxNzMzOSAxMDAuMDYxNDcxLDMwLjA0MDUxOTYgMTAxLjA4NDE5OCwyOC4yODE2MTgxIFogTTEwMS4wODQxOTgsMjEuMDU5MzY2IEMxMDAuNjM1Nzk1LDE5LjIxODIxMzYgOTkuOTgxNjE3OSwxNy43NDQwMjY0IDk5LjEzMDg4MDQsMTYuNjQ5NDU4MiBDOTguMjc0MDAwNCwxNS41NDg1NjMgOTcuMTQzNzc4OCwxNC42NTMyOTQ3IDk1Ljc0MDIxNTUsMTMuOTgyNjM0NCBDOTQuMzMzNTgwOSwxMy4zMDg4MTA3IDkyLjg2MjQ1MDEsMTIuOTcwMzE3IDkxLjMxMTQ2NjUsMTIuOTcwMzE3IEM4OC43NTkyNTQxLDEyLjk3MDMxNyA4Ni41NjMzMDcxLDEzLjgyMTI5NjQgODQuNzMyODM5NSwxNS41MTM3NjQ2IEM4My4zOTM3NzI1LDE2Ljc0NDM2MjkgODIuMzc3MTg3MywxOC41OTUwMDU3IDgxLjY5MjI5NzYsMjEuMDU5MzY2IEwxMDEuMDg0MTk4LDIxLjA1OTM2NiBaIE0xMzIuOTQ1MzkyLDI4LjI4MTYxODEgTDEzNS43NjQ4MDQsMjkuODEyNzQ4MiBDMTM0Ljg0MDM1NiwzMS42OTE4NjI0IDEzMy43NzE1NiwzMy4xOTc2ODQ2IDEzMi41NTg0MTQsMzQuMzUyMzU5MiBDMTMxLjM0MjE5NywzNS41MDM4NzAyIDEyOS45Nzg1NiwzNi4zODAxNTc1IDEyOC40NjQ0MzIsMzYuOTc0ODk0IEMxMjYuOTQ3MjMyLDM3LjU3NTk1NzUgMTI1LjIzMDQwMSwzNy44NzY0ODkyIDEyMy4zMTcwMDksMzcuODc2NDg5MiBDMTE5LjA2OTQ2NCwzNy44NzY0ODkyIDExNS43NDk0MzgsMzYuNDQ2NTkwOCAxMTMuMzU2OTMxLDMzLjU3NzMwMzYgQzExMC45NjEzNTMsMzAuNzA0ODUyOSAxMDkuNzY5NzA2LDI3LjQ2NTQzNzIgMTA5Ljc2OTcwNiwyMy44NDY0MDI0IEMxMDkuNzY5NzA2LDIwLjQ0NTY0ODUgMTEwLjc4MzIyLDE3LjQwODY5NjIgMTEyLjgxMDI0OCwxNC43NDgxOTk1IEMxMTUuMzc0NzQ1LDExLjM2MzI2MzEgMTE4LjgxNDU1LDkuNjY0NDY3OTMgMTIzLjEyMzUyLDkuNjY0NDY3OTMgQzEyNy41NTg0MTIsOS42NjQ0Njc5MyAxMzEuMTA1NzExLDExLjQwNDM4ODUgMTMzLjc1MzEzMiwxNC44NzQ3MzkyIEMxMzUuNjQxOTU0LDE3LjMyMzI4MiAxMzYuNTk3MTE0LDIwLjM3OTIxNTIgMTM2LjYzMDg5NywyNC4wMzkzNzU0IEwxMTMuMjE4NzI1LDI0LjAzOTM3NTQgQzExMy4yNzQwMDcsMjcuMTcxMjMyNCAxMTQuMjQ3NTk1LDI5LjczMDQ5NzQgMTE2LjEwODc3NSwzMS43MjY2NjA4IEMxMTcuOTgyMjQsMzMuNzE5NjYwOCAxMjAuMjg1NjgxLDM0LjcyMjQ4NzcgMTIzLjAzMTM4MywzNC43MjI0ODc3IEMxMjQuMzU1MDkzLDM0LjcyMjQ4NzcgMTI1LjY0NTAyLDM0LjQ4NTIyNTggMTI2Ljg5ODA5MiwzNC4wMDc1Mzg1IEMxMjguMTQ4MDkzLDMzLjUyNjY4NzggMTI5LjIxNjg4OSwzMi44OTM5ODk0IDEzMC4wOTIxOTcsMzIuMTAzMTE2NCBDMTMwLjk2NzUwNCwzMS4zMjE3MzM5IDEzMS45MjI2NjQsMzAuMDQwNTE5NiAxMzIuOTQ1MzkyLDI4LjI4MTYxODEgWiBNMTMyLjk0NTM5MiwyMS4wNTkzNjYgQzEzMi40OTY5ODksMTkuMjE4MjEzNiAxMzEuODQyODEyLDE3Ljc0NDAyNjQgMTMwLjk5MjA3NCwxNi42NDk0NTgyIEMxMzAuMTMyMTIzLDE1LjU0ODU2MyAxMjkuMDA0OTczLDE0LjY1MzI5NDcgMTI3LjYwMTQwOSwxMy45ODI2MzQ0IEMxMjYuMTk0Nzc1LDEzLjMwODgxMDcgMTI0LjcyMzY0NCwxMi45NzAzMTcgMTIzLjE3MjY2LDEyLjk3MDMxNyBDMTIwLjYyMDQ0OCwxMi45NzAzMTcgMTE4LjQyNDUwMSwxMy44MjEyOTY0IDExNi41OTQwMzMsMTUuNTEzNzY0NiBDMTE1LjI1MTg5NSwxNi43NDQzNjI5IDExNC4yMzgzODEsMTguNTk1MDA1NyAxMTMuNTUzNDkxLDIxLjA1OTM2NiBMMTMyLjk0NTM5MiwyMS4wNTkzNjYgWiBNMTQwLjc0MDIzNiwxMC4zNTQxMDkyIEwxNTkuODcxMDgsMTAuMzU0MTA5MiBMMTQ1LjExOTg0NSwzNC4xMzA5MTQ3IEwxNTkuMzk1MDM2LDM0LjEzMDkxNDcgTDE1OS4zOTUwMzYsMzcuMTg2ODQ4IEwxMzkuMzUyMDI5LDM3LjE4Njg0OCBMMTU0LjEwMDE5MywxMy4zOTEwNjE1IEwxNDAuNzQwMjM2LDEzLjM5MTA2MTUgTDE0MC43NDAyMzYsMTAuMzU0MTA5MiBaIE0xNjAuODk5OTUsMTAuMzU0MTA5MiBMMTY0LjQ0NzI0OSwxMC4zNTQxMDkyIEwxNzMuNDAzMDI3LDMxLjAyNzUyOTEgTDE4Mi4wODg1MzUsMTAuMzU0MTA5MiBMMTg1LjY1NzMzMywxMC4zNTQxMDkyIEwxNzAuMTE2Nzg1LDQ3IEwxNjYuNTc4Nyw0NyBMMTcxLjYwMzI3MiwzNS4xNjUzNzY2IEwxNjAuODk5OTUsMTAuMzU0MTA5MiBaIE0xODguNzQ3MDE0LDI4LjYyNjQzODcgTDIwOC44MzMwMTksMTkuMDkxNjc0IEwxODguNzQ3MDE0LDkuNDY4MzMxNDMgTDE4OC43NDcwMTQsNS44NDI5Njk2NCBMMjEzLjQ3MzY4NCwxNy40NTYxNDg2IEwyMTMuNDczNjg0LDIwLjY2MzkyOTUgTDE4OC43NDcwMTQsMzIuMjI5NjU2MSBMMTg4Ljc0NzAxNCwyOC42MjY0Mzg3IFoiIGlkPSJGaWxsLTMiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMiI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMCwwIEw1OC4zMzMzMzMzLDAgTDU4LjMzMzMzMzMsNDIuMzg3MDk2OCBMMCw0Mi4zODcwOTY4IEw3LjQzMzQ4NzUxLDIxLjE5MzU0ODQgTDAsMCBaIE0yNi40NjE2OTM1LDI4LjgyMTA1NTggTDI2LjQ2MTY5MzUsMjQuOTA2MDM2IEwxNi40NTY0MDYyLDIxLjE3NzI3MzUgTDI2LjQ2MTY5MzUsMTcuMzg3MDI4IEwyNi40NjE2OTM1LDEzLjQ3MjAwODEgTDEyLjkxOTUzMjcsMTkuMTEwMzYgTDEyLjkxOTUzMjcsMjMuMTgyNzA0IEwyNi40NjE2OTM1LDI4LjgyMTA1NTggWiBNMzEuMDc2MDU5NSwzMi4yNjc3MTk5IEwzOC4xNzU3NDkxLDEwLjEyMTE4NTIgTDM0LjQzMTMzMywxMC4xMjExODUyIEwyNy4zMzE2NDMzLDMyLjI2NzcxOTkgTDMxLjA3NjA1OTUsMzIuMjY3NzE5OSBaIE01Mi41ODc4NTk3LDIzLjE4MjcwNCBMNTIuNTg3ODU5NywxOS4xMTAzNiBMMzkuMDQzOTY5NCwxMy40NzIwMDgxIEwzOS4wNDM5Njk0LDE3LjM4NzAyOCBMNDkuMDUwOTg2MywyMS4xNzcyNzM1IEwzOS4wNDM5Njk0LDI0LjkwNjAzNiBMMzkuMDQzOTY5NCwyOC44MjEwNTU4IEw1Mi41ODc4NTk3LDIzLjE4MjcwNCBaIiBpZD0iQ29tYmluZWQtU2hhcGUiIGZpbGw9IiMxQTk2QzciPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC42NjY2NjY3LDMwLjYxMjkwMzIgTDY5LjU2NjUxMjUsMzAuNjEyOTAzMiBMNzcsNTEuODA2NDUxNiBMNjkuNTY2NTEyNSw3MyBMMTguNjY2NjY2Nyw3MyBMMTguNjY2NjY2NywzMC42MTI5MDMyIFogTTMyLjIwMDE3OTksNTkuMzQ3MTU5NSBMMzIuMjAwMTc5OSw1NC42MDAzMTEgTDM1LjUyOTUxMDYsNTQuNjAwMzExIEMzNi4zNzE3ODgsNTQuNTk0ODg2MSAzNy4xMTg5NDE3LDU0LjQ1NzQ1MzUgMzcuNzY0MDUzNiw1NC4xODk4MjE2IEMzOC40MDkxNjU1LDUzLjkxNjc2NDggMzguOTQ4Nzc2NSw1My41NDk2NzUyIDM5LjM4ODA3NTIsNTMuMDc0MDg2MiBDMzkuODI3MzczOSw1Mi41OTg0OTcyIDQwLjE1OTQ0MjIsNTIuMDUyMzgzNiA0MC4zODI1NTA2LDUxLjQzMzkzNyBDNDAuNjA1NjU5LDUwLjgxMzY4MjIgNDAuNzE4MDc4LDUwLjE1MDAyNzUgNDAuNzE4MDc4LDQ5LjQ0NjU4OTggQzQwLjcxODA3OCw0OC43MzQxMTA0IDQwLjYwNTY1OSw0OC4wNjY4MzkyIDQwLjM4MjU1MDYsNDcuNDQ0Nzc2IEM0MC4xNTk0NDIyLDQ2LjgyNDUyMTEgMzkuODI3MzczOSw0Ni4yNzQ3OTA4IDM5LjM4ODA3NTIsNDUuNzk5MjAxOCBDMzguOTQ4Nzc2NSw0NS4zMjM2MTI4IDM4LjQwOTE2NTUsNDQuOTUxMDk4MiAzNy43NjQwNTM2LDQ0LjY3OTg0OTcgQzM3LjExODk0MTcsNDQuNDEyMjE3OSAzNi4zNzE3ODgsNDQuMjcyOTc3IDM1LjUyOTUxMDYsNDQuMjY5MzYwMyBMMjcuODMzMTM1Nyw0NC4yNjkzNjAzIEwyNy44MzMxMzU3LDU5LjM0NzE1OTUgTDMyLjIwMDE3OTksNTkuMzQ3MTU5NSBaIE0zNC45Njc0MTU4LDUwLjYyMDE5MTYgTDMyLjIwMDE3OTksNTAuNjIwMTkxNiBMMzIuMjAwMTc5OSw0OC4yNDc2NzE1IEwzNC45Njc0MTU4LDQ4LjI0NzY3MTUgQzM1LjIxNjQ2Nyw0OC4yNDc2NzE1IDM1LjQzOTU3NTQsNDguMjg5MjYyOSAzNS42MzY3NDEsNDguMzc2MDYyNCBDMzUuODM1NjM2MSw0OC40NjI4NjE5IDM1Ljk5MTI5MzEsNDguNTk0ODY5NSAzNi4xMDg5MDA2LDQ4Ljc3MjA4NTIgQzM2LjIyNDc3ODYsNDguOTQ5MzAwOSAzNi4yODM1ODI0LDQ5LjE3MzUzMyAzNi4yODUzMTE5LDQ5LjQ0NjU4OTggQzM2LjI4MzU4MjQsNDkuNzA4Nzk2NyAzNi4yMjQ3Nzg2LDQ5LjkyNzYwMzggMzYuMTA4OTAwNiw1MC4xMDEyMDI4IEMzNS45OTEyOTMxLDUwLjI3NDgwMTggMzUuODM1NjM2MSw1MC40MDY4MDk0IDM1LjYzNjc0MSw1MC40OTM2MDg5IEMzNS40Mzk1NzU0LDUwLjU4MDQwODUgMzUuMjE2NDY3LDUwLjYyMDE5MTYgMzQuOTY3NDE1OCw1MC42MjAxOTE2IFogTTQ4LjYwOTg4ODksNTkuMzQ3MTU5NSBDNDkuNzQ0NDU1Niw1OS4zNDE3MzQ2IDUwLjc5MjU0NjMsNTkuMTc3MTc3MSA1MS43NDcyNDI2LDU4Ljg0NjI1NCBDNTIuNzA1Mzk4MSw1OC41MDk5MDU5IDUzLjUzOTAyNzksNTguMDE5ODUwMyA1NC4yNDgxMzIxLDU3LjM3NjA4NzIgQzU0Ljk1NzIzNjMsNTYuNzMyMzI0MSA1NS41MDg5NTQsNTUuOTQwMjc4NSA1NS45MDE1NTU2LDU1LjAwNzE4MzcgQzU2LjI5NDE1NzIsNTQuMDcyMjgwNiA1Ni40OTMwNTIzLDUzLjAwMTc1MzMgNTYuNDk5OTcwNCw1MS43OTc0MSBDNTYuNDkzMDUyMyw1MC41OTEyNTg0IDU2LjI5NDE1NzIsNDkuNTIwNzMxIDU1LjkwMTU1NTYsNDguNTkxMjUyOSBDNTUuNTA4OTU0LDQ3LjY1NjM0OTggNTQuOTU3MjM2Myw0Ni44Njk3MjkyIDU0LjI0ODEzMjEsNDYuMjI5NTgyNyBDNTMuNTM1NTY4OSw0NS41ODQwMTEzIDUyLjY5ODQ4LDQ1LjA5NzU3MjQgNTEuNzQwMzI0Niw0NC43NjY2NDkyIEM1MC43Nzg3MTAxLDQ0LjQzOTM0MjcgNDkuNzI4ODg5OSw0NC4yNjkzNjAzIDQ4LjU4NzQwNTEsNDQuMjY5MzYwMyBMNDIuMTQ0OTM0LDQ0LjI2OTM2MDMgTDQyLjE0NDkzNCw1OS4zNDcxNTk1IEw0OC42MDk4ODg5LDU5LjM0NzE1OTUgWiBNNDguNTg3NDA1MSw1NS4zNjg4NDg0IEw0Ni41MTE5NzgyLDU1LjM2ODg0ODQgTDQ2LjUxMTk3ODIsNDguMjQ3NjcxNSBMNDguNjA5ODg4OSw0OC4yNDc2NzE1IEM0OS4zODY0NDQ1LDQ4LjI1MTI4ODEgNTAuMDMxNTU2NCw0OC40MTA0MjA2IDUwLjU0MzQ5NSw0OC43MTQyMTg5IEM1MS4wNTU0MzM3LDQ5LjAxOTgyNTUgNTEuNDM3NjU4MSw0OS40Mzc1NDgyIDUxLjY5MDE2ODQsNDkuOTcyODExOCBDNTEuOTQyNjc4Nyw1MC41MDQ0NTg5IDUyLjA2NzIwNDMsNTEuMTEwMjQ3MiA1Mi4wNjcyMDQzLDUxLjc5NzQxIEM1Mi4wNjcyMDQzLDUyLjI3NDgwNzMgNTEuOTg3NjQ2Myw1Mi43MjY4ODgxIDUxLjgzMDI1OTcsNTMuMTU3MjY5MSBDNTEuNjc0NjAyNyw1My41ODIyMjUgNTEuNDQ4MDM1Myw1My45NjM3ODEyIDUxLjE0NTM2ODgsNTQuMjk0NzA0NCBDNTAuODQ2MTYxNCw1NC42MjU2Mjc1IDUwLjQ4Mjk2MTcsNTQuODg2MDI2MSA1MC4wNTQwNDAyLDU1LjA3NzcwODQgQzQ5LjYyMTY1OTYsNTUuMjY1Nzc0IDQ5LjEzNTY2MzcsNTUuMzY1MjMxOCA0OC41ODc0MDUxLDU1LjM2ODg0ODQgWiBNNjIuNDIzNTg0OCw1OS4zNDcxNTk1IEw2Mi40MjM1ODQ4LDUzLjcxNzg0OTMgTDY4Ljg0NTMwMTYsNTMuNzE3ODQ5MyBMNjguODQ1MzAxNiw0OS43Mzk1MzgxIEw2Mi40MjM1ODQ4LDQ5LjczOTUzODEgTDYyLjQyMzU4NDgsNDguMjQ3NjcxNSBMNjguOTk1NzcwMSw0OC4yNDc2NzE1IEw2OC45OTU3NzAxLDQ0LjI2OTM2MDMgTDU4LjA1NjU0MDYsNDQuMjY5MzYwMyBMNTguMDU2NTQwNiw1OS4zNDcxNTk1IEw2Mi40MjM1ODQ4LDU5LjM0NzE1OTUgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRTY0NzU5Ij48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=" alt="BreezyPDF">
|
64
|
+
</a>
|
65
|
+
</div>
|
66
|
+
<div class="right text">
|
67
|
+
Page <span class="pageNumber"></span> of <span class="totalPages"></span>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
">
|
71
|
+
<meta name="breezy-pdf-headerTemplate" content=" ">
|
72
|
+
<meta name="breezy-pdf-filename" content="breezy-pdf-dashboard-example.pdf">
|
73
|
+
|
74
|
+
<link rel="shortcut icon" href="https://ruby.demo.breezypdf.com/reports/img/favicon.png">
|
75
|
+
<title>Widget Builders</title>
|
76
|
+
<link rel="stylesheet" href="https://ruby.demo.breezypdf.com/reports/css/app.min.css" type="text/css"/>
|
77
|
+
<script defer src="https://use.fontawesome.com/releases/v5.0.10/js/all.js" integrity="sha384-slN8GvtUJGnv6ca26v8EzVaR9DC58QEwsIk9q1QXdCU8Yu8ck/tL/5szYlBbqmS+" crossorigin="anonymous"></script>
|
78
|
+
</head>
|
79
|
+
<body>
|
80
|
+
|
81
|
+
<div class="mai-wrapper">
|
82
|
+
|
83
|
+
<div class="main-content container pt-4 pt-md-0">
|
84
|
+
<div class="row mt-3 breezy-pdf-remove">
|
85
|
+
<div class="col-12 text-right">
|
86
|
+
<span id="waiting" hidden="">
|
87
|
+
<svg class="svg-inline--fa fa-sync fa-w-16 fa-spin" aria-hidden="true" data-prefix="fas" data-icon="sync" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z"></path></svg><!-- <i class="fas fa-sync fa-spin"></i> --> Please wait...
|
88
|
+
|
89
|
+
</span>
|
90
|
+
<a id="download" class="btn btn-primary" href="/as-pdf.pdf"><svg class="svg-inline--fa fa-file-pdf fa-w-12" aria-hidden="true" data-prefix="far" data-icon="file-pdf" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" data-fa-i2svg=""><path fill="currentColor" d="M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"></path></svg><!-- <i class="far fa-file-pdf"></i> --> Download PDF</a>
|
91
|
+
</div>
|
92
|
+
</div>
|
93
|
+
<div class="row">
|
94
|
+
<div class="col-7">
|
95
|
+
<div class="widget widget-fullwidth user-develop-chart">
|
96
|
+
<div class="widget-head">
|
97
|
+
<span class="title">Development Activity</span>
|
98
|
+
</div>
|
99
|
+
<div class="widget-chart-container">
|
100
|
+
<div id="develop-chart-legend" class="legend-container"></div>
|
101
|
+
<div id="develop-chart" style="height: 225px;"></div>
|
102
|
+
</div>
|
103
|
+
</div>
|
104
|
+
</div>
|
105
|
+
<div class="col-5">
|
106
|
+
<div class="widget-indicators">
|
107
|
+
<div class="indicator-item">
|
108
|
+
<div class="indicator-item-icon">
|
109
|
+
<div class="icon"><span class="fas fa-chart-line"></span></div>
|
110
|
+
</div>
|
111
|
+
<div class="indicator-item-value"><span data-toggle="counter" data-end="36" class="indicator-value-counter">0</span>
|
112
|
+
<div class="indicator-value-title">Today's Orders</div>
|
113
|
+
</div>
|
114
|
+
</div>
|
115
|
+
<div class="indicator-item">
|
116
|
+
<div class="indicator-item-icon">
|
117
|
+
<div class="icon"><span class="fas fa-chart-pie"></span></div>
|
118
|
+
</div>
|
119
|
+
<div class="indicator-item-value"><span data-toggle="counter" data-end="157" class="indicator-value-counter">0</span>
|
120
|
+
<div class="indicator-value-title">Support Tickets</div>
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
<div class="indicator-item">
|
124
|
+
<div class="indicator-item-icon">
|
125
|
+
<div class="icon"><span class="fas fa-chart-area"></span></div>
|
126
|
+
</div>
|
127
|
+
<div class="indicator-item-value"><span data-toggle="counter" data-decimals="1" data-end="17.9" class="indicator-value-counter">0</span>
|
128
|
+
<div class="indicator-value-title">Download Files</div>
|
129
|
+
</div>
|
130
|
+
</div>
|
131
|
+
<div class="indicator-item">
|
132
|
+
<div class="indicator-item-icon">
|
133
|
+
<div class="icon"><span class="fas fa-shopping-cart"></span></div>
|
134
|
+
</div>
|
135
|
+
<div class="indicator-item-value"><span data-toggle="counter" data-decimals="2" data-end="78,450" data-prefix="$" class="indicator-value-counter">0</span>
|
136
|
+
<div class="indicator-value-title">Total Purchases</div>
|
137
|
+
</div>
|
138
|
+
</div>
|
139
|
+
</div>
|
140
|
+
</div>
|
141
|
+
</div>
|
142
|
+
<div class="row page-break-after">
|
143
|
+
<div class="col-12">
|
144
|
+
<div class="widget widget-fullwidth week-chart">
|
145
|
+
<div class="widget-head mb-0 mb-lg-5"><span class="title">Week Activity</span></div>
|
146
|
+
<div class="widget-chart-container">
|
147
|
+
<div id="week-chart" style="height: 215px;"></div>
|
148
|
+
</div>
|
149
|
+
<div class="row widget-info">
|
150
|
+
<div class="col-6 counter-block"><span data-toggle="counter" data-end="735" class="counter"></span><span class="title">New Users</span></div>
|
151
|
+
<div class="col-6 counter-block"><span data-toggle="counter" data-end="73" data-suffix="%" class="counter">0</span><span class="title">More Visits</span></div>
|
152
|
+
</div>
|
153
|
+
</div>
|
154
|
+
</div>
|
155
|
+
</div>
|
156
|
+
<div class="row mt-1">
|
157
|
+
<div class="col-6">
|
158
|
+
<div class="user-stats">
|
159
|
+
<div class="user-stats-id mb-3">
|
160
|
+
<div class="user-stats-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img3.jpg" alt="avatar"></div>
|
161
|
+
<div class="user-stats-info"><span class="user-stats-name">Justin Adams</span><span class="user-stats-position">Sales</span></div>
|
162
|
+
</div>
|
163
|
+
<div class="user-stats-indicators">
|
164
|
+
<div class="user-stats-indicator"><span class="user-stats-indicator-title">Premium Purchases</span><span data-toggle="counter" data-end="173" class="user-stats-indicator-counter">0</span></div>
|
165
|
+
<div class="user-stats-indicator"><span class="user-stats-indicator-title">Standard Plans </span><span data-toggle="counter" data-end="367" class="user-stats-indicator-counter">0</span></div>
|
166
|
+
<div class="user-stats-indicator"><span class="user-stats-indicator-title">Services</span><span data-toggle="counter" data-end="724" class="user-stats-indicator-counter">0</span></div>
|
167
|
+
<div class="user-stats-indicator"><span class="user-stats-indicator-title">Total Sales</span><span data-toggle="counter" data-end="1264" class="user-stats-indicator-counter">0</span></div>
|
168
|
+
</div>
|
169
|
+
<div class="user-stats-milestone"><span>Current Progress</span>
|
170
|
+
<div class="progress">
|
171
|
+
<div style="width: 45%" class="progress-bar progress-bar-primary"></div>
|
172
|
+
</div>
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
</div>
|
176
|
+
<div class="col-6">
|
177
|
+
<div class="widget widget-fullwidth ads-chart">
|
178
|
+
<div class="widget-head mb-0 pb-0"><span class="title">Advertisement</span></div>
|
179
|
+
<div class="ads-resume">
|
180
|
+
<div class="ads-info pb-0">
|
181
|
+
<div class="ads-progress"><span data-toggle="counter" data-end="55" data-suffix="%" class="ads-progress-counter">0</span><span class="ads-progress-title">Advance</span>
|
182
|
+
<div class="progress">
|
183
|
+
<div style="width: 55%" class="progress-bar progress-bar-primary"></div>
|
184
|
+
</div>
|
185
|
+
</div>
|
186
|
+
<div id="ads-chart-legend" class="ads-legend"></div>
|
187
|
+
</div>
|
188
|
+
<div class="ads-users">
|
189
|
+
<div class="widget-chart-container">
|
190
|
+
<div id="users-chart" style="height: 153px;"></div>
|
191
|
+
<div class="users-chart-counter"><span data-toggle="counter" data-end="1207" class="users-counter">0</span><span class="users-title">New Users</span></div>
|
192
|
+
</div>
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="widget-chart-container">
|
196
|
+
<div id="ads-chart" style="height: 229px;"></div>
|
197
|
+
</div>
|
198
|
+
</div>
|
199
|
+
</div>
|
200
|
+
</div>
|
201
|
+
<div class="row page-break-avoid">
|
202
|
+
<div class="col-6">
|
203
|
+
<div class="widget widget-fullwidth earnings">
|
204
|
+
<div class="widget-head mb-0 pb-0">
|
205
|
+
</div>
|
206
|
+
<div class="earnings-resume">
|
207
|
+
<div class="earnings-value earnings-value-big mb-4"><span data-toggle="counter" data-end="127.95" data-decimals="2" data-prefix="$" class="earnings-counter">0</span><span class="earnings-title">Advance</span></div>
|
208
|
+
<div class="earnings-value"><span data-toggle="counter" data-end="527" data-decimals="2" data-prefix="$" class="earnings-counter">0</span><span class="earnings-title">Estimated</span></div>
|
209
|
+
<div class="earnings-value"><span data-toggle="counter" data-end="79" data-suffix="%" class="earnings-counter">0</span><span class="earnings-title">More Sales</span></div>
|
210
|
+
</div>
|
211
|
+
<div class="earnings-chart">
|
212
|
+
<div id="earnings-chart" style="height: 156px;"></div>
|
213
|
+
</div>
|
214
|
+
</div>
|
215
|
+
</div>
|
216
|
+
<div class="col-6">
|
217
|
+
<div class="usage usage-dark p-4">
|
218
|
+
<div class="usage-head"><span class="usage-head-title">Download Files</span>
|
219
|
+
</div>
|
220
|
+
<div class="usage-resume">
|
221
|
+
<div class="usage-data"><span data-toggle="counter" data-end="73.6" data-decimals="1" data-suffix="%" class="usage-counter"></span><span class="usage-title">Download Files</span><span class="usage-detail">13,5 MB</span></div>
|
222
|
+
<div class="usage-icon"><span class="icon fas fa-chart-area"></span></div>
|
223
|
+
</div>
|
224
|
+
</div>
|
225
|
+
<div class="usage usage-primary p-4">
|
226
|
+
<div class="usage-head"><span class="usage-head-title">Server CPU</span>
|
227
|
+
</div>
|
228
|
+
<div class="usage-resume">
|
229
|
+
<div class="usage-data"><span data-toggle="counter" data-end="33.9" data-decimals="1" data-suffix="%" class="usage-counter"></span><span class="usage-title">Total Usage</span><span class="usage-detail">178 MB</span></div>
|
230
|
+
<div class="usage-icon"><span class="icon fas fa-tachometer-alt"></span></div>
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
</div>
|
234
|
+
</div>
|
235
|
+
<div class="row page-break-before">
|
236
|
+
<div class="col-12 align-self-stretch d-flex">
|
237
|
+
<div class="widget widget-fullwidth todo-list align-self-stretch w-100">
|
238
|
+
<div class="widget-head"><span class="title">Todo List</span></div>
|
239
|
+
<div class="todo-list-container">
|
240
|
+
<ul class="todo-tasks">
|
241
|
+
<li class="todo-task">
|
242
|
+
<label class="custom-control custom-checkbox">
|
243
|
+
<input type="checkbox" checked="true" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
|
244
|
+
</label>
|
245
|
+
</li>
|
246
|
+
<li class="todo-task">
|
247
|
+
<label class="custom-control custom-checkbox">
|
248
|
+
<input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
|
249
|
+
</label>
|
250
|
+
</li>
|
251
|
+
<li class="todo-task">
|
252
|
+
<label class="custom-control custom-checkbox">
|
253
|
+
<input type="checkbox" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
|
254
|
+
</label>
|
255
|
+
</li>
|
256
|
+
<li class="todo-task">
|
257
|
+
<label class="custom-control custom-checkbox">
|
258
|
+
<input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
|
259
|
+
</label>
|
260
|
+
</li>
|
261
|
+
<li class="todo-task">
|
262
|
+
<label class="custom-control custom-checkbox">
|
263
|
+
<input type="checkbox" class="custom-control-input"><span class="custom-control-label">Sed id interdum nunc. Ut sodales dolor non ultricies mattis. </span>
|
264
|
+
</label>
|
265
|
+
</li>
|
266
|
+
<li class="todo-task">
|
267
|
+
<label class="custom-control custom-checkbox">
|
268
|
+
<input type="checkbox" class="custom-control-input"><span class="custom-control-label">Pellentesque habitant morbi tristique senectus et netus et.</span>
|
269
|
+
</label>
|
270
|
+
</li>
|
271
|
+
</ul>
|
272
|
+
</div>
|
273
|
+
</div>
|
274
|
+
</div>
|
275
|
+
</div>
|
276
|
+
<div class="row ">
|
277
|
+
<div class="col-12">
|
278
|
+
<div class="project-list">
|
279
|
+
<div class="project-list-title mt-5">Project Progress</div>
|
280
|
+
<div class="project-item pdf">
|
281
|
+
<div class="project-item-title"><span class="name">Product Design</span><span class="description">Create the new product design</span></div>
|
282
|
+
<div class="project-item-user">
|
283
|
+
<div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img4.jpg" alt="avatar"></div>
|
284
|
+
<div class="user-info"><span class="name">Marshal Hogan</span><span class="position description">Product designer</span></div>
|
285
|
+
</div>
|
286
|
+
<div class="project-item-state"><span class="name">In Progress</span><span class="description">3D modeling</span></div>
|
287
|
+
<div class="project-item-date"><span class="date">May 6, 2017</span><span class="time description">8:30</span></div>
|
288
|
+
<div class="project-item-progress"><span class="description">50%</span>
|
289
|
+
<div class="progress">
|
290
|
+
<div style="width: 50%" class="progress-bar progress-bar-primary"></div>
|
291
|
+
</div>
|
292
|
+
</div>
|
293
|
+
</div>
|
294
|
+
</div>
|
295
|
+
</div>
|
296
|
+
</div>
|
297
|
+
<div class="row page-break-avoid">
|
298
|
+
<div class="col-12">
|
299
|
+
<div class="project-list">
|
300
|
+
<div class="project-item pdf">
|
301
|
+
<div class="project-item-title"><span class="name">Concept Design</span><span class="description">Create the concept</span></div>
|
302
|
+
<div class="project-item-user">
|
303
|
+
<div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img1.jpg" alt="avatar"></div>
|
304
|
+
<div class="user-info"><span class="name">Ryan Lawrence</span><span class="position description">Marketing</span></div>
|
305
|
+
</div>
|
306
|
+
<div class="project-item-state"><span class="name">Completed</span><span class="description">Collection concept</span></div>
|
307
|
+
<div class="project-item-date"><span class="date">April 22, 2017</span><span class="time description">14:45</span></div>
|
308
|
+
<div class="project-item-progress"><span class="description">100%</span>
|
309
|
+
<div class="progress">
|
310
|
+
<div style="width: 100%" class="progress-bar progress-bar-primary"></div>
|
311
|
+
</div>
|
312
|
+
</div>
|
313
|
+
</div>
|
314
|
+
</div>
|
315
|
+
</div>
|
316
|
+
</div>
|
317
|
+
<div class="row page-break-avoid">
|
318
|
+
<div class="col-12">
|
319
|
+
<div class="project-list">
|
320
|
+
<div class="project-item pdf">
|
321
|
+
<div class="project-item-title"><span class="name">Product Development</span><span class="description">3D printing</span></div>
|
322
|
+
<div class="project-item-user">
|
323
|
+
<div class="user-avatar"><img src="https://ruby.demo.breezypdf.com/reports/img/avatars/img2.jpg" alt="avatar"></div>
|
324
|
+
<div class="user-info"><span class="name">Benji Miller</span><span class="position description">3D printer</span></div>
|
325
|
+
</div>
|
326
|
+
<div class="project-item-state"><span class="name">Waiting</span><span class="description">Waiting for 3D design</span></div>
|
327
|
+
<div class="project-item-date"><span class="date">April 15, 2017</span><span class="time description">10:00</span></div>
|
328
|
+
<div class="project-item-progress"><span class="description">0%</span>
|
329
|
+
<div class="progress">
|
330
|
+
<div style="width: 0%" class="progress-bar progress-bar-primary"></div>
|
331
|
+
</div>
|
332
|
+
</div>
|
333
|
+
</div>
|
334
|
+
</div>
|
335
|
+
</div>
|
336
|
+
</div>
|
337
|
+
</div>
|
338
|
+
|
339
|
+
|
340
|
+
|
341
|
+
</div>
|
342
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery/jquery.min.js" type="text/javascript"></script>
|
343
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/bootstrap/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
|
344
|
+
<script src="https://ruby.demo.breezypdf.com/reports/js/app.js" type="text/javascript"></script>
|
345
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.min.js" type="text/javascript"></script>
|
346
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.pie.min.js" type="text/javascript"></script>
|
347
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.time.min.js" type="text/javascript"></script>
|
348
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/jquery.flot.resize.min.js" type="text/javascript"></script>
|
349
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/plugins/curvedLines.min.js" type="text/javascript"></script>
|
350
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/jquery-flot/plugins/jquery.flot.tooltip.min.js" type="text/javascript"></script>
|
351
|
+
<script src="https://ruby.demo.breezypdf.com/reports/lib/countup/countUp.min.js" type="text/javascript"></script>
|
352
|
+
<script src="https://ruby.demo.breezypdf.com/reports/js/app-dashboard.js" type="text/javascript"></script>
|
353
|
+
<script type="text/javascript">
|
354
|
+
$(document).ready(function(){
|
355
|
+
//initialize the javascript
|
356
|
+
window.pdf = true;
|
357
|
+
App.init();
|
358
|
+
App.dashboard();
|
359
|
+
setTimeout(function() {
|
360
|
+
window.pdfRenderReady = true
|
361
|
+
}, 250)
|
362
|
+
|
363
|
+
});
|
364
|
+
</script>
|
365
|
+
</body>
|
366
|
+
</html>
|