sniffles 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rvmrc ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p125@sniffles"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.10.2" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ else
29
+ # If the environment file has not yet been created, use the RVM CLI to select.
30
+ rvm --create "$environment_id" || {
31
+ echo "Failed to create RVM environment '${environment_id}'."
32
+ return 1
33
+ }
34
+ fi
35
+
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | grep $rvm_path/bin/bundle >/dev/null
40
+ # }
41
+ # then
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
44
+ # fi
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
+ # then
47
+ # bundle install | grep -vE '^Using|Your bundle is complete'
48
+ # fi
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sniffles.gemspec
4
+ gemspec
5
+
6
+ group :development, :test do
7
+ gem 'guard-rspec'
8
+ end
9
+
10
+ group :test do
11
+ gem 'rake'
12
+ end
13
+
14
+ require 'rbconfig'
15
+
16
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
17
+ gem 'growl', :require => false
18
+ end
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Ezekiel Templin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # Sniffles
2
+ !["Travis Build Status"](https://secure.travis-ci.org/ezkl/sniffles.png?branch=master)
3
+
4
+ ## Description
5
+ Sniffles parses HTML pages and searches for common patterns suggesting a page is using popular CMS, CSS, and JS libraries.
6
+
7
+ **Work in Progress!**
8
+
9
+ ## Installation
10
+ Rubygems:
11
+
12
+ `gem install sniffles`
13
+
14
+ Bundler:
15
+
16
+ `gem 'sniffles'`
17
+
18
+ ## Usage
19
+ require 'sniffles'
20
+ require 'typhoeus' # Optional: Use your favorite HTTP client.
21
+
22
+ response = Typhoeus::Request.get("http://www.wordpress.com/")
23
+ Sniffles.sniff(response.body) # => {wordpress: true, jquery: true, quantcast: true}
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module Sniffles
2
+ VERSION = "0.0.1"
3
+ end
data/lib/sniffles.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'nokogiri'
2
+
3
+ require "sniffles/version"
4
+
5
+ module Sniffles
6
+ def self.sniff(html)
7
+ output = {}
8
+ output[:wordpress] = true if wordpress?(html)
9
+ output[:jquery] = true if jquery?(html)
10
+ output[:quantcast] = true if quantcast?(html)
11
+
12
+ output
13
+ end
14
+
15
+ def self.wordpress?(html)
16
+ !!(html =~ /wp-content/i)
17
+ end
18
+
19
+ def self.jquery?(html)
20
+ !!(html =~ /jQuery/)
21
+ end
22
+
23
+ def self.quantcast?(html)
24
+ !!(html =~ /\.quantserve\.com\/quant\.js/)
25
+ end
26
+ end
data/sniffles.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/sniffles/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Ezekiel Templin"]
6
+ gem.email = ["zeke@templ.in"]
7
+ gem.description = %q{Detects popular CMS, Javascript libraries, and other items of interest.}
8
+ gem.summary = %q{Sniffles helps you determine the platforms and libraries a website is running.}
9
+ gem.homepage = "http://documentup.com/ezkl/sniffles"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "sniffles"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Sniffles::VERSION
17
+
18
+ gem.add_runtime_dependency("nokogiri", "~> 1.5.0")
19
+
20
+ gem.add_development_dependency("rspec", "~> 2.8.0")
21
+ gem.add_development_dependency("typhoeus", "~> 0.3.3")
22
+ gem.add_development_dependency("vcr", "2.0.0.rc2")
23
+ end
@@ -0,0 +1,900 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.wordpress.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: !binary |-
14
+ TW92ZWQgUGVybWFuZW50bHk=
15
+ headers:
16
+ !binary "U2VydmVy":
17
+ - !binary |-
18
+ bmdpbng=
19
+ - !binary |-
20
+ bmdpbng=
21
+ !binary "RGF0ZQ==":
22
+ - !binary |-
23
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxNTozMiBHTVQ=
24
+ - !binary |-
25
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxNTozMiBHTVQ=
26
+ !binary "Q29udGVudC1UeXBl":
27
+ - !binary |-
28
+ dGV4dC9odG1s
29
+ - !binary |-
30
+ dGV4dC9odG1sOyBjaGFyc2V0PVVURi04
31
+ !binary "Q29ubmVjdGlvbg==":
32
+ - !binary |-
33
+ Y2xvc2U=
34
+ - !binary |-
35
+ Y2xvc2U=
36
+ !binary "Q29udGVudC1MZW5ndGg=":
37
+ - !binary |-
38
+ MTc4
39
+ !binary "TG9jYXRpb24=":
40
+ - !binary |-
41
+ aHR0cDovL3dvcmRwcmVzcy5jb20v
42
+ !binary "VHJhbnNmZXItRW5jb2Rpbmc=":
43
+ - !binary |-
44
+ Y2h1bmtlZA==
45
+ !binary "VmFyeQ==":
46
+ - !binary |-
47
+ QWNjZXB0LUVuY29kaW5n
48
+ - !binary |-
49
+ Q29va2ll
50
+ !binary "TGFzdC1Nb2RpZmllZA==":
51
+ - !binary |-
52
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxMzoxNCArMDAwMA==
53
+ !binary "Q2FjaGUtQ29udHJvbA==":
54
+ - !binary |-
55
+ bWF4LWFnZT0xNjIsIG11c3QtcmV2YWxpZGF0ZQ==
56
+ !binary "WC1IYWNrZXI=":
57
+ - !binary |-
58
+ SWYgeW91J3JlIHJlYWRpbmcgdGhpcywgeW91IHNob3VsZCB2aXNpdCBhdXRv
59
+ bWF0dGljLmNvbS9qb2JzIGFuZCBhcHBseSB0byBqb2luIHRoZSBmdW4sIG1l
60
+ bnRpb24gdGhpcyBoZWFkZXIu
61
+ !binary "WC1QaW5nYmFjaw==":
62
+ - !binary |-
63
+ aHR0cDovL3dvcmRwcmVzcy5jb20veG1scnBjLnBocA==
64
+ !binary "TGluaw==":
65
+ - !binary |-
66
+ PGh0dHA6Ly93cC5tZS8xPjsgcmVsPXNob3J0bGluaw==
67
+ !binary "WC1OYW5hbmFuYQ==":
68
+ - !binary |-
69
+ QmF0Y2FjaGU=
70
+ !binary "Q29udGVudC1FbmNvZGluZw==":
71
+ - !binary |-
72
+ Z3ppcA==
73
+ body:
74
+ encoding: ASCII-8BIT
75
+ string: !binary |-
76
+ PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAg
77
+ VHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1s
78
+ MS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0i
79
+ aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgZGlyPSJsdHIiIGxhbmc9
80
+ ImVuIj48IS0tCglnZW5lcmF0ZWQgMTM4IHNlY29uZHMgYWdvCglnZW5lcmF0
81
+ ZWQgaW4gMC4yOTAgc2Vjb25kcwoJc2VydmVkIGZyb20gYmF0Y2FjaGUgaW4g
82
+ MC4wMDYgc2Vjb25kcwoJZXhwaXJlcyBpbiAxNjIgc2Vjb25kcwotLT4KPGhl
83
+ YWQgcHJvZmlsZT0iaHR0cDovL2dtcGcub3JnL3hmbi8xMSI+CjxtZXRhIGh0
84
+ dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBj
85
+ aGFyc2V0PVVURi04IiAvPgoKCTx0aXRsZT5Xb3JkUHJlc3MuY29tICYjODIx
86
+ MjsgR2V0IGEgRnJlZSBCbG9nIEhlcmU8L3RpdGxlPgoKCgk8bGluayByZWw9
87
+ ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9
88
+ IldvcmRQcmVzcy5jb20gTmV3cyIgaHJlZj0iaHR0cDovL2VuLmJsb2cud29y
89
+ ZHByZXNzLmNvbS9mZWVkLyIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0
90
+ eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0iV29yZFByZXNzLmNv
91
+ bSBGcmVzaGx5IFByZXNzZWQiIGhyZWY9Imh0dHA6Ly9mcmVzaGx5cHJlc3Nl
92
+ ZC53b3JkcHJlc3MuY29tL2ZlZWQvIiAvPgo8bGluayByZWw9ImFsdGVybmF0
93
+ ZSIgdHlwZT0idGV4dC9odG1sIiBocmVmbGFuZz0iZXMiIHRpdGxlPSJFc3Bh
94
+ JiMyNDE7b2wiIGhyZWY9Imh0dHA6Ly9lcy53b3JkcHJlc3MuY29tLyIgLz4K
95
+ PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZmxh
96
+ bmc9ImRlIiB0aXRsZT0iRGV1dHNjaCIgaHJlZj0iaHR0cDovL2RlLndvcmRw
97
+ cmVzcy5jb20vIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0idGV4
98
+ dC9odG1sIiBocmVmbGFuZz0icHQtYnIiIHRpdGxlPSJQb3J0dWd1JiMyMzQ7
99
+ cyBkbyBCcmFzaWwiIGhyZWY9Imh0dHA6Ly9wdC1ici53b3JkcHJlc3MuY29t
100
+ LyIgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIg
101
+ aHJlZmxhbmc9ImlkIiB0aXRsZT0iQmFoYXNhIEluZG9uZXNpYSIgaHJlZj0i
102
+ aHR0cDovL2lkLndvcmRwcmVzcy5jb20vIiAvPgo8bGluayByZWw9ImFsdGVy
103
+ bmF0ZSIgdHlwZT0idGV4dC9odG1sIiBocmVmbGFuZz0iZnIiIHRpdGxlPSJG
104
+ cmFuJiMyMzE7YWlzIiBocmVmPSJodHRwOi8vZnIud29yZHByZXNzLmNvbS8i
105
+ IC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhy
106
+ ZWZsYW5nPSJpdCIgdGl0bGU9Ikl0YWxpYW5vIiBocmVmPSJodHRwOi8vaXQu
107
+ d29yZHByZXNzLmNvbS8iIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBl
108
+ PSJ0ZXh0L2h0bWwiIGhyZWZsYW5nPSJ0ciIgdGl0bGU9IlQmIzI1MjtyayYj
109
+ MjMxO2UiIGhyZWY9Imh0dHA6Ly90ci53b3JkcHJlc3MuY29tLyIgLz4KPGxp
110
+ bmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZmxhbmc9
111
+ InB0IiB0aXRsZT0iUG9ydHVndSYjMjM0O3MiIGhyZWY9Imh0dHA6Ly9wdC53
112
+ b3JkcHJlc3MuY29tLyIgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9
113
+ InRleHQvaHRtbCIgaHJlZmxhbmc9Im5sIiB0aXRsZT0iTmVkZXJsYW5kcyIg
114
+ aHJlZj0iaHR0cDovL25sLndvcmRwcmVzcy5jb20vIiAvPjxtZXRhIHhtbG5z
115
+ OmZiPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS8yMDA4L2ZibWwiIHByb3Bl
116
+ cnR5PSJmYjpwYWdlX2lkIiBjb250ZW50PSIxMzQwOTg5MTM5NzkiIC8+Cjxt
117
+ ZXRhIHhtbG5zOmZiPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS8yMDA4L2Zi
118
+ bWwiIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjI0OTY0MzMxMTQ5
119
+ MCIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
120
+ aHJlZj0iaHR0cDovL3MyLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9z
121
+ dHlsZS5jc3M/bT0xMzMwMDQxMjEyZyZhbXA7NSIgbWVkaWE9InNjcmVlbiIg
122
+ Lz4KPCEtLVtpZiBsdCBJRSA3XT4KPGxpbmsgaHJlZj0iaHR0cDovL3MyLndw
123
+ LmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9pZTYuY3NzP209MTM0NzMwNTE4
124
+ M2ciIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
125
+ Y3JlZW4iIC8+CjwhW2VuZGlmXS0tPgo8IS0tW2lmIGx0IElFIDhdPgoJPHN0
126
+ eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4jZnJvbnQtcGFn
127
+ ZSB1bCN0b3BuYXYsLmxvZ2dlZGluIHVsI3RvcG5hdnt3aWR0aDo1MjVweH11
128
+ bCN0b3BuYXYgbGl7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT4KPCFbZW5kaWZd
129
+ LS0+CjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVu
130
+ c2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSJodHRwOi8vZW4uc2VhcmNo
131
+ LndvcmRwcmVzcy5jb20vb3BlbnNlYXJjaC54bWwiIHRpdGxlPSJXb3JkUHJl
132
+ c3MuY29tIiAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8q
133
+ IDwhW0NEQVRBWyAqLwpmdW5jdGlvbiBhZGRMb2FkRXZlbnQoZnVuYyl7dmFy
134
+ IG9sZG9ubG9hZD13aW5kb3cub25sb2FkO2lmKHR5cGVvZiB3aW5kb3cub25s
135
+ b2FkIT0nZnVuY3Rpb24nKXt3aW5kb3cub25sb2FkPWZ1bmM7fWVsc2V7d2lu
136
+ ZG93Lm9ubG9hZD1mdW5jdGlvbigpe29sZG9ubG9hZCgpO2Z1bmMoKTt9fX0K
137
+ LyogXV0+ICovCjwvc2NyaXB0Pgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
138
+ ZWY9Imh0dHA6Ly9zMC53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvZ2xv
139
+ YmFsLmNzcz9tPTEzNTI0MDg0OTRnIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxp
140
+ bmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncG9zdC1yZWFjdGlvbnMtY3NzJyAg
141
+ aHJlZj0naHR0cDovL3MyLndwLmNvbS93cC1jb250ZW50L211LXBsdWdpbnMv
142
+ cG9zdC1mbGFpci9zdHlsZS5jc3M/bT0xMzU0NDc0Mzk5ZyYjMDM4O3Zlcj0z
143
+ JyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPHNjcmlwdCB0eXBl
144
+ PSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3MwLndwLmNvbS93cC1p
145
+ bmNsdWRlcy9qcy9qcXVlcnkvanF1ZXJ5LmpzP209MTM1MjY1MzE1N2cmIzAz
146
+ ODt2ZXI9MS43LjEnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2
147
+ YXNjcmlwdCcgc3JjPSdodHRwOi8vczIud3AuY29tL3dwLWNvbnRlbnQvdGhl
148
+ bWVzL2g0L2pzL3NjcmlwdHMuanM/bT0xMzUyNjc1NTUwZyYjMDM4O3Zlcj0z
149
+ LjQtYWxwaGEtMTk5MDQnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQv
150
+ amF2YXNjcmlwdCc+Ci8qIDwhW0NEQVRBWyAqLwp2YXIga21fZGF0YSA9IHsi
151
+ ZXZlbnRfbmFtZSI6InZpZXdlZCBob21lcGFnZSJ9OwovKiBdXT4gKi8KPC9z
152
+ Y3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0
153
+ dHA6Ly9zMi53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvanMva2lzc21l
154
+ dHJpY3MuanM/bT0xMzU0Mzk5NDM5ZyYjMDM4O3Zlcj0zLjQtYWxwaGEtMTk5
155
+ MDQnPjwvc2NyaXB0Pgo8bGluayByZWw9IkVkaXRVUkkiIHR5cGU9ImFwcGxp
156
+ Y2F0aW9uL3JzZCt4bWwiIHRpdGxlPSJSU0QiIGhyZWY9Imh0dHA6Ly93b3Jk
157
+ cHJlc3MuY29tL3htbHJwYy5waHA/cnNkIiAvPgo8bGluayByZWw9Indsd21h
158
+ bmlmZXN0IiB0eXBlPSJhcHBsaWNhdGlvbi93bHdtYW5pZmVzdCt4bWwiIGhy
159
+ ZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL3dwLWluY2x1ZGVzL3dsd21hbmlm
160
+ ZXN0LnhtbCIgLz4gCjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0i
161
+ V29yZFByZXNzLmNvbSIgLz4KPGxpbmsgcmVsPSdzaG9ydGxpbmsnIGhyZWY9
162
+ J2h0dHA6Ly93cC5tZS8xJyAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIg
163
+ Y29udGVudD0iYmxvZyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBj
164
+ b250ZW50PSJXb3JkUHJlc3MuY29tIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6
165
+ dXJsIiBjb250ZW50PSJodHRwOi8vd29yZHByZXNzLmNvbSIgLz4KPG1ldGEg
166
+ cHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3VyIEJsb2dn
167
+ aW5nIEhvbWUiIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNv
168
+ bnRlbnQ9IldvcmRQcmVzcy5jb20iIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpp
169
+ bWFnZSIgY29udGVudD0iaHR0cDovLzAuZ3JhdmF0YXIuY29tL2JsYXZhdGFy
170
+ LzY1MzE2Njc3M2RjODgxMjdiZDNhZmUwYjZkZmU1ZWE3P3M9MzAwIiAvPgo8
171
+ bGluayByZWw9J29wZW5pZC5zZXJ2ZXInIGhyZWY9J2h0dHA6Ly93b3JkcHJl
172
+ c3MuY29tLz9vcGVuaWRzZXJ2ZXI9MScgLz4KPGxpbmsgcmVsPSdvcGVuaWQu
173
+ ZGVsZWdhdGUnIGhyZWY9J2h0dHA6Ly93b3JkcHJlc3MuY29tLycgLz4KPGxp
174
+ bmsgcmVsPSJzZWFyY2giIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hk
175
+ ZXNjcmlwdGlvbit4bWwiIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL29z
176
+ ZC54bWwiIHRpdGxlPSJXb3JkUHJlc3MuY29tIiAvPgo8bGluayByZWw9InNl
177
+ YXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9u
178
+ K3htbCIgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5jb20vb3BlbnNlYXJjaC54
179
+ bWwiIHRpdGxlPSJXb3JkUHJlc3MuY29tIiAvPgoJPHN0eWxlIHR5cGU9InRl
180
+ eHQvY3NzIj4KCS8qIDwhW0NEQVRBWyAqLwoJCQkvKiBdXT4gKi8KCTwvc3R5
181
+ bGU+Cgk8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3Zu
182
+ ZC5taWNyb3NvZnQuaWNvbiIgaHJlZj0iaHR0cDovL3MxLndwLmNvbS9pL2Zh
183
+ dmljb24tc3RhY2tlZC5pY28/bT0xMzExOTc2MDIzZyIgc2l6ZXM9IjE2eDE2
184
+ IDMyeDMyIDQ4eDQ4IiAvPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5
185
+ cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cDovL3MyLndwLmNvbS9pL2Zh
186
+ dmljb24uaWNvP209MTMxMTk3NjAyM2ciIHNpemVzPSIxNngxNiIgLz4KPGxp
187
+ bmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Imh0dHA6
188
+ Ly9zMi53cC5jb20vaS9mYXZpY29uLmljbz9tPTEzMTE5NzYwMjNnIiBzaXpl
189
+ cz0iMTZ4MTYiIC8+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbi1wcmVj
190
+ b21wb3NlZCIgdHlwZT0iaW1hZ2UvcG5nIiBocmVmPSJodHRwOi8vMC5ncmF2
191
+ YXRhci5jb20vYmxhdmF0YXIvNjUzMTY2NzczZGM4ODEyN2JkM2FmZTBiNmRm
192
+ ZTVlYTc/cz0xMTQmIzAzODtkPWh0dHAlM0ElMkYlMkZzMC53cC5jb20lMkZp
193
+ JTJGd2ViY2xpcC5wbmciIHNpemVzPSIxMTR4MTE0IiAvPgoJPHN0eWxlIHR5
194
+ cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KCQkvKiBtb2JpbGUgKi8K
195
+ CQkJPC9zdHlsZT4KCTxtZXRhIG5hbWU9ImFwcGxpY2F0aW9uLW5hbWUiIGNv
196
+ bnRlbnQ9IldvcmRQcmVzcy5jb20iIC8+PG1ldGEgbmFtZT0ibXNhcHBsaWNh
197
+ dGlvbi13aW5kb3ciIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aDtoZWln
198
+ aHQ9ZGV2aWNlLWhlaWdodCIgLz48bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9u
199
+ LXRvb2x0aXAiIGNvbnRlbnQ9IllvdXIgQmxvZ2dpbmcgSG9tZSIgLz48bWV0
200
+ YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9U3Vi
201
+ c2NyaWJlO2FjdGlvbi11cmk9aHR0cDovL3dvcmRwcmVzcy5jb20vZmVlZC87
202
+ aWNvbi11cmk9aHR0cDovLzAuZ3JhdmF0YXIuY29tL2JsYXZhdGFyLzRlMjFk
203
+ NzAzZDgxODA5ZDIxNWNlYWFiYmYwN2VmYmM2P3M9MTYiIC8+PG1ldGEgbmFt
204
+ ZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250ZW50PSJuYW1lPVNpZ24gdXAg
205
+ Zm9yIGEgZnJlZSBibG9nO2FjdGlvbi11cmk9aHR0cDovL3dvcmRwcmVzcy5j
206
+ b20vc2lnbnVwLztpY29uLXVyaT1odHRwOi8vczIud3AuY29tL2kvZmF2aWNv
207
+ bi5pY28iIC8+PG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250
208
+ ZW50PSJuYW1lPVdvcmRQcmVzcy5jb20gU3VwcG9ydDthY3Rpb24tdXJpPWh0
209
+ dHA6Ly9zdXBwb3J0LndvcmRwcmVzcy5jb20vO2ljb24tdXJpPWh0dHA6Ly9z
210
+ Mi53cC5jb20vaS9mYXZpY29uLmljbyIgLz48bWV0YSBuYW1lPSJtc2FwcGxp
211
+ Y2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9V29yZFByZXNzLmNvbSBGb3J1
212
+ bXM7YWN0aW9uLXVyaT1odHRwOi8vZm9ydW1zLndvcmRwcmVzcy5jb20vO2lj
213
+ b24tdXJpPWh0dHA6Ly9zMi53cC5jb20vaS9mYXZpY29uLmljbyIgLz48c2Ny
214
+ aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KZnVuY3Rpb24gZ290
215
+ b0Z1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICBkb2N1bWVu
216
+ dC5sYW5ndWFnZS5sYW5ndWFnZXNlbC5vcHRpb25zW2RvY3VtZW50Lmxhbmd1
217
+ YWdlLmxhbmd1YWdlc2VsLnNlbGVjdGVkSW5kZXhdLnZhbHVlOyB9Ci8vIC0t
218
+ Pgo8L3NjcmlwdD4KCjxsaW5rIHJlbD0iZmx1aWQtaWNvbiIgaHJlZj0iaHR0
219
+ cDovL3dvcmRwcmVzcy5jb20vd3AtY29udGVudC90aGVtZXMvaDQvaS9mbHVp
220
+ ZGljb24ucG5nP209MTMyNjM0NjQyN2ciIHRpdGxlPSJXb3JkUHJlc3MuY29t
221
+ IiAvPgo8L2hlYWQ+Cgo8Ym9keSBpZD0iaDRob21lIj4KCgoJPHNjcmlwdCB0
222
+ eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KCXZhciBX
223
+ UENPTURvTG9naW5Gb3JtID0gZnVuY3Rpb24oKSB7CgkJalF1ZXJ5KCAnLmxv
224
+ Z2luLWZvcm0nICkuZWFjaCggZnVuY3Rpb24oKSB7CgkJCXZhciBsRm9ybSA9
225
+ IHRoaXM7CgoJCQkvLyBpbml0IGZpZWxkcwoJCQlpZihqUXVlcnkoJy51c2Vy
226
+ LWxvZ2luLWlucHV0JywgbEZvcm0pLnZhbCgpICE9PSAnJykKCQkJCWpRdWVy
227
+ eSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmhpZGUoKTsKCgkJ
228
+ CWlmKGpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcsIGxGb3JtKS52YWwoKSAh
229
+ PSAgJycpCgkJCQlqUXVlcnkoJy5wYXNzd29yZC1sYWJlbCBzcGFuJywgbEZv
230
+ cm0pLmhpZGUoKTsKCgkJCS8vIG9uIGZvY3VzCgkJCWpRdWVyeSgnLnVzZXJs
231
+ b2dpbi1sYWJlbCBpbnB1dCcsIGxGb3JtKS5mb2N1cyhmdW5jdGlvbigpIHsK
232
+ CQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmZh
233
+ ZGVUbygxMDAsIDAuNSk7CgoJCQkJaWYoalF1ZXJ5KCcudXNlci1sb2dpbi1p
234
+ bnB1dCcsIGxGb3JtKS52YWwoKSAhPT0gJycpCgkJCQlqUXVlcnkoJy51c2Vy
235
+ bG9naW4tbGFiZWwgc3BhbicsIGxGb3JtKS5oaWRlKCk7CgoJCQkJaWYoalF1
236
+ ZXJ5KCcudXNlci1wYXNzLWlucHV0JywgbEZvcm0pLnZhbCgpICE9ICAnJykK
237
+ CQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaGlk
238
+ ZSgpOwoKCQkJfSk7CgoJCQlqUXVlcnkoJy5wYXNzd29yZC1sYWJlbCBpbnB1
239
+ dCcsIGxGb3JtKS5mb2N1cyhmdW5jdGlvbigpIHsKCQkJCWpRdWVyeSgnLnBh
240
+ c3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuZmFkZVRvKDEwMCwgMC41KTsK
241
+ CgkJCQlpZihqUXVlcnkoJy51c2VyLXBhc3MtaW5wdXQnLCBsRm9ybSkudmFs
242
+ KCkgIT09ICAnJykKCQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4n
243
+ LCBsRm9ybSkuaGlkZSgpOwoJCQl9KTsKCgkJCS8vb24ga2V5ZG93bgoJCQlq
244
+ UXVlcnkoJy51c2VybG9naW4tbGFiZWwgaW5wdXQnLCBsRm9ybSkua2V5ZG93
245
+ bihmdW5jdGlvbigpIHsKIMKgIMKgCQkJCWlmKGpRdWVyeSgnLnVzZXJsb2dp
246
+ bi1sYWJlbCBzcGFuJywgbEZvcm0pLmlzKCc6dmlzaWJsZScpICkKIMKgIMKg
247
+ CQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmhp
248
+ ZGUoKTsKIMKgIAkJCX0pOwoKCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwg
249
+ aW5wdXQnLCBsRm9ybSkua2V5ZG93bihmdW5jdGlvbigpIHsKCQkJCWlmKGpR
250
+ dWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaXMoJzp2aXNp
251
+ YmxlJykgKQoJCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwgc3BhbicsIGxG
252
+ b3JtKS5oaWRlKCk7CgkJCX0pOwoKCQkJLy9vbiBjbGljawoJCQlqUXVlcnko
253
+ Jy5wYXNzd29yZC1sYWJlbCcsIGxGb3JtKS5jbGljayhmdW5jdGlvbigpIHsK
254
+ CQkJCWpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcsIGxGb3JtKS50cmlnZ2Vy
255
+ KCdmb2N1cycpOwoJCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwgc3Bhbics
256
+ IGxGb3JtKS5oaWRlKCk7CgkJCX0pOwoJCQlqUXVlcnkoJy51c2VybG9naW4t
257
+ bGFiZWwnLCBsRm9ybSkuY2xpY2soZnVuY3Rpb24oKSB7CgkJCQlqUXVlcnko
258
+ Jy51c2VyLWxvZ2luLWlucHV0JywgbEZvcm0pLnRyaWdnZXIoJ2ZvY3VzJyk7
259
+ CgkJCQlqUXVlcnkoJy51c2VybG9naW4tbGFiZWwgc3BhbicsIGxGb3JtKS5o
260
+ aWRlKCk7CgkJCX0pOwoKCQkJLy9vbiBibHVyCgkJCWpRdWVyeSgnLnVzZXIt
261
+ bG9naW4taW5wdXQnLCBsRm9ybSkuYmx1cihmdW5jdGlvbigpIHsKCQkJCWlm
262
+ KCBqUXVlcnkoJy51c2VyLWxvZ2luLWlucHV0JywgbEZvcm0pLnZhbCgpID09
263
+ ICAnJykgewoJCQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywg
264
+ bEZvcm0pLnNob3coKTsKCQkJCQlqUXVlcnkoJy51c2VybG9naW4tbGFiZWwg
265
+ c3BhbicsIGxGb3JtKS5mYWRlVG8oMTAwLCAxKTsKCQkJCX0KCQkJCWlmKGpR
266
+ dWVyeSgnLnVzZXItbG9naW4taW5wdXQnLCBsRm9ybSkudmFsKCkgIT09ICcn
267
+ KQoJCQkJalF1ZXJ5KCcudXNlcmxvZ2luLWxhYmVsIHNwYW4nLCBsRm9ybSku
268
+ aGlkZSgpOwoJCQl9KTsKCQkJalF1ZXJ5KCcudXNlci1wYXNzLWlucHV0Jywg
269
+ bEZvcm0pLmJsdXIoZnVuY3Rpb24oKSB7CgkJCQlpZiggalF1ZXJ5KCcudXNl
270
+ ci1wYXNzLWlucHV0JywgbEZvcm0pLnZhbCgpID09ICAnJykgewoJCQkJCWpR
271
+ dWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuc2hvdygpOwoJ
272
+ CQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuZmFk
273
+ ZVRvKDEwMCwgMSk7CgkJCQl9CgkJCQlpZihqUXVlcnkoJy51c2VyLXBhc3Mt
274
+ aW5wdXQnLCBsRm9ybSkudmFsKCkgIT09ICAnJykKCQkJCWpRdWVyeSgnLnBh
275
+ c3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaGlkZSgpOwoJCQl9KTsKCgkJ
276
+ fSk7Cgl9OwoJalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewoJ
277
+ CWlmICggISAoICdwbGFjZWhvbGRlcicgaW4gZG9jdW1lbnQuY3JlYXRlRWxl
278
+ bWVudCggJ2lucHV0JyApICkgKSB7CgkJCWpRdWVyeSgnLnVzZXItbG9naW4t
279
+ aW5wdXQnKS5iZWZvcmUoIjxzcGFuPiIgKyBqUXVlcnkoJy51c2VyLWxvZ2lu
280
+ LWlucHV0JykuYXR0cigncGxhY2Vob2xkZXInKSArICI8L3NwYW4+Iik7CgkJ
281
+ CWpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcpLmJlZm9yZSgiPHNwYW4+IiAr
282
+ IGpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcpLmF0dHIoJ3BsYWNlaG9sZGVy
283
+ JykgKyAiPC9zcGFuPiIpOwoJCQl2YXIgbG9naW5JbnB1dHMgPSBqUXVlcnko
284
+ Jy51c2VyLWxvZ2luLWlucHV0LCAudXNlci1wYXNzLWlucHV0JykuYmluZCgg
285
+ J2NoYW5nZS53cGNvbWRvbG9naW4nLCBmdW5jdGlvbigpIHsgV1BDT01Eb0xv
286
+ Z2luRm9ybSgpOyB9ICk7CgkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyBs
287
+ b2dpbklucHV0cy51bmJpbmQoICcud3Bjb21kb2xvZ2luJyApOyBXUENPTURv
288
+ TG9naW5Gb3JtKCk7IH0sIDIwMCApOwoJCX0KCX0gKTsKCTwvc2NyaXB0Pgo8
289
+ IS0tIGdvb2dsZV9hZF9zZWN0aW9uX3N0YXJ0KHdlaWdodD1pZ25vcmUpIC0t
290
+ Pgo8ZGl2IGlkPSJhZG1pbmJhciI+Cgk8Zm9ybSBuYW1lPSJsb2dpbmZvcm0i
291
+ IGNsYXNzPSJsb2dpbi1mb3JtIiBpZD0iYWRtaW5iYXJsb2dpbiIgYWN0aW9u
292
+ PSJodHRwczovL2VuLndvcmRwcmVzcy5jb20vd3AtbG9naW4ucGhwIiBtZXRo
293
+ b2Q9InBvc3QiPgoJPGxhYmVsIGNsYXNzPSJsb2dpbiB1c2VybG9naW4tbGFi
294
+ ZWwiIGlkPSJ1c2VybG9naW5fbGFiZWwiPjxpbnB1dCBjbGFzcz0iYWRtaW5i
295
+ YXItaW5wdXQgdXNlci1sb2dpbi1pbnB1dCIgdHlwZT0idGV4dCIgbmFtZT0i
296
+ bG9nIiBpZD0idXNlcl9sb2dpbiIgdmFsdWU9IiIgdGFiaW5kZXg9IjEiIHBs
297
+ YWNlaG9sZGVyPSJFbWFpbCBvciBVc2VybmFtZSIvPjwvbGFiZWw+Cgk8bGFi
298
+ ZWwgY2xhc3M9ImxvZ2luIHBhc3N3b3JkLWxhYmVsIiBpZD0icGFzc3dvcmRf
299
+ bGFiZWwiPjxpbnB1dCBjbGFzcz0iYWRtaW5iYXItaW5wdXQgdXNlci1wYXNz
300
+ LWlucHV0IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icHdkIiBpZD0idXNlcl9w
301
+ YXNzIiB2YWx1ZT0iIiB0YWJpbmRleD0iMiIgcGxhY2Vob2xkZXI9IlBhc3N3
302
+ b3JkIiAvPjwvbGFiZWw+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0idGVz
303
+ dGNvb2tpZSIgY2xhc3M9InRlc3Rjb29raWUiIG5hbWU9InRlc3Rjb29raWUi
304
+ IHZhbHVlPSIwIiAvPgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJyZWRp
305
+ cmVjdF90byIgbmFtZT0icmVkaXJlY3RfdG8iIHZhbHVlPSJodHRwOi8vd29y
306
+ ZHByZXNzLmNvbS8iIC8+Cgk8YnV0dG9uIGNsYXNzPSJhZG1pbmJhci1idXR0
307
+ b24iIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiBpZD0ibG9naW4tZm9y
308
+ bSIgdGFiaW5kZXg9IjQiPjxzcGFuPkxvZyBJbjwvc3Bhbj48L2J1dHRvbj4K
309
+ CTxzcGFuIGNsYXNzPSJhZG1pbmJhci1sb2dpbm1ldGEiPjxpbnB1dCBuYW1l
310
+ PSJyZW1lbWJlcm1lIiB0eXBlPSJjaGVja2JveCIgaWQ9InJlbWVtYmVybWUi
311
+ IHZhbHVlPSJmb3JldmVyIiB0YWJpbmRleD0iMyIgY2hlY2tlZD0iY2hlY2tl
312
+ ZCIgLz4KCTxsYWJlbCBmb3I9InJlbWVtYmVybWUiPlJlbWVtYmVyIG1lPC9s
313
+ YWJlbD4KCTxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL3dwLWxvZ2lu
314
+ LnBocD9hY3Rpb249bG9zdHBhc3N3b3JkIj5Gb3Jnb3QgcGFzc3dvcmQ/PC9h
315
+ PgoJPGEgY2xhc3M9ImFkbWluYmFyc2lnbnVwIiBocmVmPSJodHRwOi8vd29y
316
+ ZHByZXNzLmNvbS9zaWdudXAvP3JlZj13cGNvbWFkbWluYmFyIj5TaWduIFVw
317
+ PC9hPgoJPC9zcGFuPgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
318
+ PgoJPCEtLQoJZG9jdW1lbnQuY29va2llPSdURVNUQ09PS0lFPWhvbWU7IGV4
319
+ cGlyZXM9RnJpLCAwOSBNYXIgMjAxMiAyMDoxMzoxNCArMDAwMDsgcGF0aD0v
320
+ JztqUXVlcnkoJy50ZXN0Y29va2llJykudmFsKCcxJyk7CgkvLyAtLT4KCTwv
321
+ c2NyaXB0PgoJPC9mb3JtPgoJPHNwYW4gaWQ9J2FkbWluYmFyc2VhcmNoLXdy
322
+ YXAnPgoJCTxmb3JtIGlkPSJhZG1pbmJhcnNlYXJjaCIgbmFtZT0iYWRtaW5i
323
+ YXJzZWFyY2giIGFjdGlvbj0iaHR0cDovL2VuLnNlYXJjaC53b3JkcHJlc3Mu
324
+ Y29tLyIgbWV0aG9kPSJnZXQiPgoJCQk8aW5wdXQgY2xhc3M9J2FkbWluYmFy
325
+ LXNlYXJjaC1pbnB1dCcgbmFtZT0ncScgaWQ9J3EnIHR5cGU9J3RleHQnIG1h
326
+ eGxlbmd0aD0iMTUwIiBwbGFjZWhvbGRlcj0iU2VhcmNoIFdvcmRQcmVzcy5j
327
+ b20gQmxvZ3MiIC8+CgkJPC9mb3JtPgoJPC9zcGFuPgo8L2Rpdj4KPCEtLSBn
328
+ b29nbGVfYWRfc2VjdGlvbl9lbmQgLS0+CjxkaXYgaWQ9IndyYXBwZXIiIGNs
329
+ YXNzPSJlbi13cmFwcGVyIj4KCgoJPGRpdiBpZD0ibGFuZy1ndWVzcy13cmFw
330
+ Ij48L2Rpdj4KCjxkaXYgb25jbGljaz0iaGlkZUxvZ29zKCk7IiBjbGFzcz0i
331
+ Y29yZV9zaGFkZSIgaWQ9ImNvcmVfc2hhZGUiIHN0eWxlPSJkaXNwbGF5OiBu
332
+ b25lOyI+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2Vib2R5Ij4KCTxkaXYgaWQ9
333
+ ImhlYWRlciI+CiAgICAJPGRpdiBjbGFzcz0iY29yZV9sb2dvIj48aDEgY2xh
334
+ c3M9ImxvZ28iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJs
335
+ b2NhdGlvbi5ocmVmPSdodHRwOi8vd29yZHByZXNzLmNvbS9mcmVzaCciPldv
336
+ cmRQcmVzcy5jb208L2gxPjwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImRp
337
+ c3BsYXk6IG5vbmU7IiBpZD0ibG9nby1wb3B1cCI+CiAgICAgICAgICAgIDxh
338
+ IGNsYXNzPSJsb2dvLXBvcHVwLWNsb3NlIiBvbmNsaWNrPSJoaWRlTG9nb3Mo
339
+ KTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0iIyI+JnRpbWVzOzwvYT4KICAgICAg
340
+ ICAgICAgPGRpdiBjbGFzcz0ibG9nby1wb3B1cC1oZWFkZXIiPgoJCQk8aDM+
341
+ TG9va2luZyBmb3IgdGhlIFdvcmRQcmVzcy5jb20gbG9nbz88L2gzPgoJCQk8
342
+ cCBjbGFzcz0iZGVzY3JpcHRpb24iPkhlcmUgYXJlIGEgZmV3IHRvIGNob29z
343
+ ZSBmcm9tOjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDx1
344
+ bCBjbGFzcz0ibG9nby1wb3B1cC1jb2x1bW4iPgogICAgICAgICAgICAgICAg
345
+ PGxpPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNhbXBsZSB2
346
+ ZXJ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8dWw+CgkJCQkJCTxs
347
+ aT48YSBocmVmPSJodHRwOi8vcy53cC5jb20vd3AtY29udGVudC90aGVtZXMv
348
+ aDQvaS9sb2dvLXYtY215ay5wZGYiIHRhcmdldD0iX2JsYW5rIj5WZXJ0aWNh
349
+ bCBMb2dvIFBERjwvYT4gPHNwYW4+KHByaW50KTwvc3Bhbj48L2xpPgoJCQkJ
350
+ CQk8bGk+PGEgaHJlZj0iaHR0cDovL3Mud3AuY29tL3dwLWNvbnRlbnQvdGhl
351
+ bWVzL2g0L2kvbG9nby12LXJnYi5wbmc/bT0xMzA4OTM3ODMwZyIgdGFyZ2V0
352
+ PSJfYmxhbmsiPlZlcnRpY2FsIExvZ28gUE5HPC9hPiA8c3Bhbj4od2ViKTwv
353
+ c3Bhbj48L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAg
354
+ ICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8
355
+ dWwgY2xhc3M9ImxvZ28tcG9wdXAtY29sdW1uIj4KICAgICAgICAgICAgICAg
356
+ IDxsaT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzYW1wbGUg
357
+ aG96Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8dWw+CgkJCQkJPGxp
358
+ PjxhIGhyZWY9Imh0dHA6Ly9zLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9o
359
+ NC9pL2xvZ28taC1jbXlrLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPkhvcml6b250
360
+ YWwgTG9nbyBQREY8L2E+IDxzcGFuPihwcmludCk8L3NwYW4+PC9saT4KCQkJ
361
+ CQk8bGk+PGEgaHJlZj0iaHR0cDovL3Mud3AuY29tL3dwLWNvbnRlbnQvdGhl
362
+ bWVzL2g0L2kvbG9nby1oLXJnYi5wbmc/bT0xMzA4OTM3ODMwZyIgdGFyZ2V0
363
+ PSJfYmxhbmsiPkhvcml6b250YWwgTG9nbyBQTkc8L2E+IDxzcGFuPih3ZWIp
364
+ PC9zcGFuPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAg
365
+ ICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9k
366
+ aXY+PCEtLSBFTkQgbG9nby1wb3B1cCAtLT4KICAgIDxzY3JpcHQ+CiAgICAJ
367
+ ZnVuY3Rpb24gaGlkZUxvZ29zICgpIHsKCQkJalF1ZXJ5KCIjY29yZV9zaGFk
368
+ ZSIpLmhpZGUoKTsKCQkJalF1ZXJ5KCIjbG9nby1wb3B1cCIpLmhpZGUoKTsK
369
+ CQl9CgkJZnVuY3Rpb24gc2hvd0xvZ29zICgpIHsKCQkJdmFyIHRvdGFsSGVp
370
+ Z2h0ID0galF1ZXJ5KGRvY3VtZW50KS5oZWlnaHQoKTsKCQkJalF1ZXJ5KCIj
371
+ bG9nby1wb3B1cCIpLnNsaWRlRG93bigiZmFzdCIpOwoJCQlqUXVlcnkoIiNj
372
+ b3JlX3NoYWRlIikuY3NzKCJoZWlnaHQiLCB0b3RhbEhlaWdodCArICJweCIp
373
+ LnNob3coKTsKCQl9CgkJLy8gV2hlbiB0aGUgRE9NIGlzIHJlYWR5CgkJalF1
374
+ ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CgkJCS8vIEhhY2sg
375
+ dG8gZ2V0IElFIHRvIGJlaGF2ZQoJCQlqUXVlcnkoIi5jb3JlX2xvZ28iKS5i
376
+ aW5kKCdjb250ZXh0bWVudScsZnVuY3Rpb24oZSl7CgkJCQllLnJldHVyblZh
377
+ bHVlPSBmYWxzZTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSkuYmluZCgnbW91
378
+ c2Vkb3duIGNvbnRleHRtZW51JyxmdW5jdGlvbihlKXsgLy8gQ2FwdHVyZSBy
379
+ aWdodCBjbGljawoJCQkJLy8gQWRkIG5ldyByaWdodCBjbGljayBmdW5jdGlv
380
+ bmFsaXR5CgkJCQlpZihlLmJ1dHRvbiA9PT0gMil7IC8vIDIgPSBSaWdodCBj
381
+ bGljawoJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoJCQkJCQlzaG93
382
+ TG9nb3MoKTsKCQkJCQl9LCAzMDApOwoJCQkJCS8vIERpc2FibGUgcmVndWxh
383
+ ciBjb250ZXh0IG1lbnUgb24gbG9nbwoJCQkJCWUucHJldmVudERlZmF1bHQo
384
+ KTsKCQkJCX0KCQkJfSk7CgkJfSk7CiAgICA8L3NjcmlwdD4KCQkJPGZvcm0g
385
+ aWQ9Imxhbmd1YWdlIiBuYW1lPSJsYW5ndWFnZSIgYWN0aW9uPSIiPgoJCTxs
386
+ YWJlbCBmb3I9Imxhbmd1YWdlLXNlbGVjdCI+TGFuZ3VhZ2U6PC9sYWJlbD4K
387
+ CQk8c2VsZWN0IGlkPSJsYW5ndWFnZS1zZWxlY3QiIG5hbWU9Imxhbmd1YWdl
388
+ c2VsIiBvbmNoYW5nZT0iZ290b0Z1bmN0aW9uKCk7Ij4KCQkJPG9wdGlvbiB2
389
+ YWx1ZT0iaHR0cDovL3dvcmRwcmVzcy5jb20vIj5FbmdsaXNoPC9vcHRpb24+
390
+ CgkJCTxvcHRpb24gdmFsdWU9J2h0dHA6Ly9lcy53b3JkcHJlc3MuY29tLycg
391
+ PkVzcGEmIzI0MTtvbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9k
392
+ ZS53b3JkcHJlc3MuY29tLycgPkRldXRzY2g8L29wdGlvbj48b3B0aW9uIHZh
393
+ bHVlPSdodHRwOi8vcHQtYnIud29yZHByZXNzLmNvbS8nID5Qb3J0dWd1JiMy
394
+ MzQ7cyBkbyBCcmFzaWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdodHRwOi8v
395
+ aWQud29yZHByZXNzLmNvbS8nID5CYWhhc2EgSW5kb25lc2lhPC9vcHRpb24+
396
+ PG9wdGlvbiB2YWx1ZT0naHR0cDovL2ZyLndvcmRwcmVzcy5jb20vJyA+RnJh
397
+ biYjMjMxO2Fpczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9pdC53
398
+ b3JkcHJlc3MuY29tLycgPkl0YWxpYW5vPC9vcHRpb24+PG9wdGlvbiB2YWx1
399
+ ZT0naHR0cDovL3RyLndvcmRwcmVzcy5jb20vJyA+VCYjMjUyO3JrJiMyMzE7
400
+ ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9wdC53b3JkcHJlc3Mu
401
+ Y29tLycgPlBvcnR1Z3UmIzIzNDtzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0n
402
+ aHR0cDovL25sLndvcmRwcmVzcy5jb20vJyA+TmVkZXJsYW5kczwvb3B0aW9u
403
+ PgkJCTxvcHRpb24gdmFsdWU9Ii9sYW5ndWFnZXMvIj5Nb3JlIExhbmd1YWdl
404
+ czwvb3B0aW9uPgoJCTwvc2VsZWN0PgoJPC9mb3JtPgoJPC9kaXY+CgkKCQkJ
405
+ CQk8ZGl2IGNsYXNzPSJzaWdudXBzaWRlYmFyIj4KCQkJPGgyPkEgYmV0dGVy
406
+ IHdheSB0byZuYnNwO2Jsb2cuPC9oMj4KCQkJPGEgY2xhc3M9ImJpZ2Fzc2J1
407
+ dHRvbiIgaHJlZj0iL3NpZ251cC8/cmVmPWJpZ2Fzc29yYW5nZW9ubGVmdCI+
408
+ PHNwYW4+R2V0IHN0YXJ0ZWQgaGVyZTwvc3Bhbj48L2E+CgkJCTxwIGNsYXNz
409
+ PSJjYWxsIj4KCQkJCTxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL2Zl
410
+ YXR1cmVzIj5MZWFybiBtb3JlPC9hPiBvciA8YSBjbGFzcz0ic2lnbnVwdHh0
411
+ IiBocmVmPSIvc2lnbnVwLz9yZWY9Ym90dG9tdGV4dCI+c2lnbiB1cCBub3cu
412
+ PC9hPjwvcD4KCQk8L2Rpdj4KCQkJCgoJPGRpdiBpZD0iaG9tZS10YWJzIj4K
413
+ CgkJCgkJCQkJPGRpdiBpZD0iZWRpdG9ycGlja3MiIGNsYXNzPSJob21lZGl2
414
+ IGN1cnJlbnQgbG9hZGVkIj4KCQkJCQk8ZGl2IGlkPSJmcC0xIiBjbGFzcz0i
415
+ ZnAtcGFnZSI+Cgk8ZGl2IGNsYXNzPSJlZGl0b3Jyb3cgZmlyc3QiPgoJCTxk
416
+ aXYgY2xhc3M9InRpdGxlIj48c3BhbiBjbGFzcz0ic3RvcnkiPjxzcGFuIGNs
417
+ YXNzPSJmcmVzaGx5Ij5GcmVzaGx5IFByZXNzZWQ6PC9zcGFuPgoJCTxzcGFu
418
+ IGNsYXNzPSJ0aGViZXN0b2YiPlRoZSBiZXN0IG9mIDxzdHJvbmc+NDA5LDg1
419
+ NTwvc3Ryb25nPiBibG9nZ2VycywgPHN0cm9uZz45MzEsMDk5PC9zdHJvbmc+
420
+ IG5ldyBwb3N0cywgPHN0cm9uZz4xLDEwNiwyOTA8L3N0cm9uZz4gY29tbWVu
421
+ dHMsIDxzcGFuIGNsYXNzPSJhbXAiPiZhbXA7PC9zcGFuPiA8c3Ryb25nPjE3
422
+ OCw3NDgsNzMwPC9zdHJvbmc+IHdvcmRzIHBvc3RlZCB0b2RheSBvbiBXb3Jk
423
+ UHJlc3MuY29tLjwvc3Bhbj48L3NwYW4+PC9kaXY+CgkJPGRpdiBjbGFzcz0i
424
+ cGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0
425
+ cDovL25ha2VkZW52ZWxvcGUuY29tLzIwMTIvMDIvMjcvZGF0ZS1uaWdodC13
426
+ aXRoLW15c2VsZi10aGUtcHJvcy1hbmQtY29ucy1vZi1nb2luZy10by10aGUt
427
+ bW92aWVzLWFsb25lLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0icGlj
428
+ dHVyZSIgaWQ9InBpY3R1cmVfMjk5NzY0MzZfMTYzIiBzdHlsZT0iaGVpZ2h0
429
+ OiA4MnB4OyB3aWR0aDogMjIycHg7IG92ZXJmbG93OiBoaWRkZW47IG1hcmdp
430
+ bi1ib3R0b206IDVweDsgZGlzcGxheTogYmxvY2s7IGJhY2tncm91bmQtaW1h
431
+ Z2U6IHVybCgnaHR0cDovL3MyLndwLmNvbS9tc2hvdHMvdjEvaHR0cCUzQSUy
432
+ RiUyRm5ha2VkZW52ZWxvcGUuY29tJTJGMjAxMiUyRjAyJTJGMjclMkZkYXRl
433
+ LW5pZ2h0LXdpdGgtbXlzZWxmLXRoZS1wcm9zLWFuZC1jb25zLW9mLWdvaW5n
434
+ LXRvLXRoZS1tb3ZpZXMtYWxvbmUlMkY/dz0yMjInKTsgYmFja2dyb3VuZC1y
435
+ ZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkw
436
+ cHg7Ij48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3R0aXRsZSI+RGF0ZSBOaWdo
437
+ dCAoV2l0aCBNeXNlbGYpOiBUaGUgUHJvcyBhbmQgQ29ucyBvZiBHb2luZyB0
438
+ byB0aGUgTW92aWVzIEFsb25lIDwvc3Bhbj48c21hbGw+VGhlIE5ha2VkIEVu
439
+ dmVsb3BlPC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVz
440
+ cy5jb20vdGFnL21vdmllcy8iIGNsYXNzPSJ0YWdhemluZSI+UG9zdHMgYWJv
441
+ dXQgTW92aWVzIOKGkjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJwaWNrIj48ZGl2
442
+ IGNsYXNzPSJsZWZ0bnVtIj48L2Rpdj48YSBocmVmPSJodHRwOi8vbWVldHRo
443
+ ZWJ1dHRyYW1zLndvcmRwcmVzcy5jb20vMjAxMi8wMi8yNy9jb25mZXNzaW9u
444
+ cy1mcm9tLWEtYmFyYmVyLWNoYWlyLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBj
445
+ bGFzcz0icGljdHVyZSIgaWQ9InBpY3R1cmVfMTM2NTEyMDlfMjA2OSIgc3R5
446
+ bGU9ImhlaWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzogaGlk
447
+ ZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBiYWNr
448
+ Z3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6Ly9zMC53cC5jb20vaW1ncHJlc3M/
449
+ cmVzaXplPTIyMiw4MiYjMDM4O3VybD1odHRwJTNBJTJGJTJGbWVldHRoZWJ1
450
+ dHRyYW1zLmZpbGVzLndvcmRwcmVzcy5jb20lMkYyMDEyJTJGMDElMkZtdGJi
451
+ YW5uZXJ3aGl0ZTEuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBl
452
+ YXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyI+PC9zcGFuPjxzcGFu
453
+ IGNsYXNzPSJwb3N0dGl0bGUiPkNvbmZlc3Npb25zIEZyb20gQSBCYXJiZXIg
454
+ Q2hhaXIgPC9zcGFuPjxzbWFsbD5NZWV0IHRoZSBCdXR0cmFtczwvc21hbGw+
455
+ PC9hPjxhIGhyZWY9Imh0dHA6Ly9lbi53b3JkcHJlc3MuY29tL3RhZy9odW1v
456
+ ci8iIGNsYXNzPSJ0YWdhemluZSI+UG9zdHMgYWJvdXQgSHVtb3Ig4oaSPC9h
457
+ PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImVkaXRvcnJvdyI+PGRpdiBjbGFz
458
+ cz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0i
459
+ aHR0cDovL3Bob3RvYm90b3MuY29tLzIwMTIvMDIvMjgvZ3JlYXQtZ3JheS1v
460
+ d2wtZHVucm9iaW4tb250YXJpby1jYW5hZGEtamltLWN1bW1pbmctZmVhdHVy
461
+ ZWQtcGhvdG9ncmFwaGVyLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0i
462
+ cGljdHVyZSIgaWQ9InBpY3R1cmVfMjkwMjAzNDFfMTIyNSIgc3R5bGU9Imhl
463
+ aWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBt
464
+ YXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5k
465
+ LWltYWdlOiB1cmwoJ2h0dHA6Ly9zMS53cC5jb20vaW1ncHJlc3M/dz0yMjIm
466
+ IzAzODt1cmw9aHR0cCUzQSUyRiUyRnBob3RvYm90b3MuZmlsZXMud29yZHBy
467
+ ZXNzLmNvbSUyRjIwMTIlMkYwMiUyRmdyZWF0LWdyYXktb3dsLmpwZycpOyBi
468
+ YWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0
469
+ aW9uOiAwIC0yMHB4OyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0dGl0bGUi
470
+ PkdyZWF0IEdyYXkgT3dsIOKAkyBEdW5yb2JpbiwgT250YXJpbyA8L3NwYW4+
471
+ PHNtYWxsPlBob3RvQm90b3MuY29tPC9zbWFsbD48L2E+PC9kaXY+PGRpdiBj
472
+ bGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJl
473
+ Zj0iaHR0cDovL2Jsb2ctYWF1dy5vcmcvMjAxMi8wMi8yOC9vbi1zY3JlZW4t
474
+ d29tZW4taW4tc3RlbS8iIGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9InBp
475
+ Y3R1cmUiIGlkPSJwaWN0dXJlXzIxMjIyNTlfMTA2NTEiIHN0eWxlPSJoZWln
476
+ aHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsgbWFy
477
+ Z2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3VuZC1p
478
+ bWFnZTogdXJsKCdodHRwOi8vczAud3AuY29tL2ltZ3ByZXNzP3Jlc2l6ZT0y
479
+ MjIsODImIzAzODt1cmw9aHR0cCUzQSUyRiUyRmFhdXduYXRpb25hbC5maWxl
480
+ cy53b3JkcHJlc3MuY29tJTJGMjAwOCUyRjA5JTJGYmxvZ19iYW5uZXIuanBn
481
+ Jyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQt
482
+ cG9zaXRpb246IDAgMHB4OyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0dGl0
483
+ bGUiPk91ciBGYXZvcml0ZSBPbi1zY3JlZW4gV29tZW4gaW4gU1RFTSA8L3Nw
484
+ YW4+PHNtYWxsPkFBVVcgRGlhbG9nPC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0
485
+ cDovL2VuLndvcmRwcmVzcy5jb20vdGFnL2VkdWNhdGlvbi8iIGNsYXNzPSJ0
486
+ YWdhemluZSI+UG9zdHMgYWJvdXQgRWR1Y2F0aW9uIOKGkjwvYT48L2Rpdj48
487
+ ZGl2IGNsYXNzPSJwaWNrIj48ZGl2IGNsYXNzPSJsZWZ0bnVtIj48L2Rpdj48
488
+ YSBocmVmPSJodHRwOi8vYWR2ZW50dXJlcGF0Y2hlcy53b3JkcHJlc3MuY29t
489
+ LzIwMTIvMDIvMjgvbWFjYXUtdGhlLXZlZ2FzLW9mLWFzaWEtYWxtb3N0LyIg
490
+ Y2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0icGljdHVyZSIgaWQ9InBpY3R1
491
+ cmVfMTIxNTQ3MzNfMTU1NiIgc3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6
492
+ IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7
493
+ IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6
494
+ Ly9zMi53cC5jb20vaW1ncHJlc3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUy
495
+ RiUyRmk2ODgucGhvdG9idWNrZXQuY29tJTJGYWxidW1zJTJGdnYyNDUlMkZr
496
+ c2VhcmwlMkZDaGluYSUyRk1hY2F1JTJGTWFjYXUzMUphbjIwMTIyMi5qcGcn
497
+ KTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1w
498
+ b3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdHRp
499
+ dGxlIj5NYWNhdSDigJMgdGhlIFZlZ2FzIG9mIEFzaWEgKEFsbW9zdCkgPC9z
500
+ cGFuPjxzbWFsbD48L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29y
501
+ ZHByZXNzLmNvbS90YWcvcGhvdG9ncmFwaHkvIiBjbGFzcz0idGFnYXppbmUi
502
+ PlBvc3RzIGFib3V0IFBob3RvZ3JhcGh5IOKGkjwvYT48L2Rpdj48L2Rpdj48
503
+ ZGl2IGNsYXNzPSJlZGl0b3Jyb3ciPjxkaXYgY2xhc3M9InBpY2siPjxkaXYg
504
+ Y2xhc3M9ImxlZnRudW0iPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9hZXN0aGV0
505
+ aWNwZXJzcGVjdGl2ZS53b3JkcHJlc3MuY29tLzIwMTIvMDIvMDQvc3VycmVh
506
+ bGlzdC1jb2xsYWdlLWJ5LWp1bGllbi1wYWNhdWQvIiBjbGFzcz0ic3Rvcnki
507
+ PjxzcGFuIGNsYXNzPSJwaWN0dXJlIiBpZD0icGljdHVyZV8yMDYxNTA3M18x
508
+ NTUiIHN0eWxlPSJoZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZs
509
+ b3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9j
510
+ azsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwOi8vczEud3AuY29tL2lt
511
+ Z3ByZXNzP3c9MjIyJiMwMzg7dXJsPWh0dHAlM0ElMkYlMkZhZXN0aGV0aWNw
512
+ ZXJzcGVjdGl2ZS5maWxlcy53b3JkcHJlc3MuY29tJTJGMjAxMiUyRjAyJTJG
513
+ b3BlbmVyMl84MDAuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBl
514
+ YXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7Ij48L3NwYW4+PHNw
515
+ YW4gY2xhc3M9InBvc3R0aXRsZSI+U3VycmVhbGlzdCBDb2xsYWdlIEJ5IEp1
516
+ bGllbiBQYWNhdWQgPC9zcGFuPjxzbWFsbD5BZXN0aGV0aWMgUGVyc3BlY3Rp
517
+ dmU8L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNv
518
+ bS90YWcvZGVzaWduLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBE
519
+ ZXNpZ24g4oaSPC9hPjwvZGl2PjxkaXYgY2xhc3M9InBpY2siPjxkaXYgY2xh
520
+ c3M9ImxlZnRudW0iPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly92aW9sZXRzYW5k
521
+ Y2FyZGFtb20uY29tLzIwMTIvMDIvMjcvd2l0aC1yb290cy1wbGFudGVkLWlu
522
+ LXBlcnNpYW4tY3Vpc2luZS8iIGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9
523
+ InBpY3R1cmUiIGlkPSJwaWN0dXJlXzI1OTIwNDA4XzE3NzkiIHN0eWxlPSJo
524
+ ZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsg
525
+ bWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3Vu
526
+ ZC1pbWFnZTogdXJsKCdodHRwOi8vczAud3AuY29tL2ltZ3ByZXNzP3c9MjIy
527
+ JiMwMzg7dXJsPWh0dHAlM0ElMkYlMkZ2aW9sZXRzYW5kY2FyZGFtb20uZmls
528
+ ZXMud29yZHByZXNzLmNvbSUyRjIwMTIlMkYwMiUyRmltZ184ODA0LmpwZycp
529
+ OyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBv
530
+ c2l0aW9uOiAwIDBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdHRpdGxl
531
+ Ij5XaXRoIFJvb3RzIFBsYW50ZWQgaW4gUGVyc2lhbiBDdWlzaW5lIDwvc3Bh
532
+ bj48c21hbGw+VmlvbGV0cyBhbmQgQ2FyZGFtb208L3NtYWxsPjwvYT48YSBo
533
+ cmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNvbS90YWcvZm9vZC8iIGNsYXNz
534
+ PSJ0YWdhemluZSI+UG9zdHMgYWJvdXQgRm9vZCDihpI8L2E+PC9kaXY+PGRp
535
+ diBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEg
536
+ aHJlZj0iaHR0cDovL3N0YXlhdGhvbWV0YXR0ZS53b3JkcHJlc3MuY29tLzIw
537
+ MTIvMDIvMjgvY2FuLXlvdS1oZWFyLW1lLyIgY2xhc3M9InN0b3J5Ij48c3Bh
538
+ biBjbGFzcz0icGljdHVyZSIgaWQ9InBpY3R1cmVfMTMxMTYyOTNfMTA4MCIg
539
+ c3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzog
540
+ aGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBi
541
+ YWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6Ly9zMC53cC5jb20vaW1ncHJl
542
+ c3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUyRiUyRnN0YXlhdGhvbWV0YXR0
543
+ ZS5maWxlcy53b3JkcHJlc3MuY29tJTJGMjAxMiUyRjAyJTJGcDIyNzA3OTAu
544
+ anBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91
545
+ bmQtcG9zaXRpb246IDAgLTIwcHg7Ij48L3NwYW4+PHNwYW4gY2xhc3M9InBv
546
+ c3R0aXRsZSI+Q2FuIFlvdSBIZWFyIE1lPyA8L3NwYW4+PHNtYWxsPlRoZSBN
547
+ dXNpbmdzIG9mIGEgSmV3aXNoIFN0YXktQXQtSG9tZSBGYXRoZXI8L3NtYWxs
548
+ PjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNvbS90YWcvcGFy
549
+ ZW50aW5nLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBQYXJlbnRp
550
+ bmcg4oaSPC9hPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImVkaXRvcnJvdyI+
551
+ PGRpdiBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+
552
+ PGEgaHJlZj0iaHR0cDovL3BhcmFzZG9zaGkuY29tLzIwMTIvMDIvMjgvYm9v
553
+ ay1yZXZpZXctbGluY2hwaW4tYnktc2V0aC1nb2Rpbi8iIGNsYXNzPSJzdG9y
554
+ eSI+PHNwYW4gY2xhc3M9InBpY3R1cmUiIGlkPSJwaWN0dXJlXzEzODU4OTM1
555
+ XzIwOTAiIHN0eWxlPSJoZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3Zl
556
+ cmZsb3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBi
557
+ bG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwOi8vczIud3AuY29t
558
+ L21zaG90cy92MS9odHRwJTNBJTJGJTJGcGFyYXNkb3NoaS5jb20lMkYyMDEy
559
+ JTJGMDIlMkYyOCUyRmJvb2stcmV2aWV3LWxpbmNocGluLWJ5LXNldGgtZ29k
560
+ aW4lMkY/dz0yMjInKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsg
561
+ YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBj
562
+ bGFzcz0icG9zdHRpdGxlIj5Cb29rIHJldmlldzogTGluY2hwaW4gYnkgU2V0
563
+ aCBHb2RpbiA8L3NwYW4+PHNtYWxsPlBhcmFzIERvc2hpJiMwMzk7cyBCbG9n
564
+ PC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20v
565
+ dGFnL2Jvb2tzLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBCb29r
566
+ cyDihpI8L2E+PC9kaXY+PGRpdiBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0i
567
+ bGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0cDovL3RyYXNoaWVhcnQud29y
568
+ ZHByZXNzLmNvbS8yMDEyLzAyLzI4L2RyZXNzZXItZHJhd2VyLWNhbnZhcy8i
569
+ IGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9InBpY3R1cmUiIGlkPSJwaWN0
570
+ dXJlXzMxNDE0MzQwXzEyMyIgc3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6
571
+ IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7
572
+ IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6
573
+ Ly9zMi53cC5jb20vaW1ncHJlc3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUy
574
+ RiUyRnRyYXNoaWVhcnQuZmlsZXMud29yZHByZXNzLmNvbSUyRjIwMTIlMkYw
575
+ MiUyRjMuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJh
576
+ Y2tncm91bmQtcG9zaXRpb246IDAgLTEwcHg7Ij48L3NwYW4+PHNwYW4gY2xh
577
+ c3M9InBvc3R0aXRsZSI+RHJlc3NlciBEcmF3ZXIgQ2FudmFzIDwvc3Bhbj48
578
+ c21hbGw+dHJhc2hpZUFSVDwvc21hbGw+PC9hPjxhIGhyZWY9Imh0dHA6Ly9l
579
+ bi53b3JkcHJlc3MuY29tL3RhZy9kaXkvIiBjbGFzcz0idGFnYXppbmUiPlBv
580
+ c3RzIGFib3V0IERpeSDihpI8L2E+PC9kaXY+PGRpdiBjbGFzcz0icGljayI+
581
+ PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0cDovL21h
582
+ cmlhbm5lbWFjZ3JlZ29yLndvcmRwcmVzcy5jb20vMjAxMi8wMi8wNi9zdWJt
583
+ ZXJnZWQvIiBjbGFzcz0ic3RvcnkiPjxzcGFuIGNsYXNzPSJwaWN0dXJlIiBp
584
+ ZD0icGljdHVyZV8zMDM2NzI3M181NjgiIHN0eWxlPSJoZWlnaHQ6IDgycHg7
585
+ IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRv
586
+ bTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJs
587
+ KCdodHRwOi8vczEud3AuY29tL2ltZ3ByZXNzP3c9MjIyJiMwMzg7dXJsPWh0
588
+ dHAlM0ElMkYlMkZtYXJpYW5uZW1hY2dyZWdvci5maWxlcy53b3JkcHJlc3Mu
589
+ Y29tJTJGMjAxMSUyRjEyJTJGMjAxMl8wMl8wMl93ZXN0bW9yZWxhbmRfMDAz
590
+ Ny5qcGcnKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dy
591
+ b3VuZC1wb3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0i
592
+ cG9zdHRpdGxlIj5TdWJtZXJnZWQgPC9zcGFuPjxzbWFsbD5NYXJpQW5uZSBN
593
+ YWNHcmVnb3I8L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHBy
594
+ ZXNzLmNvbS90YWcvbmF0dXJlLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBh
595
+ Ym91dCBOYXR1cmUg4oaSPC9hPjwvZGl2PjwvZGl2Pgo8c2NyaXB0IHR5cGU9
596
+ InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0Pgo8ZGl2IHN0eWxlPSJjbGVh
597
+ cjpib3RoO2hlaWdodDowcHg7d2lkdGg6NzE3cHgiPjwvZGl2Pgo8L2Rpdj4K
598
+ CjxkaXYgaWQ9ImZwbmF2Ij4KCTxhIGNsYXNzPSJlYXJsaWVyIiBocmVmPSI/
599
+ ZnA9MiIgPkVhcmxpZXI8L2E+Cgk8YSBjbGFzcz0ibGF0ZXIiIGhyZWY9Ij9m
600
+ cD0wIiBzdHlsZT0iZGlzcGxheTpub25lIj5MYXRlcjwvYT4KCTxpbWcgaWQ9
601
+ ImZwbG9hZGluZyIgc3JjPSJodHRwOi8vczIud3AuY29tL3dwLWNvbnRlbnQv
602
+ dGhlbWVzL2g0L2kvdy1sb2FkZXIuZ2lmP209MTMxMDY1ODgzNWciIHN0eWxl
603
+ PSJkaXNwbGF5Om5vbmUiIGFsdD0iTG9hZGluZy4uLiIgLz4KPC9kaXY+Cjxz
604
+ Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gc2V0TmF2
605
+ Q2xpY2tzKHBhZ2UsIGVhcmxpZXJfZXhpc3QpIHsKalF1ZXJ5KCdkaXYjZnBu
606
+ YXYgYS5lYXJsaWVyJykudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9u
607
+ KCl7CglqUXVlcnkoIiNmcGxvYWRpbmciKS5mYWRlSW4oKTsKCWpRdWVyeS5n
608
+ ZXQoJy8/bG9hZD1lZGl0b3JwaWNrcyZmcD0nKyhwYWdlKzEpKycmcmFuZD0n
609
+ K01hdGgucmFuZG9tKCksCgkJZnVuY3Rpb24oZGF0YSkgewoJCQlqUXVlcnko
610
+ IiNmcGxvYWRpbmciKS5mYWRlT3V0KCk7CgkJCWpRdWVyeSgiI2ZwbmF2IGEi
611
+ KS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZmFs
612
+ c2U7fSk7CgkJCXZhciBsZWZ0PScjZnAtJytwYWdlOwoJCQl2YXIgcmlnaHQ9
613
+ JyNmcC0nKyhwYWdlKzEpOwoJCQlqUXVlcnkoZGF0YSkuaGlkZSgpLmluc2Vy
614
+ dEFmdGVyKGxlZnQpOwoJCQl2YXIgbGhlaWdodD1qUXVlcnkobGVmdCkub3V0
615
+ ZXJIZWlnaHQodHJ1ZSk7CgkJCXZhciByaGVpZ2h0PWpRdWVyeShyaWdodCku
616
+ b3V0ZXJIZWlnaHQodHJ1ZSk7CgkJCXZhciBlaGVpZ2h0MT1qUXVlcnkoJyNl
617
+ ZGl0b3JwaWNrcycpLmhlaWdodCgpOwoJCQl2YXIgZWhlaWdodDI9ZWhlaWdo
618
+ dDEgLSBsaGVpZ2h0ICsgcmhlaWdodDsKCQkJalF1ZXJ5KCIjZWRpdG9ycGlj
619
+ a3MiKQoJCQkJLmNzcyh7J2hlaWdodCc6ZWhlaWdodDErJ3B4J30pOwoJCQlq
620
+ UXVlcnkoIiNmcG5hdiIpCgkJCQkuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0
621
+ ZSd9KTsKCQkJalF1ZXJ5KCIjZWRpdG9ycGlja3MiKQoJCQkJLmFuaW1hdGUo
622
+ eydoZWlnaHQnOmVoZWlnaHQyfSk7CgkJCWpRdWVyeShsZWZ0KQoJCQkJLmNz
623
+ cyh7J3Bvc2l0aW9uJzonYWJzb2x1dGUnfSkKCQkJCS5hbmltYXRlKHsnbGVm
624
+ dCc6Jy03MTdweCcsJ29wYWNpdHknOidoaWRlJ30sCgkJCQkJZnVuY3Rpb24o
625
+ KXtqUXVlcnkobGVmdCkucmVtb3ZlKCk7fSk7CgkJCWpRdWVyeShyaWdodCkK
626
+ CQkJCS5jc3Moeydwb3NpdGlvbic6J2Fic29sdXRlJywndG9wJzonMHB4Jywn
627
+ bGVmdCc6JzcxN3B4J30pCgkJCQkuc2hvdygpCgkJCQkuYW5pbWF0ZSh7J2xl
628
+ ZnQnOicwcHgnfSk7CgkJCWlmICggcGFnZSA9PSAxICkKCQkJCWpRdWVyeSgi
629
+ I2ZwbmF2IC5sYXRlciIpLmZhZGVJbigpOwoJCX0pOwoJcmV0dXJuIGZhbHNl
630
+ Owp9KS5hdHRyKHsnaHJlZic6JyNlYXJsaWVyJ30pOwpqUXVlcnkoJ2RpdiNm
631
+ cG5hdiBhLmxhdGVyJykudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9u
632
+ KCl7CglqUXVlcnkoIiNmcGxvYWRpbmciKS5mYWRlSW4oKTsKCWpRdWVyeS5n
633
+ ZXQoJy8/bG9hZD1lZGl0b3JwaWNrcyZmcD0nKyhwYWdlLTEpKycmcmFuZD0n
634
+ K01hdGgucmFuZG9tKCksCgkJZnVuY3Rpb24oZGF0YSkgewoJCQlqUXVlcnko
635
+ IiNmcGxvYWRpbmciKS5mYWRlT3V0KCk7CgkJCWpRdWVyeSgiI2ZwbmF2IGEi
636
+ KS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZmFs
637
+ c2U7fSk7CgkJCXZhciBsZWZ0PScjZnAtJysocGFnZS0xKTsKCQkJdmFyIHJp
638
+ Z2h0PScjZnAtJytwYWdlOwoJCQlqUXVlcnkoZGF0YSkuaGlkZSgpLmluc2Vy
639
+ dEJlZm9yZShyaWdodCk7CgkJCXZhciBsaGVpZ2h0PWpRdWVyeShsZWZ0KS5v
640
+ dXRlckhlaWdodCh0cnVlKTsKCQkJdmFyIHJoZWlnaHQ9alF1ZXJ5KHJpZ2h0
641
+ KS5vdXRlckhlaWdodCh0cnVlKTsKCQkJdmFyIGVoZWlnaHQxPWpRdWVyeSgn
642
+ I2VkaXRvcnBpY2tzJykuaGVpZ2h0KCk7CgkJCXZhciBlaGVpZ2h0Mj1laGVp
643
+ Z2h0MSAtIHJoZWlnaHQgKyBsaGVpZ2h0OwoJCQlqUXVlcnkoIiNlZGl0b3Jw
644
+ aWNrcyIpCgkJCQkuY3NzKHsnaGVpZ2h0JzplaGVpZ2h0MSsncHgnfSk7CgkJ
645
+ CWpRdWVyeSgiI2ZwbmF2IikKCQkJCS5jc3Moeydwb3NpdGlvbic6J2Fic29s
646
+ dXRlJ30pOwoJCQlqUXVlcnkoIiNlZGl0b3JwaWNrcyIpCgkJCQkuYW5pbWF0
647
+ ZSh7J2hlaWdodCc6ZWhlaWdodDJ9KTsKCQkJalF1ZXJ5KHJpZ2h0KQoJCQkJ
648
+ LmNzcyh7J3Bvc2l0aW9uJzonYWJzb2x1dGUnfSkKCQkJCS5hbmltYXRlKHsn
649
+ bGVmdCc6JzcxN3B4Jywnb3BhY2l0eSc6J2hpZGUnfSwKCQkJCQlmdW5jdGlv
650
+ bigpe2pRdWVyeShyaWdodCkuZW1wdHkoKS5yZW1vdmUoKTt9KTsKCQkJalF1
651
+ ZXJ5KGxlZnQpCgkJCQkuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0ZScsJ3Rv
652
+ cCc6JzBweCcsJ2xlZnQnOictNzE3cHgnfSkKCQkJCS5zaG93KCkKCQkJCS5h
653
+ bmltYXRlKHsnbGVmdCc6JzBweCd9KTsKCQkJaWYgKCBwYWdlIC0gMSA9PSAx
654
+ ICkKCQkJCWpRdWVyeSgiI2ZwbmF2IC5sYXRlciIpLnVuYmluZCgnY2xpY2sn
655
+ KS5mYWRlT3V0KCk7CgkJCWlmICggJ25vbmUnID09IGpRdWVyeSgiI2ZwbmF2
656
+ IC5lYXJsaWVyIikuY3NzKCdkaXNwbGF5JykgKQoJCQkJalF1ZXJ5KCIjZnBu
657
+ YXYgLmVhcmxpZXIiKS5mYWRlSW4oKTsKCQl9KTsKCXJldHVybiBmYWxzZTsK
658
+ fSkuYXR0cih7J2hyZWYnOicjbGF0ZXInfSk7CmpRdWVyeSgiI2VkaXRvcnBp
659
+ Y2tzIikuY3NzKHsnYm9yZGVyJzonbm9uZSd9KTsgLy8gSW5leHBsaWNhYmx5
660
+ IHJlcXVpcmVkIGJ5IElFLgppZiAoIDEgIT0gZWFybGllcl9leGlzdCApCglq
661
+ UXVlcnkoIiNmcG5hdiAuZWFybGllciIpLnVuYmluZCgnY2xpY2snKS5mYWRl
662
+ T3V0KCk7Cn0Kc2V0TmF2Q2xpY2tzKDEsIDEpOwo8L3NjcmlwdD4KCTwvZGl2
663
+ PgkJCQkJCQoJCQoJPC9kaXY+IAo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0i
664
+ bmV3ZGFzaF9ub25jZSIgbmFtZT0ibmV3ZGFzaF9ub25jZSIgdmFsdWU9IjRk
665
+ OGUyN2IzZjkiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX3dwX2h0
666
+ dHBfcmVmZXJlciIgdmFsdWU9Ii8iIC8+CjwhLS0gZ29vZ2xlX2FkX3NlY3Rp
667
+ b25fc3RhcnQod2VpZ2h0PWlnbm9yZSkgLS0+CjxkaXYgaWQ9ImZvb3RlciI+
668
+ Cgk8ZGl2IGNsYXNzPSJjMSI+CgkJPGg0Pk9uIFdvcmRQcmVzcy5jb208L2g0
669
+ PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbi5zdXBwb3J0Lndv
670
+ cmRwcmVzcy5jb20vIiB0aXRsZT0iV2UmIzgyMTc7cmUgaGVyZSBmb3IgeW91
671
+ Ij5TdXBwb3J0PC9hPiAmYW1wOyA8YSBocmVmPSJodHRwOi8vZW4uZm9ydW1z
672
+ LndvcmRwcmVzcy5jb20vIiB0aXRsZT0iQ29tbXVuaWNhdGUgd2l0aCB5b3Vy
673
+ IGZlbGxvdyBXb3JkUHJlc3MuY29tIGJsb2dnZXJzIj5Gb3J1bXM8L2E+PC9s
674
+ aT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbi53b3JkcHJlc3MuY29tL2Zl
675
+ YXR1cmVzLyIgdGl0bGU9IkEgc2FtcGxpbmcgb2YgdGhlIG1hbnkgZmVhdHVy
676
+ ZXMgV29yZFByZXNzLmNvbSBvZmZlcnMiIGhyZWZsYW5nPSJlbiI+RnJlZSBG
677
+ ZWF0dXJlczwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL2VuLndv
678
+ cmRwcmVzcy5jb20vcHJvZHVjdHMvIiB0aXRsZT0iVmFsdWUtYWRkZWQgdXBn
679
+ cmFkZXMgYXZhaWxhYmxlIGEgbGEgY2FydGUiIGhyZWZsYW5nPSJlbiI+UHJl
680
+ bWl1bSBBZGQtT25zPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJodHRwOi8v
681
+ dGhlbWUud29yZHByZXNzLmNvbS8iIHRpdGxlPSJGaW5kIHRoZSBwZXJmZWN0
682
+ IHRoZW1lIj5UaGVtZSBTaG93Y2FzZTwvYT48L2xpPgoJCQk8bGk+PGEgaHJl
683
+ Zj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20vdGFncy8iIHRpdGxlPSJDdXJy
684
+ ZW50IHRvcGljcyBhbmQgdGFncyIgaHJlZmxhbmc9ImVuIj5Qb3B1bGFyIFRh
685
+ Z3M8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3Mu
686
+ Y29tL2FkdmFuY2VkLXNlcnZpY2VzIiB0aXRsZT0iQnVpbGQgYXBwcyBmb3Ig
687
+ V29yZFByZXNzLmNvbSI+QWR2YW5jZWQgU2VydmljZXM8L2E+PC9saT4KCQkJ
688
+ PGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wLndvcmRwcmVzcy5jb20vIiB0
689
+ aXRsZT0iQnVpbGQgYXBwcyBmb3IgV29yZFByZXNzLmNvbSI+RGV2ZWxvcGVy
690
+ IFJlc291cmNlczwvYT48L2xpPgoJCTwvdWw+Cgk8L2Rpdj4KCTxkaXYgY2xh
691
+ c3M9ImMyIj4KCQk8aDQ+QWxzbyBjb29sPC9oND4KCQk8dWw+CgkJCTxsaT48
692
+ YSBocmVmPSJodHRwOi8vc3VwcG9ydC53b3JkcHJlc3MuY29tL2FwcHMvIiB0
693
+ aXRsZT0iQXBwcyBmb3IgV29yZFByZXNzIj5Xb3JkUHJlc3MgQXBwczwvYT48
694
+ L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5vcmcvIiB0
695
+ aXRsZT0iU2VsZi1ob3N0ZWQsIG5vbi1wcm9maXQgdmVyc2lvbiI+V29yZFBy
696
+ ZXNzLm9yZzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3dvcmRw
697
+ cmVzcy50di8iIHRpdGxlPSJZb3VyIHZpc3VhbCBndWlkZSB0byBXb3JkUHJl
698
+ c3MiPldvcmRQcmVzcy50djwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0
699
+ cDovL3ZpcC53b3JkcHJlc3MuY29tLyIgdGl0bGU9IkZvciB0aGUgYmVzdCBz
700
+ aXRlcyBpbiB0aGUgd29ybGQiIGhyZWZsYW5nPSJlbiI+VklQIFNlcnZpY2Vz
701
+ OiBTdXBwb3J0ICZhbXA7IEhvc3Rpbmc8L2E+PC9saT4KCQkJPGxpPjxhIGhy
702
+ ZWY9Imh0dHA6Ly92aWRlb3ByZXNzLmNvbS8/cmVmPXdwY29tX2Zvb3RlciIg
703
+ dGl0bGU9IlZpZGVvUHJlc3MiPkVtYmVkIFZpZGVvcyBvbiBXb3JkUHJlc3M8
704
+ L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdXJ2ZXlkYWRkeS5j
705
+ b20/YWQ9d3AuY29tIiB0aXRsZT0iU3VydmV5ZGFkZHkgb25saW5lIHN1cnZl
706
+ eSBzb2Z0d2FyZSI+T25saW5lIFN1cnZleXMgYnkgU3VydmV5ZGFkZHk8L2E+
707
+ PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9tYS50dC8iIHRpdGxlPSJG
708
+ b3VuZGVyIG9mIEF1dG9tYXR0aWMsIGV4YW1wbGUgb2Ygd2hhdCBXb3JkUHJl
709
+ c3MgY2FuIGRvIiBocmVmbGFuZz0iZW4iPk1hdHQgTXVsbGVud2VnPC9hPjwv
710
+ bGk+CgkJPC91bD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iYzMiPgo8YSBocmVm
711
+ PSJodHRwOi8vYmxhY2tiZXJyeS53b3JkcHJlc3Mub3JnLyI+PGltZyBzcmM9
712
+ Imh0dHA6Ly9zMC53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvaS9mb290
713
+ ZXJwcm9tby9ibGFja2JlcnJ5LnBuZz9tPTEzMDYxNjAxMzhnIiBhbHQ9Ildv
714
+ cmRQcmVzcyBmb3IgQmxhY2tCZXJyeSIgd2lkdGg9IjIyNiIgaGVpZ2h0PSIx
715
+ ODEiIC8+PC9hPgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImM0Ij4KCQk8aDQ+RnJv
716
+ bSBvdXIgYmxvZyA8YSBjbGFzcz0icmVhZG1vcmUiIGhyZWY9Imh0dHA6Ly9l
717
+ bi5ibG9nLndvcmRwcmVzcy5jb20vIj5SZWFkIG1vcmUmIzgyMzA7PC9hPjwv
718
+ aDQ+CgkJCQk8dWw+CgkJCTxsaT48YSBocmVmPSJodHRwOi8vZW4uYmxvZy53
719
+ b3JkcHJlc3MuY29tLzIwMTIvMDIvMjcvd29yZHByZXNzZXItZmFjZXMtYWdv
720
+ cmFwaG9iaWEvIj5Xb3JkUHJlc3NlciBEb2N1bWVudHMgSGVyIE1pc3Npb24g
721
+ dG8gT3ZlcmNvbWUgQWdvcmFwaG9iaWE8L2E+PC9saT48bGk+PGEgaHJlZj0i
722
+ aHR0cDovL2VuLmJsb2cud29yZHByZXNzLmNvbS8yMDEyLzAyLzE0L25ldy10
723
+ aGVtZS1yZXRyby1maXR0ZWQvIj5OZXcgVGhlbWU6IFJldHJvLWZpdHRlZDwv
724
+ YT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vZW4uYmxvZy53b3JkcHJlc3Mu
725
+ Y29tLzIwMTIvMDIvMTAvY29tbWVudC1ub3RpZmljYXRpb25zLyI+Q29tbWVu
726
+ dCBOb3RpZmljYXRpb25zITwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8v
727
+ ZW4uYmxvZy53b3JkcHJlc3MuY29tLzIwMTIvMDIvMDcvbmV3LXRoZW1lcy1z
728
+ cGxlbmRpby1hbmQtc3VidXJiaWEvIj5OZXcgVGhlbWVzOiBTcGxlbmRpbyBh
729
+ bmQgU3VidXJiaWE8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2VuLmJs
730
+ b2cud29yZHByZXNzLmNvbS8yMDEyLzAyLzAzL3ZpZGVvcHJlc3MtZHVvdG9u
731
+ ZS8iPlBvc3QgVmlkZW9zIGZyb20gWW91ciBpUGhvbmUgb3IgaVBhZDwvYT48
732
+ L2xpPgkJPC91bD4KCTwvZGl2Pgo8cCBjbGFzcz0iYXV0b21hdHRpYyI+Cgk8
733
+ c3BhbiBjbGFzcz0iZm9vdGVybGlua3MiPjxhIGhyZWY9Imh0dHA6Ly9lbi53
734
+ b3JkcHJlc3MuY29tL2Fib3V0LyIgdGl0bGU9IkEgc2hvcnQgaW50cm9kdWN0
735
+ aW9uIHRvIHlvdXIgaG9zdHMiIGhyZWZsYW5nPSJlbiI+QWJvdXQgVXM8L2E+
736
+ ICYjODIyNjsgPGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20vdG9z
737
+ LyIgdGl0bGU9IlNvbWUgbGVnYWxlc2UiPlRlcm1zIG9mIFNlcnZpY2U8L2E+
738
+ ICYjODIyNjsgPGEgaHJlZj0iaHR0cDovL2F1dG9tYXR0aWMuY29tL3ByaXZh
739
+ Y3kvIiB0aXRsZT0iV2UgYXJlIHByb2ZvdW5kbHkgZGlzaW50ZXJlc3RlZCBp
740
+ biB5b3VyIHByaXZhdGUgZGV0YWlscyI+UHJpdmFjeTwvYT4gJiM4MjI2OyA8
741
+ YSBocmVmPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9Xb3JkUHJlc3Njb20i
742
+ PkZvbGxvdyB1cyBvbiBGYWNlYm9vazwvYT4gJiM4MjI2OyA8YSBocmVmPSJo
743
+ dHRwOi8vdHdpdHRlci5jb20vd29yZHByZXNzZG90Y29tIj5Ad29yZHByZXNz
744
+ ZG90Y29tIG9uIFR3aXR0ZXI8L2E+PC9saT4KPC9zcGFuPiAKCglBbiA8YSBo
745
+ cmVmPSJodHRwOi8vYXV0b21hdHRpYy5jb20vIj48aW1nIHNyYz0iaHR0cDov
746
+ L3MwLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9pL2F1dG9tYXR0aWMu
747
+ cG5nP209MTMwNjE2MDEzOGcmYW1wOzEiIGFsdD0iQXV0b21hdHRpYyIgd2lk
748
+ dGg9IjEwMiIgaGVpZ2h0PSI5IiAvPjwvYT4gVGhpbmdhbWFqaWc8L3A+Cjwv
749
+ ZGl2Pgo8L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8
750
+ IS0tCmFkZExvYWRFdmVudChmdW5jdGlvbigpe2pRdWVyeSgnI3VzZXJfbG9n
751
+ aW4nKS5mb2N1cygpO30pOwovLyAtLT4KPC9zY3JpcHQ+CjxzY3JpcHQgdHlw
752
+ ZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy8gPCFbQ0RBVEFbCmlmICh0eXBlb2Yg
753
+ amFoICE9ICdmdW5jdGlvbicpewpmdW5jdGlvbiBqYWgodXJsLHRhcmdldCkg
754
+ ewoJdmFyIHJlYyA9IG51bGw7CiAgICAvLyBuYXRpdmUgWE1MSHR0cFJlcXVl
755
+ c3Qgb2JqZWN0CiAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAg
756
+ ICAgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgcmVx
757
+ Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGphaERvbmVGYWN0KHJlcSwgdGFyZ2V0
758
+ KTsKICAgICAgICByZXEub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgICAg
759
+ ICByZXEuc2VuZChudWxsKTsKICAgIC8vIElFL1dpbmRvd3MgQWN0aXZlWCB2
760
+ ZXJzaW9uCiAgICB9IGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7
761
+ CiAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5Y
762
+ TUxIVFRQJyk7CiAgICAgICAgaWYgKHJlcSkgewogICAgICAgICAgICByZXEu
763
+ b25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7amFoRG9uZShyZXEs
764
+ IHRhcmdldCk7fTsKICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCwg
765
+ dHJ1ZSk7CiAgICAgICAgICAgIHJlcS5zZW5kKCk7CgkJfQoJfQp9Cn0KCmlm
766
+ ICh0eXBlb2YgamFoRG9uZSAhPSAnZnVuY3Rpb24nKSB7CmZ1bmN0aW9uIGph
767
+ aERvbmUociwgdGFyZ2V0KSB7CiAgICAvLyBvbmx5IGlmIHJlcSBpcyAibG9h
768
+ ZGVkIgogICAgaWYgKHIucmVhZHlTdGF0ZSA9PSA0KSB7CiAgICAgICAgLy8g
769
+ b25seSBpZiAiT0siCiAgICAgICAgaWYgKHIuc3RhdHVzID09IDIwMCkgewog
770
+ ICAgICAgICAgICByZXN1bHRzID0gci5yZXNwb25zZVRleHQ7CiAgICAgICAg
771
+ ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCkuaW5uZXJIVE1M
772
+ ID0gcmVzdWx0czsKICAgICAgICB9Cgl9Cn0KfQoKaWYgKHR5cGVvZiBqYWhE
773
+ b25lRmFjdCAhPSAnZnVuY3Rpb24nKSB7CmZ1bmN0aW9uIGphaERvbmVGYWN0
774
+ KHIsIHQpIHsKCXJldHVybiBmdW5jdGlvbigpIHtqYWhEb25lKHIsIHQpO30K
775
+ fQp9CWphaCggJy9sYW5nLWd1ZXNzLWFqYXgucGhwP3VyaT0lMkYmZm9ydW1z
776
+ PTAnLCAnbGFuZy1ndWVzcy13cmFwJyApOwovLyBdXT4JCjwvc2NyaXB0Pgo8
777
+ c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vcy5n
778
+ cmF2YXRhci5jb20vanMvZ3Byb2ZpbGVzLmpzP2FhJiMwMzg7dmVyPTMuNC1h
779
+ bHBoYS0xOTkwNCc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh
780
+ c2NyaXB0Jz4KLyogPCFbQ0RBVEFbICovCnZhciBXUEdyb0hvID0geyJteV9o
781
+ YXNoIjoiIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0
782
+ ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3MxLndwLmNvbS93cC1jb250
783
+ ZW50L211LXBsdWdpbnMvZ3JhdmF0YXItaG92ZXJjYXJkcy93cGdyb2hvLmpz
784
+ P209MTM1MjU3Njc0OGcmIzAzODt2ZXI9My40LWFscGhhLTE5OTA0Jz48L3Nj
785
+ cmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KdmFyIF9x
786
+ ZXZlbnRzID0gX3FldmVudHMgfHwgW10sIHdwY29tUXVhbnRjYXN0RGF0YSA9
787
+ IHsicWFjY3QiOiJwLTE4LW1GRWs0SjQ0OE0iLCJsYWJlbHMiOiIsbGFuZ3Vh
788
+ Z2UuZW4sdHlwZS53cGNvbSx3cC5ob21lcGFnZSx3cC5mcmVzaGx5cHJlc3Nl
789
+ ZCJ9OwpmdW5jdGlvbiB3cGNvbVF1YW50Y2FzdFBpeGVsKCBsYWJlbHMsIG9w
790
+ dGlvbnMgKSB7Cgl2YXIgaSwgZGVmYXVsdHMgPSB3cGNvbVF1YW50Y2FzdERh
791
+ dGEsIGRhdGEgPSB7IGV2ZW50OiAnYWpheCcgfTsKCglsYWJlbHMgID0gbGFi
792
+ ZWxzICB8fCAnJzsKCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKCWlmICgg
793
+ dHlwZW9mIGxhYmVscyAhPSAnc3RyaW5nJyApCgkJb3B0aW9ucyA9IGxhYmVs
794
+ czsKCglmb3IgKCBpIGluIGRlZmF1bHRzICkgewoJCWRhdGFbaV0gPSBkZWZh
795
+ dWx0c1tpXTsKCX0KCglmb3IgKCBpIGluIG9wdGlvbnMgKSB7CgkJZGF0YVtp
796
+ XSA9IG9wdGlvbnNbaV07Cgl9CgoJaWYgKCBkYXRhLmxhYmVscyApIHsKCQlk
797
+ YXRhLmxhYmVscyArPSAnLCcgKyBsYWJlbHM7Cgl9IGVsc2UgewoJCWRhdGEu
798
+ bGFiZWxzID0gbGFiZWxzOwoJfQoKCV9xZXZlbnRzLnB1c2goIGRhdGEgKTsK
799
+ fTsKKGZ1bmN0aW9uKCkge3ZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxl
800
+ bWVudCgnc2NyaXB0Jyk7ZWxlbS5zcmMgPSAoZG9jdW1lbnQubG9jYXRpb24u
801
+ cHJvdG9jb2wgPT0gImh0dHBzOiIgPyAiaHR0cHM6Ly9zZWN1cmUiIDogImh0
802
+ dHA6Ly9lZGdlIikgKyAiLnF1YW50c2VydmUuY29tL3F1YW50LmpzIjtlbGVt
803
+ LmFzeW5jID0gdHJ1ZTtlbGVtLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0Ijt2
804
+ YXIgc2NwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
805
+ cHQnKVswXTtzY3B0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sIHNj
806
+ cHQpOyAgfSkoKTsKX3FldmVudHMucHVzaCggd3Bjb21RdWFudGNhc3REYXRh
807
+ ICk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGRpdiBzdHlsZT0iZGlzcGxheTog
808
+ bm9uZTsiPjxpbWcgc3JjPSIvL3BpeGVsLnF1YW50c2VydmUuY29tL3BpeGVs
809
+ L3AtMTgtbUZFazRKNDQ4TS5naWY/bGFiZWxzPSUyQ2xhbmd1YWdlLmVuJTJD
810
+ dHlwZS53cGNvbSUyQ3dwLmhvbWVwYWdlJTJDd3AuZnJlc2hseXByZXNzZWQi
811
+ IGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIiAvPjwvZGl2Pjwvbm9zY3Jp
812
+ cHQ+Cgo8c2NyaXB0PmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24o
813
+ JCl7IEdyYXZhdGFyLnByb2ZpbGVfY2IgPSBmdW5jdGlvbiggaCwgZCApIHsg
814
+ V1BHcm9Iby5zeW5jUHJvZmlsZURhdGEoIGgsIGQgKTsJfTsgR3JhdmF0YXIu
815
+ bXlfaGFzaCA9IFdQR3JvSG8ubXlfaGFzaDsgR3JhdmF0YXIuaW5pdCggJ2Jv
816
+ ZHknLCAnI3dwLWFkbWluLWJhci1teS1hY2NvdW50JyApOyB9KTs8L3Njcmlw
817
+ dD4JPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIj4KCTwvZGl2PgoJCTxzdHls
818
+ ZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJCQoJCQkJLnJlYmxvZy1mcm9tIGltZyAg
819
+ ICAgICAgICAgICAgICAgICB7IG1hcmdpbjogMCAxMHB4IDAgMDsgdmVydGlj
820
+ YWwtYWxpZ246IG1pZGRsZTsgcGFkZGluZzogMDsgYm9yZGVyOiAwOyB9CgkJ
821
+ CQkucmVibG9nZ2VyLW5vdGUgaW1nLmF2YXRhciAgICAgICAgIHsgZmxvYXQ6
822
+ IGxlZnQ7IHBhZGRpbmc6IDA7IGJvcmRlcjogMDsgfQoJCQkJLnJlYmxvZ2dl
823
+ ci1ub3RlLWNvbnRlbnQgICAgICAgICAgICB7IG1hcmdpbjogMCAwIDIwcHgg
824
+ MzVweDsgfQoJCQkJLnJlYmxvZy1wb3N0ICAgICAgICAgICAgICAgICAgICAg
825
+ ICB7IGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2VlZTsgcGFkZGluZy1sZWZ0
826
+ OiAxNXB4OyB9CgkJCQkucmVibG9nLXBvc3QgdWwudGh1bWItbGlzdCAgICAg
827
+ ICAgIHsgZGlzcGxheTogYmxvY2s7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdp
828
+ bjogMnB4IDA7IHBhZGRpbmc6IDA7IGNsZWFyOiBib3RoOyB9CgkJCQkucmVi
829
+ bG9nLXBvc3QgdWwudGh1bWItbGlzdCBsaSAgICAgIHsgZGlzcGxheTogaW5s
830
+ aW5lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDAgMXB4OyBib3JkZXI6IDA7IH0K
831
+ CQkJCS5yZWJsb2ctcG9zdCB1bC50aHVtYi1saXN0IGxpIGEgICAgeyBtYXJn
832
+ aW46IDA7IHBhZGRpbmc6IDA7IGJvcmRlcjogMDsgfQoJCQkJLnJlYmxvZy1w
833
+ b3N0IHVsLnRodW1iLWxpc3QgbGkgaW1nICB7IG1hcmdpbjogMDsgcGFkZGlu
834
+ ZzogMDsgYm9yZGVyOiAwOyB9CgkJCQkucmVibG9nLXBvc3QgICAgICAgICAg
835
+ ICAgICAgICAgICAgIHsgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjZWVlOyBw
836
+ YWRkaW5nLWxlZnQ6IDE1cHg7IH0KCQkJCQk8L3N0eWxlPjxsaW5rIHJlbD0n
837
+ c3R5bGVzaGVldCcgaWQ9J3RhYnNfY3NzLWNzcycgIGhyZWY9J2h0dHA6Ly9z
838
+ Mi53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvdGFicy90YWIuY3NzP209
839
+ MTMzMDQzMzgzNGcmIzAzODt2ZXI9MjAxMTEyMTknIHR5cGU9J3RleHQvY3Nz
840
+ JyBtZWRpYT0nYWxsJyAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
841
+ dCI+Ci8vIDwhW0NEQVRBWwooZnVuY3Rpb24oKSB7CnRyeXsKICBpZiAoIHdp
842
+ bmRvdy5leHRlcm5hbCAmJidtc0lzU2l0ZU1vZGUnIGluIHdpbmRvdy5leHRl
843
+ cm5hbCkgewogICAgaWYgKHdpbmRvdy5leHRlcm5hbC5tc0lzU2l0ZU1vZGUo
844
+ KSkgewogICAgICB2YXIgamwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
845
+ Y3JpcHQnKTsKICAgICAgamwudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsKICAg
846
+ ICAgamwuYXN5bmM9dHJ1ZTsKICAgICAgamwuc3JjPScvd3AtY29udGVudC9w
847
+ bHVnaW5zL2llLXNpdGVtb2RlL2N1c3RvbS1qdW1wbGlzdC5waHAnOwogICAg
848
+ ICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
849
+ cHQnKVswXTsKICAgICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqbCwg
850
+ cyk7CiAgICB9CiAgfQp9Y2F0Y2goZSl7fQp9KSgpOwovLyBdXT4KPC9zY3Jp
851
+ cHQ+CQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJalF1ZXJ5
852
+ KGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oJCkgeyAKCQkJaWYgKCAkKCIj
853
+ aG9tZW5hdiIpLmxlbmd0aCApIHsKCQkJCXZhciBxcyA9IHdpbmRvdy5sb2Nh
854
+ dGlvbi5oYXNoLnNwbGl0KCAnLycgKTsKCgkJCQlpZiAoICdteS1ibG9ncycg
855
+ PT0gcXNbMV0gfHwganEucXVlcnkuZ2V0KCdteS1ibG9ncycpICkgd3Bjb21f
856
+ aG9tZWRhc2guY2xpY2tfdGFiKCAkKCAnbGkubXktYmxvZ3MnICkgKTsKCQkJ
857
+ CWVsc2UgaWYgKCAnZnJlc2gnID09IHFzWzFdIHx8IGpxLnF1ZXJ5LmdldCgn
858
+ ZnJlc2gnKSApIHdwY29tX2hvbWVkYXNoLmNsaWNrX3RhYiggJCggJ2xpLmZy
859
+ ZXNoJyApICk7CgkJCQllbHNlIGlmICggJ3RvcGljcycgPT0gcXNbMV0gfHwg
860
+ anEucXVlcnkuZ2V0KCd0b3BpY3MnKSB8fCAndGFncycgPT0gcXNbMV0gfHwg
861
+ anEucXVlcnkuZ2V0KCd0YWdzJykgKSB3cGNvbV9ob21lZGFzaC5jbGlja190
862
+ YWIoICQoICdsaS50b3BpY3MnICkgKTsKCQkJCWVsc2UgaWYgKCAncG9zdCcg
863
+ PT0gcXNbMV0gfHwganEucXVlcnkuZ2V0KCdwb3N0JykgfHwgJ3F1aWNrcHJl
864
+ c3MnID09IHFzWzFdIHx8IGpxLnF1ZXJ5LmdldCgncXVpY2twcmVzcycpICkg
865
+ d3Bjb21faG9tZWRhc2guY2xpY2tfdGFiKCAkKCAnbGkucG9zdCcgKSApOwoJ
866
+ CQkJZWxzZSBpZiAoICdyZWFkJyA9PSBxc1sxXSB8fCBqcS5xdWVyeS5nZXQo
867
+ J3JlYWQnKSB8fCAnZm9sbG93aW5nJyA9PSBxc1sxXSB8fCBqcS5xdWVyeS5n
868
+ ZXQoJ2ZvbGxvd2luZycpICkgd3Bjb21faG9tZWRhc2guY2xpY2tfdGFiKCAk
869
+ KCAnbGkucmVhZCcgKSApOwoJCQkJZWxzZSBpZiAoICdtZScgPT0gcXNbMV0g
870
+ fHwganEucXVlcnkuZ2V0KCdtZScpICkgd3Bjb21faG9tZWRhc2guY2xpY2tf
871
+ dGFiKCAkKCAnbGkubWUnICkgKTsKCgkJCQllbHNlIGlmICggdW5kZWZpbmVk
872
+ ID09IHFzWzFdICYmIG51bGwgIT0gJC5jb29raWUoJ3dwY29tX2FjdGl2ZV90
873
+ YWInKSAmJiAkKCAnbGkuJyArICQuY29va2llKCd3cGNvbV9hY3RpdmVfdGFi
874
+ JykucmVwbGFjZSggJyBjdXJyZW50JywgJycgKSApLmxlbmd0aCApIHsKCQkJ
875
+ CQl3cGNvbV9ob21lZGFzaC5jbGlja190YWIoICQoICdsaS4nICsgJC5jb29r
876
+ aWUoJ3dwY29tX2FjdGl2ZV90YWInKSApICk7CgkJCQl9CgkJCQllbHNlIHsK
877
+ CQkJCQl3cGNvbV9ob21lZGFzaC5jbGlja190YWIoICQoICdsaS5mcmVzaCcg
878
+ KSApOwoJCQkJfQoJCQl9CgkJfSk7CgkJPC9zY3JpcHQ+PHNjcmlwdCBzcmM9
879
+ Imh0dHA6Ly9zLnN0YXRzLndvcmRwcmVzcy5jb20vdy5qcz8yMSIgdHlwZT0i
880
+ dGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0
881
+ L2phdmFzY3JpcHQiPgpzdF9nbyh7J2Jsb2cnOicxJywndic6J3dwY29tJywn
882
+ dXNlcl9pZCc6JzAnLCdzdWJkJzond29yZHByZXNzLmNvbSd9KTsKZXhfZ28o
883
+ eydjcnlwdCc6J1VFNVZSbmhVWjJWR1FTWXZUVmdsU25CT2FWUjFKazliWW41
884
+ dE5tSitUWG9sY0dKa1Exb3VMM1pkZGtvME5tZEdRbllzYzFKcFlpeCtiVUl5
885
+ TEd0T1MzZHVURzFRUDFwMmVrOXhNUzBsVUhOaWEzbFhWbGQ1YjFaTGQzTjhS
886
+ MFZHYVZ0RFVTeFJQWEo0WDNvd01tbFBXazFHUjBaS0pVbGJLMk44WFRCRFIz
887
+ RlVlRE00S3l0aWVrOUNmRTh5VHl4c2QxMXVXbmc1VVg1SFdIQnJMbTUyY0c1
888
+ aFdud2xUMWNtVWpreGZsQnBiVWxqZURkd0wwUnhWVVZMVlhwYVhUQldMMkZ3
889
+ Vml4dVQxdHFkejgxV1VkYlUxSnJTU3hLWlYxS1VsSkxiMGRQVGtZNU5YRlZU
890
+ WFY4UTNCQkxIVkljblpaU0ZsdWVtNU9UVVkvJ30pOwphZGRMb2FkRXZlbnQo
891
+ ZnVuY3Rpb24oKXtsaW5rdHJhY2tlcl9pbml0KCcxJywwKTt9KTsKCTwvc2Ny
892
+ aXB0Pgo8bm9zY3JpcHQ+PGltZyBzcmM9Imh0dHA6Ly9zdGF0cy53b3JkcHJl
893
+ c3MuY29tL2IuZ2lmP3Y9bm9zY3JpcHQiIHN0eWxlPSJoZWlnaHQ6MHB4O3dp
894
+ ZHRoOjBweDtvdmVyZmxvdzpoaWRkZW4iIGFsdD0iIiAvPjwvbm9zY3JpcHQ+
895
+ CjwhLS0gZ29vZ2xlX2FkX3NlY3Rpb25fZW5kIC0tPgo8L2JvZHk+CjwvaHRt
896
+ bD4=
897
+ http_version: !binary |-
898
+ MS4x
899
+ recorded_at: Tue, 28 Feb 2012 20:15:32 GMT
900
+ recorded_with: VCR 2.0.0.rc2
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Sniffles do
4
+ it "should have a version" do
5
+ subject.const_defined?("VERSION").should be true
6
+ end
7
+
8
+ describe "#sniff" do
9
+ before(:all) do
10
+ VCR.use_cassette("wordpress") do
11
+ @body = Typhoeus::Request.get("http://www.wordpress.com/", :follow_location => true).body
12
+ end
13
+ @wp = Sniffles.sniff(@body)
14
+ end
15
+
16
+ it "should identify WordPress" do
17
+ @wp.should include(:wordpress => true)
18
+ end
19
+
20
+ it "should identify jQuery" do
21
+ @wp.should include(:jquery => true)
22
+ end
23
+
24
+ it "should identify Quantcast" do
25
+ @wp.should include(:quantcast => true)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/sniffles')
2
+
3
+ require 'vcr'
4
+ require 'typhoeus'
5
+
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = 'spec/cassettes'
8
+ c.hook_into :typhoeus
9
+ c.configure_rspec_metadata!
10
+ end
11
+
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sniffles
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ezekiel Templin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: &2156025180 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.5.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156025180
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2156040820 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2156040820
36
+ - !ruby/object:Gem::Dependency
37
+ name: typhoeus
38
+ requirement: &2156040120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.3
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2156040120
47
+ - !ruby/object:Gem::Dependency
48
+ name: vcr
49
+ requirement: &2156039420 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0.rc2
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2156039420
58
+ description: Detects popular CMS, Javascript libraries, and other items of interest.
59
+ email:
60
+ - zeke@templ.in
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - .rspec
67
+ - .rvmrc
68
+ - .travis.yml
69
+ - Gemfile
70
+ - Guardfile
71
+ - LICENSE
72
+ - README.md
73
+ - Rakefile
74
+ - lib/sniffles.rb
75
+ - lib/sniffles/version.rb
76
+ - sniffles.gemspec
77
+ - spec/cassettes/wordpress.yml
78
+ - spec/sniffles_spec.rb
79
+ - spec/spec_helper.rb
80
+ homepage: http://documentup.com/ezkl/sniffles
81
+ licenses: []
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 1.8.17
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Sniffles helps you determine the platforms and libraries a website is running.
104
+ test_files:
105
+ - spec/cassettes/wordpress.yml
106
+ - spec/sniffles_spec.rb
107
+ - spec/spec_helper.rb
108
+ has_rdoc: