bolognese 0.9.66 → 0.9.67
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/bolognese/readers/crossref_reader.rb +12 -10
- data/lib/bolognese/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml +90 -0
- data/spec/readers/crossref_reader_spec.rb +18 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bbbf8e600c97f1574dc77569b3522b1f98b07cd3c530b0b606e7c7e6117ad69
|
4
|
+
data.tar.gz: a28a34dc194d55c645a8e70521d31ba72b0ab036334d5b7c2bffabac945e7c76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30ad680f129dee6db608e573ba70d00346f5c5fafd986395c10ebc33e475916b18379f4fcb74dea84ee4bbec93c385acb9b11cdcfdf4598a41d701d6fca2f634
|
7
|
+
data.tar.gz: 1e84b690268e4448c5340cf91b0631b162237f27d68ee23682ecde19491a11ab5743cbcd4c95b547c88ed923d277b5f62abcbc7e52f047fa88c46e0bc7db4660
|
data/Gemfile.lock
CHANGED
@@ -99,18 +99,18 @@ module Bolognese
|
|
99
99
|
book_metadata = meta.dig("crossref", "book", "book_metadata")
|
100
100
|
book_series_metadata = meta.dig("crossref", "book", "book_series_metadata")
|
101
101
|
book_set_metadata = meta.dig("crossref", "book", "book_set_metadata")
|
102
|
-
bibliographic_metadata = meta.dig("crossref", "book", "content_item")
|
102
|
+
bibliographic_metadata = meta.dig("crossref", "book", "content_item") || {}
|
103
103
|
additional_type = bibliographic_metadata.fetch("component_type", nil) ? "book-" + bibliographic_metadata.fetch("component_type") : "book"
|
104
104
|
publisher = book_metadata.dig("publisher", "publisher_name")
|
105
105
|
when "conference"
|
106
|
-
event_metadata = meta.dig("crossref", "conference", "event_metadata")
|
107
|
-
bibliographic_metadata = meta.dig("crossref", "conference", "conference_paper")
|
106
|
+
event_metadata = meta.dig("crossref", "conference", "event_metadata") || {}
|
107
|
+
bibliographic_metadata = meta.dig("crossref", "conference", "conference_paper") || {}
|
108
108
|
when "journal"
|
109
|
-
journal_metadata = meta.dig("crossref", "journal", "journal_metadata")
|
110
|
-
bibliographic_metadata = meta.dig("crossref", "journal", "journal_article")
|
109
|
+
journal_metadata = meta.dig("crossref", "journal", "journal_metadata") || {}
|
110
|
+
bibliographic_metadata = meta.dig("crossref", "journal", "journal_article") || {}
|
111
111
|
program_metadata = bibliographic_metadata.dig("crossmark", "custom_metadata", "program") || bibliographic_metadata.dig("program")
|
112
|
-
journal_issue = meta.dig("crossref", "journal", "journal_issue")
|
113
|
-
journal_article = meta.dig("crossref", "journal", "journal_article")
|
112
|
+
journal_issue = meta.dig("crossref", "journal", "journal_issue") || {}
|
113
|
+
journal_article = meta.dig("crossref", "journal", "journal_article") || {}
|
114
114
|
|
115
115
|
additional_type = if journal_article.present?
|
116
116
|
"journal_article"
|
@@ -120,9 +120,9 @@ module Bolognese
|
|
120
120
|
"journal"
|
121
121
|
end
|
122
122
|
when "posted_content"
|
123
|
-
bibliographic_metadata = meta.dig("crossref", "posted_content")
|
123
|
+
bibliographic_metadata = meta.dig("crossref", "posted_content") || {}
|
124
124
|
when "sa_component"
|
125
|
-
bibliographic_metadata = meta.dig("crossref", "sa_component", "component_list", "component")
|
125
|
+
bibliographic_metadata = meta.dig("crossref", "sa_component", "component_list", "component") || {}
|
126
126
|
end
|
127
127
|
|
128
128
|
additional_type = (additional_type || model).underscore.camelize
|
@@ -194,7 +194,9 @@ module Bolognese
|
|
194
194
|
def crossref_license(program_metadata)
|
195
195
|
access_indicator = Array.wrap(program_metadata).find { |m| m["name"] == "AccessIndicators" }
|
196
196
|
if access_indicator.present?
|
197
|
-
|
197
|
+
Array.wrap(access_indicator["license_ref"]).map do |license|
|
198
|
+
{ "id" => normalize_url(parse_attributes(license)) }
|
199
|
+
end.uniq.unwrap
|
198
200
|
else
|
199
201
|
nil
|
200
202
|
end
|
data/lib/bolognese/version.rb
CHANGED
data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.datacite.org/prefixes/10.1111
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Maremma - https://github.com/datacite/maremma
|
12
|
+
Accept:
|
13
|
+
- text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
Date:
|
20
|
+
- Fri, 29 Dec 2017 12:46:05 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/vnd.api+json; charset=utf-8
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
Status:
|
26
|
+
- 200 OK
|
27
|
+
X-Anonymous-Consumer:
|
28
|
+
- 'true'
|
29
|
+
Cache-Control:
|
30
|
+
- max-age=0, private, must-revalidate
|
31
|
+
Vary:
|
32
|
+
- Accept-Encoding
|
33
|
+
Etag:
|
34
|
+
- W/"d2c510be641d45d932800af9be99a6be"
|
35
|
+
X-Runtime:
|
36
|
+
- '0.774296'
|
37
|
+
X-Request-Id:
|
38
|
+
- 767f4c1c-1fb3-45f4-a643-7fb8fd2bda11
|
39
|
+
X-Powered-By:
|
40
|
+
- Phusion Passenger 5.1.12
|
41
|
+
Server:
|
42
|
+
- nginx/1.12.2 + Phusion Passenger 5.1.12
|
43
|
+
Access-Control-Allow-Origin:
|
44
|
+
- "*"
|
45
|
+
Access-Control-Allow-Methods:
|
46
|
+
- GET, POST, PATCH, PUT, DELETE, OPTIONS
|
47
|
+
Access-Control-Allow-Headers:
|
48
|
+
- DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Authorization
|
49
|
+
Access-Control-Expose-Headers:
|
50
|
+
- DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Authorization
|
51
|
+
body:
|
52
|
+
encoding: UTF-8
|
53
|
+
string: '{"data":{"id":"10.1111","type":"prefixes","attributes":{"registration-agency":"Crossref","created":null,"updated":"2016-09-21T20:45:34Z"},"relationships":{"clients":{"data":[]},"providers":{"data":[]}}}}'
|
54
|
+
http_version:
|
55
|
+
recorded_at: Fri, 29 Dec 2017 12:46:05 GMT
|
56
|
+
- request:
|
57
|
+
method: get
|
58
|
+
uri: http://www.crossref.org/openurl/?format=unixref&id=doi:10.1111/nph.14619&noredirect=true&pid=tech@datacite.org
|
59
|
+
body:
|
60
|
+
encoding: US-ASCII
|
61
|
+
string: ''
|
62
|
+
headers:
|
63
|
+
User-Agent:
|
64
|
+
- Maremma - https://github.com/datacite/maremma
|
65
|
+
Accept:
|
66
|
+
- text/xml
|
67
|
+
response:
|
68
|
+
status:
|
69
|
+
code: 200
|
70
|
+
message: OK
|
71
|
+
headers:
|
72
|
+
Server:
|
73
|
+
- Apache-Coyote/1.1
|
74
|
+
Crossref-Deployment-Name:
|
75
|
+
- cr6-1
|
76
|
+
Content-Type:
|
77
|
+
- text/xml;charset=UTF-8
|
78
|
+
Content-Language:
|
79
|
+
- en-US
|
80
|
+
Date:
|
81
|
+
- Fri, 29 Dec 2017 12:46:05 GMT
|
82
|
+
Connection:
|
83
|
+
- close
|
84
|
+
body:
|
85
|
+
encoding: ASCII-8BIT
|
86
|
+
string: !binary |-
|
87
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRvaV9yZWNvcmRzPg0KICA8ZG9pX3JlY29yZCBvd25lcj0iMTAuMTExMSIgdGltZXN0YW1wPSIyMDE3LTA2LTA1IDA2OjU2OjU5Ij4NCiAgICA8Y3Jvc3NyZWY+DQogICAgICA8am91cm5hbD4NCiAgICAgICAgPGpvdXJuYWxfbWV0YWRhdGEgbGFuZ3VhZ2U9ImVuIj4NCiAgICAgICAgICA8ZnVsbF90aXRsZT5OZXcgUGh5dG9sb2dpc3Q8L2Z1bGxfdGl0bGU+DQogICAgICAgICAgPGFiYnJldl90aXRsZT5OZXcgUGh5dG9sPC9hYmJyZXZfdGl0bGU+DQogICAgICAgICAgPGlzc24+MDAyODY0Nlg8L2lzc24+DQogICAgICAgIDwvam91cm5hbF9tZXRhZGF0YT4NCiAgICAgICAgPGpvdXJuYWxfYXJ0aWNsZSBwdWJsaWNhdGlvbl90eXBlPSJmdWxsX3RleHQiPg0KICAgICAgICAgIDx0aXRsZXM+DQogICAgICAgICAgICA8dGl0bGU+TGlmZSBhbmQgZGVhdGggb2YgcHJvdGVpbnMgYWZ0ZXIgcHJvdGVhc2UgY2xlYXZhZ2U6IHByb3RlaW4gZGVncmFkYXRpb24gYnkgdGhlIE4tZW5kIHJ1bGUgcGF0aHdheTwvdGl0bGU+DQogICAgICAgICAgPC90aXRsZXM+DQogICAgICAgICAgPGNvbnRyaWJ1dG9ycz4NCiAgICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJmaXJzdCI+DQogICAgICAgICAgICAgIDxnaXZlbl9uYW1lPk5pY288L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgIDxzdXJuYW1lPkRpc3NtZXllcjwvc3VybmFtZT4NCiAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPkluZGVwZW5kZW50IEp1bmlvciBSZXNlYXJjaCBHcm91cCBvbiBQcm90ZWluIFJlY29nbml0aW9uIGFuZCBEZWdyYWRhdGlvbjsgTGVpYm5peiBJbnN0aXR1dGUgb2YgUGxhbnQgQmlvY2hlbWlzdHJ5IChJUEIpOyBXZWluYmVyZyAzIEhhbGxlIChTYWFsZSkgRC0wNjEyMCBHZXJtYW55PC9hZmZpbGlhdGlvbj4NCiAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPlNjaWVuY2VDYW1wdXMgSGFsbGUgLSBQbGFudC1iYXNlZCBCaW9lY29ub215OyBCZXR0eS1IZWltYW5uLVN0cmFzc2UgMyBIYWxsZSAoU2FhbGUpIEQtMDYxMjAgR2VybWFueTwvYWZmaWxpYXRpb24+DQogICAgICAgICAgICAgIDxPUkNJRD5odHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi00MTU2LTM3NjE8L09SQ0lEPg0KICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAgICAgICAgICAgICAgPGdpdmVuX25hbWU+U3VzYW5hPC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgICA8c3VybmFtZT5SaXZhczwvc3VybmFtZT4NCiAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPkxJUE07IFVuaXZlcnNpdMOpIGRlIFRvdWxvdXNlOyBJTlJBOyBDTlJTOyBDYXN0YW5ldC1Ub2xvc2FuIDMxIDMyNiBGcmFuY2U8L2FmZmlsaWF0aW9uPg0KICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAgICAgICAgICAgICAgPGdpdmVuX25hbWU+RW1tYW51ZWxsZTwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgICAgPHN1cm5hbWU+R3JhY2lldDwvc3VybmFtZT4NCiAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPkRlcGFydG1lbnQgb2YgQmlvbG9neTsgTWF5bm9vdGggVW5pdmVyc2l0eTsgTWF5bm9vdGggQ28uIEtpbGRhcmUgSXJlbGFuZDwvYWZmaWxpYXRpb24+DQogICAgICAgICAgICAgIDxPUkNJRD5odHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0zNTQ4LTgyMTM8L09SQ0lEPg0KICAgICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICA8L2NvbnRyaWJ1dG9ycz4NCiAgICAgICAgICA8cHVibGljYXRpb25fZGF0ZSBtZWRpYV90eXBlPSJvbmxpbmUiPg0KICAgICAgICAgICAgPG1vbnRoPjA2PC9tb250aD4NCiAgICAgICAgICAgIDxkYXk+MDU8L2RheT4NCiAgICAgICAgICAgIDx5ZWFyPjIwMTc8L3llYXI+DQogICAgICAgICAgPC9wdWJsaWNhdGlvbl9kYXRlPg0KICAgICAgICAgIDxjcm9zc21hcms+DQogICAgICAgICAgICA8Y3Jvc3NtYXJrX3BvbGljeT4xMC4xMDAyL2Nyb3NzbWFya19wb2xpY3k8L2Nyb3NzbWFya19wb2xpY3k+DQogICAgICAgICAgICA8Y3Jvc3NtYXJrX2RvbWFpbnM+DQogICAgICAgICAgICAgIDxjcm9zc21hcmtfZG9tYWluPg0KICAgICAgICAgICAgICAgIDxkb21haW4+d2lsZXkuY29tPC9kb21haW4+DQogICAgICAgICAgICAgIDwvY3Jvc3NtYXJrX2RvbWFpbj4NCiAgICAgICAgICAgIDwvY3Jvc3NtYXJrX2RvbWFpbnM+DQogICAgICAgICAgICA8Y3Jvc3NtYXJrX2RvbWFpbl9leGNsdXNpdmU+dHJ1ZTwvY3Jvc3NtYXJrX2RvbWFpbl9leGNsdXNpdmU+DQogICAgICAgICAgICA8Y3VzdG9tX21ldGFkYXRhPg0KICAgICAgICAgICAgICA8cHJvZ3JhbSBuYW1lPSJmdW5kcmVmIj4NCiAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRncm91cCI+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9uYW1lIj4NCiAgICAgICAgICAgICAgICAgICAgQWdlbmNlIE5hdGlvbmFsZSBkZSBsYSBSZWNoZXJjaGUNCiAgICAgICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJmdW5kZXJfaWRlbnRpZmllciI+aHR0cDovL2R4LmRvaS5vcmcvMTAuMTMwMzkvNTAxMTAwMDAxNjY1PC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iYXdhcmRfbnVtYmVyIj5BTlItMTAtTEFCWC00MTwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJhd2FyZF9udW1iZXIiPkFOUi0xMS1JREVYLTAwMDItMDI8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICA8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRncm91cCI+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9uYW1lIj4NCiAgICAgICAgICAgICAgICAgICAgRGVwYXJ0bWVudCBvZiBBZ3JpY3VsdHVyZSwgRm9vZCBhbmQgdGhlIE1hcmluZQ0KICAgICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9pZGVudGlmaWVyIj5odHRwOi8vZHguZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDE1ODQ8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICAgIDwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJhd2FyZF9udW1iZXIiPjE0L1MvODE5PC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgPC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJmdW5kZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJmdW5kZXJfbmFtZSI+DQogICAgICAgICAgICAgICAgICAgIFNjaWVuY2UgRm91bmRhdGlvbiBJcmVsYW5kDQogICAgICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGVyX2lkZW50aWZpZXIiPmh0dHA6Ly9keC5kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMTYwMjwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImF3YXJkX251bWJlciI+MTMvSUEvMTg3MDwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGdyb3VwIj4NCiAgICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGVyX25hbWUiPlZpcnR1YWwgSXJpc2ggQ2VudHJlIGZvciBDcm9wIEltcHJvdmVtZW50PC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImF3YXJkX251bWJlciI+MTQvUy84MTk8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICA8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRncm91cCI+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9uYW1lIj4NCiAgICAgICAgICAgICAgICAgICAgRXVyb3BlYW4gUmVnaW9uYWwgRGV2ZWxvcG1lbnQgRnVuZA0KICAgICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImZ1bmRlcl9pZGVudGlmaWVyIj5odHRwOi8vZHguZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDg1MzA8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICAgIDwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPGFzc2VydGlvbiBuYW1lPSJhd2FyZF9udW1iZXIiPkxTUC1UUDItMTwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGdyb3VwIj4NCiAgICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGVyX25hbWUiPg0KICAgICAgICAgICAgICAgICAgICBEZXV0c2NoZSBGb3JzY2h1bmdzZ2VtZWluc2NoYWZ0DQogICAgICAgICAgICAgICAgICAgIDxhc3NlcnRpb24gbmFtZT0iZnVuZGVyX2lkZW50aWZpZXIiPmh0dHA6Ly9keC5kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMTY1OTwvYXNzZXJ0aW9uPg0KICAgICAgICAgICAgICAgICAgPC9hc3NlcnRpb24+DQogICAgICAgICAgICAgICAgICA8YXNzZXJ0aW9uIG5hbWU9ImF3YXJkX251bWJlciI+REkgMTc5NC8zLTE8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgICA8L2Fzc2VydGlvbj4NCiAgICAgICAgICAgICAgPC9wcm9ncmFtPg0KICAgICAgICAgICAgICA8cHJvZ3JhbSBuYW1lPSJBY2Nlc3NJbmRpY2F0b3JzIj4NCiAgICAgICAgICAgICAgICA8bGljZW5zZV9yZWYgYXBwbGllc190bz0idGRtIj5odHRwOi8vZG9pLndpbGV5LmNvbS8xMC4xMDAyL3RkbV9saWNlbnNlXzE8L2xpY2Vuc2VfcmVmPg0KICAgICAgICAgICAgICAgIDxsaWNlbnNlX3JlZiBhcHBsaWVzX3RvPSJ2b3IiIHN0YXJ0X2RhdGU9IjIwMTctMDYtMDUiPmh0dHA6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS90ZXJtc0FuZENvbmRpdGlvbnM8L2xpY2Vuc2VfcmVmPg0KICAgICAgICAgICAgICA8L3Byb2dyYW0+DQogICAgICAgICAgICA8L2N1c3RvbV9tZXRhZGF0YT4NCiAgICAgICAgICA8L2Nyb3NzbWFyaz4NCiAgICAgICAgICA8YXJjaGl2ZV9sb2NhdGlvbnM+DQogICAgICAgICAgICA8YXJjaGl2ZSBuYW1lPSJQb3J0aWNvIiAvPg0KICAgICAgICAgIDwvYXJjaGl2ZV9sb2NhdGlvbnM+DQogICAgICAgICAgPGRvaV9kYXRhPg0KICAgICAgICAgICAgPGRvaT4xMC4xMTExL25waC4xNDYxOTwvZG9pPg0KICAgICAgICAgICAgPHJlc291cmNlPmh0dHA6Ly9kb2kud2lsZXkuY29tLzEwLjExMTEvbnBoLjE0NjE5PC9yZXNvdXJjZT4NCiAgICAgICAgICAgIDxjb2xsZWN0aW9uIHByb3BlcnR5PSJjcmF3bGVyLWJhc2VkIj4NCiAgICAgICAgICAgICAgPGl0ZW0gY3Jhd2xlcj0iaVBhcmFkaWdtcyI+DQogICAgICAgICAgICAgICAgPHJlc291cmNlPmh0dHA6Ly9vbmxpbmVsaWJyYXJ5LndpbGV5LmNvbS93b2wxL2RvaS8xMC4xMTExL25waC4xNDYxOS9mdWxscGRmPC9yZXNvdXJjZT4NCiAgICAgICAgICAgICAgPC9pdGVtPg0KICAgICAgICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9InRleHQtbWluaW5nIj4NCiAgICAgICAgICAgICAgPGl0ZW0+DQogICAgICAgICAgICAgICAgPHJlc291cmNlIGNvbnRlbnRfdmVyc2lvbj0idm9yIiBtaW1lX3R5cGU9ImFwcGxpY2F0aW9uL3BkZiI+aHR0cHM6Ly9hcGkud2lsZXkuY29tL29ubGluZWxpYnJhcnkvdGRtL3YxL2FydGljbGVzLzEwLjExMTElMkZucGguMTQ2MTk8L3Jlc291cmNlPg0KICAgICAgICAgICAgICA8L2l0ZW0+DQogICAgICAgICAgICA8L2NvbGxlY3Rpb24+DQogICAgICAgICAgPC9kb2lfZGF0YT4NCiAgICAgICAgICA8Y2l0YXRpb25fbGlzdD4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMDF8bnBoMTQ2MTktY2l0LTAwMDEiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkJpZW52ZW51dDwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDAyL3BtaWMuMjAxNTAwMDI3PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlByb3Rlb21lLXdpZGUgYW5hbHlzaXMgb2YgdGhlIGFtaW5vIHRlcm1pbmFsIHN0YXR1cyBvZiBFc2NoZXJpY2hpYSBjb2xpIHByb3RlaW5zIGF0IHRoZSBzdGVhZHktc3RhdGUgYW5kIHVwb24gZGVmb3JteWxhdGlvbiBpbmhpYml0aW9uPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Qcm90ZW9taWNzPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI1MDM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAwMnxucGgxNDYxOS1jaXQtMDAwMiI+DQogICAgICAgICAgICAgIDxhdXRob3I+QnJvd2VyPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEzPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMTYvai5tb2xjZWwuMjAxMy4wMi4wMDk8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+TmV1cm9kZWdlbmVyYXRpb24tYXNzb2NpYXRlZCBwcm90ZWluIGZyYWdtZW50cyBhcyBzaG9ydC1saXZlZCBzdWJzdHJhdGVzIG9mIHRoZSBOLWVuZCBydWxlIHBhdGh3YXk8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbGVjdWxhciBDZWxsPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjUwPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE2MTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDAzfG5waDE0NjE5LWNpdC0wMDAzIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5DYWx2bzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDc0L21jcC5NMTE2LjA2MzgxODwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5Db21wYXJhdGl2ZSBhbmFseXNpcyBvZiBtaXRvY2hvbmRyaWFsIE4tdGVybWluaSBmcm9tIG1vdXNlLCBodW1hbiwgYW5kIHllYXN0PC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Nb2xlY3VsYXIgJmFtcDsgQ2VsbHVsYXIgUHJvdGVvbWljczwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xNjwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT41MTI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAwNHxucGgxNDYxOS1jaXQtMDAwNCI+DQogICAgICAgICAgICAgIDxhdXRob3I+Q2hlbjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMTI2L3NjaWVuY2UuYWFsMzY1NTwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5BbiBOLWVuZCBydWxlIHBhdGh3YXkgdGhhdCByZWNvZ25pemVzIHByb2xpbmUgYW5kIGRlc3Ryb3lzIGdsdWNvbmVvZ2VuaWMgZW56eW1lczwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+U2NpZW5jZTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4zNTU8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+ZWFhSTM2NTU8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAwNXxucGgxNDYxOS1jaXQtMDAwNSI+DQogICAgICAgICAgICAgIDxhdXRob3I+Q2hpc2hvbG08L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTA3My9wbmFzLjA0MDk0NjgxMDI8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+TW9sZWN1bGFyIGNoYXJhY3Rlcml6YXRpb24gb2YgcHJvdGVvbHl0aWMgY2xlYXZhZ2Ugc2l0ZXMgb2YgdGhlIFBzZXVkb21vbmFzIHN5cmluZ2FlIGVmZmVjdG9yIEF2clJwdDI8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlByb2NlZWRpbmdzIG9mIHRoZSBOYXRpb25hbCBBY2FkZW15IG9mIFNjaWVuY2VzLCBVU0E8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTAyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjIwODc8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAwNnxucGgxNDYxOS1jaXQtMDAwNiI+DQogICAgICAgICAgICAgIDxhdXRob3I+RGl0emVsPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDAzPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMzgvbmNiOTg0PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkRlZ3JhZGF0aW9uIG9mIERJQVAxIGJ5IHRoZSBOLWVuZCBydWxlIHBhdGh3YXkgaXMgZXNzZW50aWFsIGZvciByZWd1bGF0aW5nIGFwb3B0b3NpczwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TmF0dXJlIENlbGwgQmlvbG9neTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT41PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQ2NzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDA3fG5waDE0NjE5LWNpdC0wMDA3Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5Eb25nPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMDEvZ2FkLjI5MjIzNS4xMTY8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+VWJpcXVpdHlsYXRpb24gYWN0aXZhdGVzIGEgcGVwdGlkYXNlIHRoYXQgcHJvbW90ZXMgY2xlYXZhZ2UgYW5kIGRlc3RhYmlsaXphdGlvbiBvZiBpdHMgYWN0aXZhdGluZyBFMyBsaWdhc2VzIGFuZCBkaXZlcnNlIGdyb3d0aCByZWd1bGF0b3J5IHByb3RlaW5zIHRvIGxpbWl0IGNlbGwgcHJvbGlmZXJhdGlvbiBpbiBBcmFiaWRvcHNpczwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+R2VuZXMgJmFtcDsgRGV2ZWxvcG1lbnQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MzE8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTk3PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMDh8bnBoMTQ2MTktY2l0LTAwMDgiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkVzY2hlbi1MaXBwb2xkPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMDQvcHAuMTYuMDAzMzY8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+QmFjdGVyaWFsIEF2clJwdDItbGlrZSBjeXN0ZWluZSBwcm90ZWFzZXMgYmxvY2sgYWN0aXZhdGlvbiBvZiB0aGUgQXJhYmlkb3BzaXMgbWl0b2dlbi1hY3RpdmF0ZWQgcHJvdGVpbiBraW5hc2VzLCBNUEs0IGFuZCBNUEsxMTwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+UGxhbnQgUGh5c2lvbG9neTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xNzE8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjIyMzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDA5fG5waDE0NjE5LWNpdC0wMDA5Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5GYWRlbjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDM4L25jb21tczEyMjAyPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlBoZW5vdHlwZXMgb24gZGVtYW5kIHZpYSBzd2l0Y2hhYmxlIHRhcmdldCBwcm90ZWluIGRlZ3JhZGF0aW9uIGluIG11bHRpY2VsbHVsYXIgb3JnYW5pc21zPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXR1cmUgQ29tbXVuaWNhdGlvbnM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+Nzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjIwMjwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDEwfG5waDE0NjE5LWNpdC0wMDEwIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5HYXJ6b248L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTAxNi9qLmZlYnNsZXQuMjAwNy4wNi4wMDU8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+UFJUNi9BdDVnMDIzMTAgZW5jb2RlcyBhbiBBcmFiaWRvcHNpcyB1YmlxdWl0aW4gbGlnYXNlIG9mIHRoZSBOLWVuZCBydWxlIHBhdGh3YXkgd2l0aCBhcmdpbmluZSBzcGVjaWZpY2l0eSBhbmQgaXMgbm90IHRoZSBDRVIzIGxvY3VzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5GRUJTIExldHRlcnM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTgxPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjMxODk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAxMXxucGgxNDYxOS1jaXQtMDAxMSI+DQogICAgICAgICAgICAgIDxhdXRob3I+R2V2YWVydDwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDM4L25idDgxMDwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5FeHBsb3JpbmcgcHJvdGVvbWVzIGFuZCBhbmFseXppbmcgcHJvdGVpbiBwcm9jZXNzaW5nIGJ5IG1hc3Mgc3BlY3Ryb21ldHJpYyBpZGVudGlmaWNhdGlvbiBvZiBzb3J0ZWQgTi10ZXJtaW5hbCBwZXB0aWRlczwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TmF0dXJlIEJpb3RlY2hub2xvZ3k8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjE8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NTY2PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMTJ8bnBoMTQ2MTktY2l0LTAwMTIiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkdpYmJzPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE0PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMTYvai50Y2IuMjAxNC4wNS4wMDE8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+VGhlIGV1a2FyeW90aWMgTi1lbmQgcnVsZSBwYXRod2F5OiBjb25zZXJ2ZWQgbWVjaGFuaXNtcyBhbmQgZGl2ZXJzZSBmdW5jdGlvbnM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlRyZW5kcyBpbiBDZWxsIEJpb2xvZ3k8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjQ8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NjAzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMTN8bnBoMTQ2MTktY2l0LTAwMTMiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkdpYmJzPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMTEvbnBoLjE0MTA1PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkZyb20gc3RhcnQgdG8gZmluaXNoOiBhbWluby10ZXJtaW5hbCBwcm90ZWluIG1vZGlmaWNhdGlvbnMgYXMgZGVncmFkYXRpb24gc2lnbmFscyBpbiBwbGFudHM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk5ldyBQaHl0b2xvZ2lzdDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4yMTE8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTE4ODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDE0fG5waDE0NjE5LWNpdC0wMDE0Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5HaWJiczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDM4L25hdHVyZTEwNTM0PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkhvbWVvc3RhdGljIHJlc3BvbnNlIHRvIGh5cG94aWEgaXMgcmVndWxhdGVkIGJ5IHRoZSBOLWVuZCBydWxlIHBhdGh3YXkgaW4gcGxhbnRzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXR1cmU8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+NDc5PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQxNTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDE1fG5waDE0NjE5LWNpdC0wMDE1Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5HcmF2b3Q8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTY8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTE4Ni9zMTI4NzAtMDE2LTA5NDEteTwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5IeXBveGlhIHJlc3BvbnNlIGluIEFyYWJpZG9wc2lzIHJvb3RzIGluZmVjdGVkIGJ5IFBsYXNtb2Rpb3Bob3JhIGJyYXNzaWNhZSBzdXBwb3J0cyB0aGUgZGV2ZWxvcG1lbnQgb2YgY2x1YnJvb3Q8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkJNQyBQbGFudCBCaW9sb2d5PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI1MTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDE2fG5waDE0NjE5LWNpdC0wMDE2Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5IYW1tZXJsZTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5ODwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDc0L2piYy4yNzMuMzkuMjUwMDA8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+UHJvdGVpbnMgb2YgbmV3bHkgaXNvbGF0ZWQgbXV0YW50cyBhbmQgdGhlIGFtaW5vLXRlcm1pbmFsIHByb2xpbmUgYXJlIGVzc2VudGlhbCBmb3IgdWJpcXVpdGluLXByb3RlYXNvbWUtY2F0YWx5emVkIGNhdGFib2xpdGUgZGVncmFkYXRpb24gb2YgZnJ1Y3Rvc2UtMSw2LWJpc3Bob3NwaGF0YXNlIG9mIFNhY2NoYXJvbXljZXMgY2VyZXZpc2lhZTwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+Sm91cm5hbCBvZiBCaW9sb2dpY2FsIENoZW1pc3RyeTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4yNzM8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjUwMDA8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAxN3xucGgxNDYxOS1jaXQtMDAxNyI+DQogICAgICAgICAgICAgIDxhdXRob3I+SG9lcm5zdGVpbjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDc0L21jcC5NMTE1LjA1NzE5MDwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5JZGVudGlmaWNhdGlvbiBvZiB0YXJnZXRzIGFuZCBpbnRlcmFjdGlvbiBwYXJ0bmVycyBvZiBhcmdpbnlsLXRSTkEgcHJvdGVpbiB0cmFuc2ZlcmFzZSBpbiB0aGUgbW9zcyBQaHlzY29taXRyZWxsYSBwYXRlbnM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbGVjdWxhciAmYW1wOyBDZWxsdWxhciBQcm90ZW9taWNzPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE4MDg8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAxOHxucGgxNDYxOS1jaXQtMDAxOCI+DQogICAgICAgICAgICAgIDxhdXRob3I+SHVlc2dlbjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMTExL2ouMTM5OS0zMDU0LjIwMTEuMDE1MzYueDwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5OLSBhbmQgQy10ZXJtaW5hbCBkZWdyYWRvbWljczogbmV3IGFwcHJvYWNoZXMgdG8gcmV2ZWFsIGJpb2xvZ2ljYWwgcm9sZXMgZm9yIHBsYW50IHByb3RlYXNlcyBmcm9tIHN1YnN0cmF0ZSBpZGVudGlmaWNhdGlvbjwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+UGh5c2lvbG9naWEgUGxhbnRhcnVtPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE0NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT41PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMTl8bnBoMTQ2MTktY2l0LTAwMTkiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkh3YW5nPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEwPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMjYvc2NpZW5jZS4xMTgzMTQ3PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPk4tdGVybWluYWwgYWNldHlsYXRpb24gb2YgY2VsbHVsYXIgcHJvdGVpbnMgY3JlYXRlcyBzcGVjaWZpYyBkZWdyYWRhdGlvbiBzaWduYWxzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5TY2llbmNlPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjMyNzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT45NzM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAyMHxucGgxNDYxOS1jaXQtMDAyMCI+DQogICAgICAgICAgICAgIDxhdXRob3I+S2ltPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE0PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMTYvai5jZWxsLjIwMTMuMTEuMDMxPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSBOLXRlcm1pbmFsIG1ldGhpb25pbmUgb2YgY2VsbHVsYXIgcHJvdGVpbnMgYXMgYSBkZWdyYWRhdGlvbiBzaWduYWw8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkNlbGw8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTU2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE1ODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDIxfG5waDE0NjE5LWNpdC0wMDIxIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5LbGVpZmVsZDwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMDwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDM4L25idC4xNjExPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPklzb3RvcGljIGxhYmVsaW5nIG9mIHRlcm1pbmFsIGFtaW5lcyBpbiBjb21wbGV4IHNhbXBsZXMgaWRlbnRpZmllcyBwcm90ZWluIE4tdGVybWluaSBhbmQgcHJvdGVhc2UgY2xlYXZhZ2UgcHJvZHVjdHM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk5hdHVyZSBCaW90ZWNobm9sb2d5PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjI4PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI4MTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDIyfG5waDE0NjE5LWNpdC0wMDIyIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5MZWU8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTY8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTQzNDgvbW9sY2VsbHMuMjAxNi4yMzI5PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPk4tdGVybWluYWwgYWNldHlsYXRpb24tdGFyZ2V0ZWQgTi1lbmQgcnVsZSBwcm90ZW9seXRpYyBzeXN0ZW06IHRoZSBBYy9OLWVuZCBydWxlIHBhdGh3YXk8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbGVjdWxlcyBhbmQgQ2VsbHM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mzk8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTY5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMjN8bnBoMTQ2MTktY2l0LTAwMjMiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkxpPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMDUvdHBjLjE2LjAwNzY4PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlByb3RlaW4gZGVncmFkYXRpb24gcmF0ZSBpbiBBcmFiaWRvcHNpcyB0aGFsaWFuYSBsZWFmIGdyb3d0aCBhbmQgZGV2ZWxvcG1lbnQ8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlBsYW50IENlbGw8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mjk8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjA3PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMjR8bnBoMTQ2MTktY2l0LTAwMjQiPg0KICAgICAgICAgICAgICA8YXV0aG9yPk1ham92c2t5PC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE0PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMjEvcHI1MDAxNjRqPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRhcmdldGVkIHByb3Rlb21pY3MgYW5hbHlzaXMgb2YgcHJvdGVpbiBkZWdyYWRhdGlvbiBpbiBwbGFudCBzaWduYWxpbmcgb24gYW4gTFRRLU9yYml0cmFwIG1hc3Mgc3BlY3Ryb21ldGVyPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Kb3VybmFsIG9mIFByb3Rlb21lIFJlc2VhcmNoPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQyNDY8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAyNXxucGgxNDYxOS1jaXQtMDAyNSI+DQogICAgICAgICAgICAgIDxhdXRob3I+TWFyY2hpPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMzgvc3JlcDI2MDIwPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSBOLWVuZCBydWxlIHBhdGh3YXkgcmVndWxhdGVzIHBhdGhvZ2VuIHJlc3BvbnNlcyBpbiBwbGFudHM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlNjaWVudGlmaWMgUmVwb3J0czwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT42PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI2MDIwPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMjZ8bnBoMTQ2MTktY2l0LTAwMjYiPg0KICAgICAgICAgICAgICA8YXV0aG9yPk1lbmRpb25kbzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMTExL3BiaS4xMjMzNDwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5FbmhhbmNlZCB3YXRlcmxvZ2dpbmcgdG9sZXJhbmNlIGluIGJhcmxleSBieSBtYW5pcHVsYXRpb24gb2YgZXhwcmVzc2lvbiBvZiB0aGUgTi1lbmQgcnVsZSBwYXRod2F5IEUzIGxpZ2FzZSBQUk9URU9MWVNJUzY8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlBsYW50IEJpb3RlY2hub2xvZ3kgSm91cm5hbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xNDwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT40MDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDI3fG5waDE0NjE5LWNpdC0wMDI3Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5Nb3Q8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTc8L2NZZWFyPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5SZWFsLXRpbWUgZGV0ZWN0aW9uIG9mIE4tZW5kIHJ1bGUtbWVkaWF0ZWQgdWJpcXVpdGluYXRpb24gdmlhIGZsdW9yZXNjZW50bHkgbGFiZWxlZCBzdWJzdHJhdGUgcHJvYmVzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OZXcgUGh5dG9sb2dpc3Q8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTExMS9ucGguMTQ0OTc8L2RvaT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDI4fG5waDE0NjE5LWNpdC0wMDI4Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5OaXNoaW11cmE8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTM8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTEwNS90cGMuMTEzLjExMjU1NzwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5DbHBTMSBpcyBhIGNvbnNlcnZlZCBzdWJzdHJhdGUgc2VsZWN0b3IgZm9yIHRoZSBjaGxvcm9wbGFzdCBDbHAgcHJvdGVhc2Ugc3lzdGVtIGluIEFyYWJpZG9wc2lzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5QbGFudCBDZWxsPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjI1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjIyNzY8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAyOXxucGgxNDYxOS1jaXQtMDAyOSI+DQogICAgICAgICAgICAgIDxhdXRob3I+TmlzaGltdXJhPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE1PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMTYvai5iYmFiaW8uMjAxNC4xMS4wMTI8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+T3JnYW5pemF0aW9uLCBmdW5jdGlvbiBhbmQgc3Vic3RyYXRlcyBvZiB0aGUgZXNzZW50aWFsIENscCBwcm90ZWFzZSBzeXN0ZW0gaW4gcGxhc3RpZHM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkJpb2NoaW1pY2EgZXQgQmlvcGh5c2ljYSBBY3RhPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE4NDc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+OTE1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMzB8bnBoMTQ2MTktY2l0LTAwMzAiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlBpYXRrb3Y8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTJhPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwNzMvcG5hcy4xMjA3Nzg2MTA5PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSBOLWVuZCBydWxlIHBhdGh3YXkgY291bnRlcmFjdHMgY2VsbCBkZWF0aCBieSBkZXN0cm95aW5nIHByb2Fwb3B0b3RpYyBwcm90ZWluIGZyYWdtZW50czwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+UHJvY2VlZGluZ3Mgb2YgdGhlIE5hdGlvbmFsIEFjYWRlbXkgb2YgU2NpZW5jZXMsIFVTQTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xMDk8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+RTE4Mzk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAzMXxucGgxNDYxOS1jaXQtMDAzMSI+DQogICAgICAgICAgICAgIDxhdXRob3I+UGlhdGtvdjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMmI8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTAxNi9qLm1vbGNlbC4yMDEyLjEwLjAxMjwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5UaGUgYXV0by1nZW5lcmF0ZWQgZnJhZ21lbnQgb2YgdGhlIFVzcDEgZGV1YmlxdWl0eWxhc2UgaXMgYSBwaHlzaW9sb2dpY2FsIHN1YnN0cmF0ZSBvZiB0aGUgTi1lbmQgcnVsZSBwYXRod2F5PC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Nb2xlY3VsYXIgQ2VsbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT40ODwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT45MjY8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAzMnxucGgxNDYxOS1jaXQtMDAzMiI+DQogICAgICAgICAgICAgIDxhdXRob3I+UG90dXNjaGFrPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTk4PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwNzMvcG5hcy45NS4xNC43OTA0PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlBSVDEgb2YgQXJhYmlkb3BzaXMgdGhhbGlhbmEgZW5jb2RlcyBhIGNvbXBvbmVudCBvZiB0aGUgcGxhbnQgTi1lbmQgcnVsZcKgcGF0aHdheTwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+UHJvY2VlZGluZ3Mgb2YgdGhlIE5hdGlvbmFsIEFjYWRlbXkgb2YgU2NpZW5jZXMsIFVTQTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT45NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT43OTA0PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMzN8bnBoMTQ2MTktY2l0LTAwMzMiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlJhbzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDM4LzM1MDczNjI3PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkRlZ3JhZGF0aW9uIG9mIGEgY29oZXNpbiBzdWJ1bml0IGJ5IHRoZSBOLWVuZCBydWxlIHBhdGh3YXkgaXMgZXNzZW50aWFsIGZvciBjaHJvbW9zb21lIHN0YWJpbGl0eTwvYXJ0aWNsZV90aXRsZT4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TmF0dXJlPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjQxMDwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT45NTU8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAzNHxucGgxNDYxOS1jaXQtMDAzNCI+DQogICAgICAgICAgICAgIDxhdXRob3I+UmliZXI8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTEwNC9wcC4xMTQuMjUzMDg4PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSBncmVlbmluZyBhZnRlciBleHRlbmRlZCBkYXJrbmVzczEgaXMgYW4gTi1lbmQgcnVsZSBwYXRod2F5IG11dGFudCB3aXRoIGhpZ2ggdG9sZXJhbmNlIHRvIHN1Ym1lcmdlbmNlIGFuZCBzdGFydmF0aW9uPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5QbGFudCBQaHlzaW9sb2d5PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE2Nzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xNjE2PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMzV8bnBoMTQ2MTktY2l0LTAwMzUiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlJvd2xhbmQ8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMTU8L2NZZWFyPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5UaGUgQXJhYmlkb3BzaXMgY2hsb3JvcGxhc3Qgc3Ryb21hbCBOLXRlcm1pbm9tZTogY29tcGxleGl0aWVzIG9mIGFtaW5vLXRlcm1pbmFsIHByb3RlaW4gbWF0dXJhdGlvbiBhbmQgc3RhYmlsaXR5PC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5QbGFudCBQaHlzaW9sb2d5PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE2OTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xODgxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMzZ8bnBoMTQ2MTktY2l0LTAwMzYiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlNhbnR0PC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDA4PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwOTEvbWJjLkUwOC0wMy0wMzI4PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSB5ZWFzdCBHSUQgY29tcGxleCwgYSBub3ZlbCB1YmlxdWl0aW4gbGlnYXNlIChFMykgaW52b2x2ZWQgaW4gdGhlIHJlZ3VsYXRpb24gb2YgY2FyYm9oeWRyYXRlIG1ldGFib2xpc208L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbGVjdWxhciBCaW9sb2d5IG9mIHRoZSBDZWxsPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE5PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjMzMjM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAzN3xucGgxNDYxOS1jaXQtMDAzNyI+DQogICAgICAgICAgICAgIDxhdXRob3I+U2NoaWxsaW5nPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDExPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMzgvbnByb3QuMjAxMC4xNzg8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+Q2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgcHJpbWUgYW5kIG5vbi1wcmltZSBhY3RpdmUgc2l0ZSBzcGVjaWZpY2l0aWVzIG9mIHByb3RlYXNlcyBieSBwcm90ZW9tZS1kZXJpdmVkIHBlcHRpZGUgbGlicmFyaWVzIGFuZCB0YW5kZW0gbWFzcyBzcGVjdHJvbWV0cnk8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk5hdHVyZSBQcm90b2NvbHM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+Njwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMTE8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDAzOHxucGgxNDYxOS1jaXQtMDAzOCI+DQogICAgICAgICAgICAgIDxhdXRob3I+VGFrZW1vdG88L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pIHByb3ZpZGVyPSJjcm9zc3JlZiI+MTAuMTA5NC9NUE1JLTE4LTEyNTg8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+TWVtYnJhbmUgcmVsZWFzZSBhbmQgZGVzdGFiaWxpemF0aW9uIG9mIEFyYWJpZG9wc2lzIFJJTjQgZm9sbG93aW5nIGNsZWF2YWdlIGJ5IFBzZXVkb21vbmFzIHN5cmluZ2FlIEF2clJwdDI8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbGVjdWxhciBQbGFudC1NaWNyb2JlIEludGVyYWN0aW9uczwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xODwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjU4PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwMzl8bnBoMTQ2MTktY2l0LTAwMzkiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlRhc2FraTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMTQ2L2FubnVyZXYtYmlvY2hlbS0wNTE3MTAtMDkzMzA4PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlRoZSBOLWVuZCBydWxlIHBhdGh3YXk8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkFubnVhbCBSZXZpZXcgb2YgQmlvY2hlbWlzdHJ5PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjgxPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI2MTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQwfG5waDE0NjE5LWNpdC0wMDQwIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5Uc2lhdHNpYW5pPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEzPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjExMDUvdHBjLjExMy4xMTUyODc8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+VGhlIEFyYWJpZG9wc2lzIG1ldGFjYXNwYXNlOSBkZWdyYWRvbWU8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlBsYW50IENlbGw8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjU8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjgzMTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQxfG5waDE0NjE5LWNpdC0wMDQxIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5WYXJzaGF2c2t5PC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDExPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMDIvcHJvLjY2NjwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5UaGUgTi1lbmQgcnVsZSBwYXRod2F5IGFuZCByZWd1bGF0aW9uIGJ5IHByb3Rlb2x5c2lzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Qcm90ZWluIFNjaWVuY2U8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjA8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTI5ODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQyfG5waDE0NjE5LWNpdC0wMDQyIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5WZW5uZTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDAyL3BtaWMuMjAxNTAwMDE0PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkFuIGltcHJvdmVkIHdvcmtmbG93IGZvciBxdWFudGl0YXRpdmUgTi10ZXJtaW5hbCBjaGFyZ2UtYmFzZWQgZnJhY3Rpb25hbCBkaWFnb25hbCBjaHJvbWF0b2dyYXBoeSAoQ2hhRlJBRElDKSB0byBzdHVkeSBwcm90ZW9seXRpYyBldmVudHMgaW4gQXJhYmlkb3BzaXMgdGhhbGlhbmE8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlByb3Rlb21pY3M8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTU8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjQ1ODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQzfG5waDE0NjE5LWNpdC0wMDQzIj4NCiAgICAgICAgICAgICAgPGF1dGhvcj5WZW5uZTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDIxL3ByNDAwNDM1ZDwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5Ob3ZlbCBoaWdobHkgc2Vuc2l0aXZlLCBzcGVjaWZpYywgYW5kIHN0cmFpZ2h0Zm9yd2FyZCBzdHJhdGVneSBmb3IgY29tcHJlaGVuc2l2ZSBOLXRlcm1pbmFsIHByb3Rlb21pY3MgcmV2ZWFscyB1bmtub3duIHN1YnN0cmF0ZXMgb2YgdGhlIG1pdG9jaG9uZHJpYWwgcGVwdGlkYXNlIEljcDU1PC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Kb3VybmFsIG9mIFByb3Rlb21lIFJlc2VhcmNoPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjM4MjM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iMTAuMTExMS9ucGguMTQ2MTktQklCMDA0NHxucGgxNDYxOS1jaXQtMDA0NCI+DQogICAgICAgICAgICAgIDxhdXRob3I+Vm9ndGxlPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDA5PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMTYvai5jZWxsLjIwMDkuMDcuMDQ1PC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPkdsb2JhbCBhbmFseXNpcyBvZiB0aGUgbWl0b2Nob25kcmlhbCBOLXByb3Rlb21lIGlkZW50aWZpZXMgYSBwcm9jZXNzaW5nIHBlcHRpZGFzZSBjcml0aWNhbCBmb3IgcHJvdGVpbiBzdGFiaWxpdHk8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkNlbGw8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTM5PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQyODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQ1fG5waDE0NjE5LWNpdC0wMDQ1Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5XYWRhczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDc0L2piYy5NMTE2Ljc0Nzk1NjwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5BbmFseXppbmcgTi10ZXJtaW5hbCBhcmdpbnlsYXRpb24gdGhyb3VnaCB0aGUgdXNlIG9mIHBlcHRpZGUgYXJyYXlzIGFuZCBkZWdyYWRhdGlvbiBhc3NheXM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkpvdXJuYWwgb2YgQmlvbG9naWNhbCBDaGVtaXN0cnk8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjkxPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjIwOTc2PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwNDZ8bnBoMTQ2MTktY2l0LTAwNDYiPg0KICAgICAgICAgICAgICA8YXV0aG9yPldlaXRzPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE0PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMzgvbmNvbW1zNDQyNTwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5QbGFudCBjeXN0ZWluZSBveGlkYXNlcyBjb250cm9sIHRoZSBveHlnZW4tZGVwZW5kZW50IGJyYW5jaCBvZiB0aGUgTi1lbmQtcnVsZSBwYXRod2F5PC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXR1cmUgQ29tbXVuaWNhdGlvbnM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4zNDI1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IjEwLjExMTEvbnBoLjE0NjE5LUJJQjAwNDd8bnBoMTQ2MTktY2l0LTAwNDciPg0KICAgICAgICAgICAgICA8YXV0aG9yPldoaXRlPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDE2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaSBwcm92aWRlcj0iY3Jvc3NyZWYiPjEwLjEwMzgvbmNvbW1zMTQ2OTA8L2RvaT4NCiAgICAgICAgICAgICAgPGFydGljbGVfdGl0bGU+UGxhbnQgY3lzdGVpbmUgb3hpZGFzZXMgYXJlIGRpb3h5Z2VuYXNlcyB0aGF0IGRpcmVjdGx5IGVuYWJsZSBhcmdpbnlsIHRyYW5zZmVyYXNlLWNhdGFseXplZCBhcmdpbnlsYXRpb24gb2YgTi1lbmQgcnVsZSB0YXJnZXRzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXR1cmUgQ29tbXVuaWNhdGlvbnM8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+ODwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xNDY5MDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQ4fG5waDE0NjE5LWNpdC0wMDQ4Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5YdTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMTA1L3RwYy4xNS4wMDE3MzwvZG9pPg0KICAgICAgICAgICAgICA8YXJ0aWNsZV90aXRsZT5Ud28gTi10ZXJtaW5hbCBhY2V0eWx0cmFuc2ZlcmFzZXMgYW50YWdvbmlzdGljYWxseSByZWd1bGF0ZSB0aGUgc3RhYmlsaXR5IG9mIGEgbm9kLWxpa2UgcmVjZXB0b3IgaW4gQXJhYmlkb3BzaXM8L2FydGljbGVfdGl0bGU+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlBsYW50IENlbGw8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mjc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTU0NzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSIxMC4xMTExL25waC4xNDYxOS1CSUIwMDQ5fG5waDE0NjE5LWNpdC0wMDQ5Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5aaGFuZzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxNTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2kgcHJvdmlkZXI9ImNyb3NzcmVmIj4xMC4xMDAyL3BtaWMuMjAxNDAwNTMwPC9kb2k+DQogICAgICAgICAgICAgIDxhcnRpY2xlX3RpdGxlPlF1YW50aXRhdGl2ZSBwcm90ZW9taWNzIGFuYWx5c2lzIG9mIHRoZSBBcmcvTi1lbmQgcnVsZSBwYXRod2F5IG9mIHRhcmdldGVkIGRlZ3JhZGF0aW9uIGluIEFyYWJpZG9wc2lzIHJvb3RzPC9hcnRpY2xlX3RpdGxlPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Qcm90ZW9taWNzPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjI0NDc8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgIDwvY2l0YXRpb25fbGlzdD4NCiAgICAgICAgPC9qb3VybmFsX2FydGljbGU+DQogICAgICA8L2pvdXJuYWw+DQogICAgPC9jcm9zc3JlZj4NCiAgPC9kb2lfcmVjb3JkPg0KPC9kb2lfcmVjb3Jkcz4=
|
88
|
+
http_version:
|
89
|
+
recorded_at: Fri, 29 Dec 2017 12:46:06 GMT
|
90
|
+
recorded_with: VCR 3.0.3
|
@@ -171,6 +171,24 @@ describe Bolognese::Metadata, vcr: true do
|
|
171
171
|
expect(subject.provider).to eq("Crossref")
|
172
172
|
end
|
173
173
|
|
174
|
+
it "journal article with" do
|
175
|
+
input = "https://doi.org/10.1111/nph.14619"
|
176
|
+
subject = Bolognese::Metadata.new(input: input)
|
177
|
+
expect(subject.id).to eq(input)
|
178
|
+
expect(subject.url).to eq("http://doi.wiley.com/10.1111/nph.14619")
|
179
|
+
expect(subject.type).to eq("ScholarlyArticle")
|
180
|
+
expect(subject.additional_type).to eq("JournalArticle")
|
181
|
+
expect(subject.resource_type_general).to eq("Text")
|
182
|
+
expect(subject.author.length).to eq(3)
|
183
|
+
expect(subject.author.first).to eq("type"=>"Person", "id"=>"http://orcid.org/0000-0002-4156-3761", "name"=>"Nico Dissmeyer", "givenName"=>"Nico", "familyName"=>"Dissmeyer")
|
184
|
+
expect(subject.title).to eq("Life and death of proteins after protease cleavage: protein degradation by the N-end rule pathway")
|
185
|
+
expect(subject.license).to eq([{"id"=>"http://doi.wiley.com/10.1002/tdm_license_1"}, {"id"=>"http://onlinelibrary.wiley.com/termsAndConditions"}])
|
186
|
+
expect(subject.date_published).to eq("2017-06-05")
|
187
|
+
expect(subject.date_modified).to eq("2017-06-05T10:56:59Z")
|
188
|
+
expect(subject.is_part_of).to eq("type"=>"Periodical", "title"=>"New Phytologist", "issn"=>"0028646X")
|
189
|
+
expect(subject.provider).to eq("Crossref")
|
190
|
+
end
|
191
|
+
|
174
192
|
it "not found error" do
|
175
193
|
input = "https://doi.org/10.7554/elife.01567x"
|
176
194
|
subject = Bolognese::Metadata.new(input: input)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bolognese
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.67
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
@@ -639,6 +639,7 @@ files:
|
|
639
639
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/dataset.yml
|
640
640
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/date_in_future.yml
|
641
641
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article.yml
|
642
|
+
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml
|
642
643
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml
|
643
644
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml
|
644
645
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/BlogPosting.yml
|