URL: https://phatdoyle.github.io/block-talk-chat/
Submission: On August 07 via api from US — Scanned from DE

Summary

This website contacted 4 IPs in 2 countries across 3 domains to perform 6 HTTP transactions. The main IP is 2606:50c0:8000::153, located in United States and belongs to FASTLY, US. The main domain is phatdoyle.github.io.
TLS certificate: Issued by DigiCert TLS RSA SHA256 2020 CA1 on February 21st 2023. Valid for: a year.
This is the only time phatdoyle.github.io was scanned on urlscan.io!

urlscan.io Verdict: No classification

Domain & IP information

IP Address AS Autonomous System
1 2606:50c0:800... 54113 (FASTLY)
2 2606:4700:303... 13335 (CLOUDFLAR...)
3 162.159.135.233 13335 (CLOUDFLAR...)
6 4
Apex Domain
Subdomains
Transfer
3 discordapp.com
cdn.discordapp.com — Cisco Umbrella Rank: 2908
18 KB
2 chatanalytics.app
p.chatanalytics.app
358 B
1 github.io
phatdoyle.github.io
43 MB
6 3
Domain Requested by
3 cdn.discordapp.com
2 p.chatanalytics.app phatdoyle.github.io
1 phatdoyle.github.io
6 3

This site contains links to these domains. Also see Links.

Domain
chatanalytics.app
github.com
Subject Issuer Validity Valid
*.github.io
DigiCert TLS RSA SHA256 2020 CA1
2023-02-21 -
2024-03-20
a year crt.sh
chatanalytics.app
GTS CA 1P5
2023-07-22 -
2023-10-20
3 months crt.sh
sni.cloudflaressl.com
Cloudflare Inc ECC CA-3
2022-11-19 -
2023-11-19
a year crt.sh

This page contains 1 frames:

Primary Page: https://phatdoyle.github.io/block-talk-chat/
Frame ID: AE7C51B52F395D988E383006A1E1C66D
Requests: 17 HTTP requests in this frame

Screenshot

Page Title

Art Blocks - Chat Analytics

Detected technologies

Overall confidence: 100%
Detected patterns
  • ^https?://[^/]+\.github\.io

Page Statistics

6
Requests

100 %
HTTPS

67 %
IPv6

3
Domains

3
Subdomains

4
IPs

2
Countries

44442 kB
Transfer

54657 kB
Size

1
Cookies

Redirected requests

There were HTTP redirect chains for the following requests:

6 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request /
phatdoyle.github.io/block-talk-chat/
53 MB
43 MB
Document
General
Full URL
https://phatdoyle.github.io/block-talk-chat/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:50c0:8000::153 , United States, ASN54113 (FASTLY, US),
Reverse DNS
Software
GitHub.com /
Resource Hash

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36
accept-language
de-DE,de;q=0.9

Response headers

accept-ranges
bytes
access-control-allow-origin
*
age
2
cache-control
max-age=600
content-encoding
gzip
content-length
45396670
content-type
text/html; charset=utf-8
date
Mon, 07 Aug 2023 22:35:59 GMT
etag
W/"64552ed7-35473d5"
expires
Mon, 07 Aug 2023 22:45:57 GMT
last-modified
Fri, 05 May 2023 16:29:11 GMT
permissions-policy
interest-cohort=()
server
GitHub.com
vary
Accept-Encoding
via
1.1 varnish
x-cache
MISS
x-cache-hits
0
x-fastly-request-id
8854308317226228ccf017aa20b457464799f6df
x-github-request-id
4C6C:B6D9:2C0A61:2D4138:64D171CD
x-proxy-cache
MISS
x-served-by
cache-fra-eddf8230052-FRA
x-timer
S1691447758.895416,VS0,VE1933
event
p.chatanalytics.app/api/
0
0
Preflight
General
Full URL
https://p.chatanalytics.app/api/event
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:4700:3035::6815:1ea0 , United States, ASN13335 (CLOUDFLARENET, US),
Reverse DNS
Software
cloudflare /
Resource Hash

Request headers

Accept
*/*
Access-Control-Request-Headers
content-type
Access-Control-Request-Method
POST
Origin
https://phatdoyle.github.io
Sec-Fetch-Mode
cors
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

access-control-allow-credentials
true
access-control-allow-headers
Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since,X-CSRF-Token
access-control-allow-methods
GET,POST,PUT,PATCH,DELETE,OPTIONS
access-control-allow-origin
*
access-control-expose-headers
access-control-max-age
1728000
alt-svc
h3=":443"; ma=86400
cache-control
max-age=0, private, must-revalidate
cf-cache-status
DYNAMIC
cf-ray
7f32fefe9e2a5c85-FRA
date
Mon, 07 Aug 2023 22:36:01 GMT
nel
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
report-to
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=9o23fFq8wLJMqWNky0okO6oHuUvSun45porrIric%2FICqi8KCmDafZjkfX9AROOwDm54iq5v9xMx8vqnc6PdTM1c7J99X%2FFsHqeS1DpZw%2FQbkhxqFdp%2BbDsPsOO4ln0zrUyGzC8b%2Bq4tmPS2rX2jF3APs"}],"group":"cf-nel","max_age":604800}
server
cloudflare
x-request-id
F3k6xx93RrD2BBUAGwgx
event
p.chatanalytics.app/api/
2 B
358 B
Fetch
General
Full URL
https://p.chatanalytics.app/api/event
Requested by
Host: phatdoyle.github.io
URL: https://phatdoyle.github.io/block-talk-chat/
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
2606:4700:3035::6815:1ea0 , United States, ASN13335 (CLOUDFLARENET, US),
Reverse DNS
Software
cloudflare /
Resource Hash
2689367b205c16ce32ed4200942b8b8b1e262dfc70d9bc9fbc77c49699a4f1df

Request headers

Referer
https://phatdoyle.github.io/
accept-language
de-DE,de;q=0.9
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36
Content-Type
application/json

Response headers

date
Mon, 07 Aug 2023 22:36:02 GMT
cf-cache-status
DYNAMIC
nel
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server
cloudflare
report-to
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=0kryoZa04grHWn1VvBsWosIB70hhdUyHaYA5cLcewvqwqTY57YNMOCBN8z%2B5%2BV84U0Ia24hiRIC7Y73bwS%2B3X%2FouPKt9H1AeMV57XNWGlXKWRlmw4Cbv9%2FyEVH%2FQ6o8965Kj7%2FZQSLGl%2Fwy8pZs4ZCTx"}],"group":"cf-nel","max_age":604800}
content-type
text/plain; charset=utf-8
access-control-allow-origin
*
access-control-expose-headers
cache-control
max-age=0, private, must-revalidate
access-control-allow-credentials
true
cf-ray
7f32ff00afe05c85-FRA
alt-svc
h3=":443"; ma=86400
content-length
2
x-request-id
F3k6xzHH9aZdU7cAFwbi
truncated
/
66 KB
66 KB
Other
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
0d32ce6bef0784e2ca90e4a4336e7ead642dc838fe6ca3b7eb3c163e7fcbf553

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
application/javascript
truncated
/
10 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
101c0cd075cc786b343ff20410fd689cb237ef0dc4f6c2c6a4970a0cad2113de

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
2 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c69d391b0294f85a58eeb7032a8484e2968e3c16785e6890ad3792c9642da4ac

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
681 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
03edda1cc28617cf48164375978344428d1277c6f7a73a83a99fde4fb7666fa8

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
747 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
995f2c339e083865b075375623c7b1e548827d914a2e27dc57ad0948ffeca29b

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
1 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
170d909307239d56382cf78b9ad3684e523b1035658b4c5450a7f8da9b15bcdf

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
782 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
4f501fe2521bded8560d7b58fa6645bac9f78137cdebc3a9656c6eb5ccaa0bdb

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
787 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
c65b23c181d4193f7faffe46a219788e7943dd2e63570b8b62f77a751a715eb8

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
377 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
6d3aa78e42c0eb66b6136d0470d942b89dec822a44f99647172a79f7859dcc70

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
757 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7fb1eb8f5c963bf814086598dbdd17b085e00e7a0df8a9f2f55f93d9746cce1e

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
166 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
97896c4668a39f15f198c50c0cf309f43ea160b3d168e3d38e84ee63caafaaf5

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml;charset=utf-8
truncated
/
207 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
adcfff2ac831df87b3b852ce28a27159297a90813cc5dd58f5f44441b45b7c75

Request headers

accept-language
de-DE,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

Content-Type
image/svg+xml
d4afecb7fdac3106350837748e6f8500.png
cdn.discordapp.com/icons/411959613370400778/
6 KB
7 KB
Image
General
Full URL
https://cdn.discordapp.com/icons/411959613370400778/d4afecb7fdac3106350837748e6f8500.png
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
162.159.135.233 -, , ASN13335 (CLOUDFLARENET, US),
Reverse DNS
Software
cloudflare /
Resource Hash
f652fad46143e7166f5a775a0a29b2c6e7da52218b30b84e7104b4917ffac73a

Request headers

accept-language
de-DE,de;q=0.9
Referer
https://phatdoyle.github.io/
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

date
Mon, 07 Aug 2023 22:36:03 GMT
cf-cache-status
HIT
nel
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
age
305880
alt-svc
h3=":443"; ma=86400
content-length
6397
last-modified
Fri, 07 Oct 2022 20:54:46 GMT
server
cloudflare
vary
Accept-Encoding
report-to
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=6P2sQurDTJ99HxVJRfnHQNsbtroSsz147N03QvBLXJ5VUvtqASOe9a5pfr8WAI2W9lhKdWSSO8VkYSUqrZNakhu%2BFC46OHvEyRtLml9li0yCRgICY9cEMUxkeFReHoGFwClAFA%3D%3D"}],"group":"cf-nel","max_age":604800}
content-type
image/png
access-control-allow-origin
*
cache-control
public, max-age=31536000
accept-ranges
bytes
x-robots-tag
noindex, nofollow, noarchive, nocache, noimageindex, noodp
cf-ray
7f32ff09dc963a9d-FRA
expires
Tue, 06 Aug 2024 22:36:03 GMT
e44ddf50a7185fcd593ef67ff7b900b5.png
cdn.discordapp.com/avatars/794646394420854824/
3 KB
4 KB
Image
General
Full URL
https://cdn.discordapp.com/avatars/794646394420854824/e44ddf50a7185fcd593ef67ff7b900b5.png?size=64
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
162.159.135.233 -, , ASN13335 (CLOUDFLARENET, US),
Reverse DNS
Software
cloudflare /
Resource Hash
224303ea3c0add7b0332b5dbec6ac1a391b6ec18c2917161298cd19b3c835f9b

Request headers

accept-language
de-DE,de;q=0.9
Referer
https://phatdoyle.github.io/
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

date
Mon, 07 Aug 2023 22:36:03 GMT
cf-cache-status
MISS
nel
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
alt-svc
h3=":443"; ma=86400
content-length
3096
last-modified
Wed, 21 Apr 2021 03:17:44 GMT
server
cloudflare
vary
Accept-Encoding
report-to
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=dxfPJdICzNl6xOQuJI%2Ft2XlrIfMfk5YdHVdniVzn0Nmu274j66O%2BO0ggYwZ9pGQrMctaT%2FLRVeAk2kNulSn7sSectg5U2KYucWtsi6OoKDdT5GwH8OtjBGXniDOuDS2gG9555A%3D%3D"}],"group":"cf-nel","max_age":604800}
content-type
image/png
access-control-allow-origin
*
cache-control
public, max-age=31536000
accept-ranges
bytes
x-robots-tag
noindex, nofollow, noarchive, nocache, noimageindex, noodp
cf-ray
7f32ff09dc9e3a9d-FRA
expires
Tue, 06 Aug 2024 22:36:03 GMT
0ee618ac0f81e3c283859c291977f9fa.png
cdn.discordapp.com/avatars/344406301616373762/
7 KB
7 KB
Image
General
Full URL
https://cdn.discordapp.com/avatars/344406301616373762/0ee618ac0f81e3c283859c291977f9fa.png?size=64
Protocol
H2
Security
TLS 1.3, , AES_128_GCM
Server
162.159.135.233 -, , ASN13335 (CLOUDFLARENET, US),
Reverse DNS
Software
cloudflare /
Resource Hash
a42cbd877fd18fcd324300856562a6a913caf89ef668976de3fe8f90a0e10707

Request headers

accept-language
de-DE,de;q=0.9
Referer
https://phatdoyle.github.io/
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.170 Safari/537.36

Response headers

date
Mon, 07 Aug 2023 22:36:03 GMT
cf-cache-status
MISS
nel
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
alt-svc
h3=":443"; ma=86400
content-length
6947
last-modified
Sat, 30 Apr 2022 21:22:52 GMT
server
cloudflare
vary
Accept-Encoding
report-to
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=eoj4z%2F4UDSONKQv8IYihjyTSshToed95wSv3Y6tc8zfBTkUfglS8v2YHPIZUbgVmhd86NutcLQ4KOFvBXFFuVq2ayCgQBDr%2BqNRxeqNt%2BweGOF9B%2FQxgIW31BEhlJJWy%2BHYB1A%3D%3D"}],"group":"cf-nel","max_age":604800}
content-type
image/png
access-control-allow-origin
*
cache-control
public, max-age=31536000
accept-ranges
bytes
x-robots-tag
noindex, nofollow, noarchive, nocache, noimageindex, noodp
cf-ray
7f32ff09dc9c3a9d-FRA
expires
Tue, 06 Aug 2024 22:36:03 GMT

Verdicts & Comments Add Verdict or Comment

0 JavaScript Global Variables

These are the non-standard "global" variables defined on the window object. These can be helpful in identifying possible client-side frameworks and code.

1 Cookies

Domain/Path Name / Value
.discordapp.com/ Name: __cf_bm
Value: CI3uYK7TaJ_DDUx4qwHOGbyaqEfEKszYY5d2pc8LajY-1691447763-0-AWrx9jMsIe40ul/icbV868f/M/HVoY0LlJa0oPggsvl289i0K7kOlI6m/bcARHJO9Fzkin2uRSbrm26metTwQsM=

7 Console Messages

Source Level URL
Text
security warning
Message:
Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'.
worker warning URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
This message is here to prevent the inclusion of all blocks in the report UI. You should only see this message in the console once. If you see it twice, the report UI includes all blocks, which is not what we want.
worker info URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
WorkerReport started
worker verbose URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
Decompress time: 1392.31005859375 ms
worker verbose URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
Compute common block data: 13.166015625 ms
worker verbose URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
Build format cache: 110.949951171875 ms
worker verbose URL: data:application/javascript;base64,KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXszMjg0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXR0YWNobWVudFR5cGVGcm9tTWltZVR5cGU9dC5nZXRBdHRhY2htZW50VHlwZUZyb21GaWxlTmFtZT10LkF0dGFjaG1lbnRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuSW1hZ2U9MF09IkltYWdlIixlW2UuSW1hZ2VBbmltYXRlZD0xXT0iSW1hZ2VBbmltYXRlZCIsZVtlLlZpZGVvPTJdPSJWaWRlbyIsZVtlLlN0aWNrZXI9M109IlN0aWNrZXIiLGVbZS5BdWRpbz00XT0iQXVkaW8iLGVbZS5Eb2N1bWVudD01XT0iRG9jdW1lbnQiLGVbZS5PdGhlcj02XT0iT3RoZXIifShuPXQuQXR0YWNobWVudFR5cGV8fCh0LkF0dGFjaG1lbnRUeXBlPXt9KSk7Y29uc3Qgcz17W24uSW1hZ2VdOlsicG5nIiwianBnIiwianBlZyIsIndlYnAiLCJibXAiLCJ0aWZmIiwidGlmIiwic3ZnIiwiaWNvIiwicHNkIl0sW24uSW1hZ2VBbmltYXRlZF06WyJnaWYiLCJnaWZ2IiwiYXBuZyJdLFtuLlZpZGVvXTpbIm1wNCIsIndlYm0iLCJta3YiLCJmbHYiLCJtb3YiLCJhdmkiLCJ3bXYiLCJtcGciLCJtcGVnIiwiYXZpIl0sW24uQXVkaW9dOlsibXAzIiwib2dnIiwid2F2IiwiZmxhYyIsIm00YSJdLFtuLkRvY3VtZW50XTpbImRvYyIsImRvY3giLCJvZHQiLCJwZGYiLCJ4bHMiLCJ4bHN4Iiwib2RzIiwicHB0IiwicHB0eCIsInR4dCIsImh0bWwiXX0scj1bImFwcGxpY2F0aW9uL3BkZiIsImFwcGxpY2F0aW9uL2VwdWIiLCJhcHBsaWNhdGlvbi9lcHViK3ppcCIsInRleHQvaHRtbCIsImFwcGxpY2F0aW9uL3J0ZiIsImFwcGxpY2F0aW9uL21zd29yZCIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0IiwidGV4dC9wbGFpbiJdO3QuZ2V0QXR0YWNobWVudFR5cGVGcm9tRmlsZU5hbWU9ZT0+e3ZhciB0O2NvbnN0IHI9KGUuc3BsaXQoIi4iKS5wb3AoKXx8IiIpLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBlPTA7ZTw9bi5PdGhlcjtlKyspaWYobnVsbD09PSh0PXNbZV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKHIpKXJldHVybiBlO3JldHVybiBuLk90aGVyfSx0LmdldEF0dGFjaG1lbnRUeXBlRnJvbU1pbWVUeXBlPWU9PihlPWUudG9Mb3dlckNhc2UoKSkuc3RhcnRzV2l0aCgiaW1hZ2UvZ2lmIik/bi5JbWFnZUFuaW1hdGVkOmUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/bi5JbWFnZTplLnN0YXJ0c1dpdGgoInZpZGVvLyIpP24uVmlkZW86ZS5zdGFydHNXaXRoKCJhdWRpby8iKT9uLkF1ZGlvOnIuaW5jbHVkZXMoZSk/bi5Eb2N1bWVudDpuLk90aGVyfSw4NzA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0RGF0ZXRpbWU9dC5mb3JtYXRUaW1lPXQuZ2VuVGltZUtleXM9dC5EYXk9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMueWVhcj1lLHRoaXMubW9udGg9dCx0aGlzLmRheT1ufXN0YXRpYyBmcm9tRGF0ZShlKXtyZXR1cm4gbmV3IG4oZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSsxLGUuZ2V0RGF0ZSgpKX1zdGF0aWMgZnJvbUtleShlKXtjb25zdCB0PWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSwxLDEpO2Nhc2UgMjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLDEpO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2RlZmF1bHQ6cmV0dXJuIG5ldyBuKHRbMF0sdFsxXSw3KnRbM10rMSl9fXN0YXRpYyBmcm9tQmluYXJ5KGUpe3JldHVybiBuZXcgbihlPj4+OSxlPj4+NSYxNSwzMSZlKX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgtMSx0aGlzLmRheSl9dG9CaW5hcnkoKXtyZXR1cm4gdGhpcy55ZWFyPDw5fHRoaXMubW9udGg8PDV8dGhpcy5kYXl9dG9UaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS5nZXRUaW1lKCl9Z2V0IHllYXJLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9YH1nZXQgbW9udGhLZXkoKXtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH1gfWdldCB3ZWVrS2V5KCl7Y29uc3QgZT1NYXRoLmZsb29yKCh0aGlzLmRheS0xKS83KTtyZXR1cm5gJHt0aGlzLnllYXJ9LSR7dGhpcy5tb250aH0tLSR7ZX1gfWdldCBkYXRlS2V5KCl7cmV0dXJuYCR7dGhpcy5tb250aEtleX0tJHt0aGlzLmRheX1gfW5leHREYXlzKGUpe2NvbnN0IHQ9dGhpcy50b0RhdGUoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLG4uZnJvbURhdGUodCl9bmV4dERheSgpe3JldHVybiB0aGlzLm5leHREYXlzKDEpfXN0YXRpYyBlcShlLHQpe3JldHVybiBlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT09PXQuZGF5fXN0YXRpYyBsdChlLHQpe3JldHVybiBlLnllYXI8dC55ZWFyfHxlLnllYXI9PT10LnllYXImJmUubW9udGg8dC5tb250aHx8ZS55ZWFyPT09dC55ZWFyJiZlLm1vbnRoPT09dC5tb250aCYmZS5kYXk8dC5kYXl9c3RhdGljIGd0KGUsdCl7cmV0dXJuIGUueWVhcj50LnllYXJ8fGUueWVhcj09PXQueWVhciYmZS5tb250aD50Lm1vbnRofHxlLnllYXI9PT10LnllYXImJmUubW9udGg9PT10Lm1vbnRoJiZlLmRheT50LmRheX1zdGF0aWMgbWluKGUsdCl7cmV0dXJuIG4ubHQoZSx0KT9lOnR9c3RhdGljIG1heChlLHQpe3JldHVybiBuLmd0KGUsdCk/ZTp0fXN0YXRpYyBjbGFtcChlLHQscyl7cmV0dXJuIG4ubWluKG4ubWF4KGUsdCkscyl9fXQuRGF5PW4sbi5MT1dFU1Q9bmV3IG4oMCwwLDApLG4uSElHSEVTVD1uZXcgbig5OTk5LDEyLDMxKSx0LmdlblRpbWVLZXlzPShlLHQpPT57aWYobi5sdCh0LGUpKXRocm93IG5ldyBFcnJvcigiZ2VuVGltZUtleXM6IHN0YXJ0IG11c3QgYmUgYmVmb3JlIGVuZCIpO2NvbnN0IHM9dC5uZXh0RGF5KCkscj1bXSxhPVtdLGk9W10sbz1bXSxsPVtdLHU9W10saD1bXTtsZXQgZj1lO2Zvcig7IW4uZXEoZixzKTspe2NvbnN0IGU9Zi5kYXRlS2V5LHQ9Zi5tb250aEtleSxuPWYud2Vla0tleSxzPWYueWVhcktleTswIT09YS5sZW5ndGgmJmFbYS5sZW5ndGgtMV09PT1ufHxhLnB1c2gobiksMCE9PWkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdPT09dHx8aS5wdXNoKHQpLDAhPT1vLmxlbmd0aCYmb1tvLmxlbmd0aC0xXT09PXN8fG8ucHVzaChzKSxyLnB1c2goZSksbC5wdXNoKGEubGVuZ3RoLTEpLHUucHVzaChpLmxlbmd0aC0xKSxoLnB1c2goby5sZW5ndGgtMSksZj1mLm5leHREYXkoKX1yZXR1cm57ZGF0ZUtleXM6cix3ZWVrS2V5czphLG1vbnRoS2V5czppLHllYXJLZXlzOm8sZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpsLGRhdGVUb1llYXJJbmRleDpofX07Y29uc3Qgcz0ibnVtZXJpYyIscj0ibG9uZyIsYT0iMi1kaWdpdCIsaT0iMi1kaWdpdCIsbz0iMi1kaWdpdCIsbD17eTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6c30pLHltOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjpzLG1vbnRoOnJ9KSx5bWQ6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YX0pLHltZGg6bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHt5ZWFyOnMsbW9udGg6cixkYXk6YSxob3VyOml9KSxzeW1kOm5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHZvaWQgMCx7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9KSx5bWRobTpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6b30pLHltZGhtczpuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh2b2lkIDAse3llYXI6cyxtb250aDpyLGRheTphLGhvdXI6aSxtaW51dGU6byxzZWNvbmQ6IjItZGlnaXQifSl9O3QuZm9ybWF0VGltZT0oZSx0LG49MCk9Pntjb25zdCBzPXQudG9EYXRlKCk7cmV0dXJuIHMuc2V0U2Vjb25kcyhuKSxsW2VdLmZvcm1hdChzKX0sdC5mb3JtYXREYXRldGltZT0oZSxzKT0+dm9pZCAwPT09cz8iLSI6KDAsdC5mb3JtYXRUaW1lKShlLG4uZnJvbUtleShzLmtleSkscy5zZWNvbmRPZkRheSl9LDE5MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmxvY2tzPXZvaWQgMDtjb25zdCByPXMobig5OTY5KSksYT1zKG4oODQyNSkpLGk9cyhuKDg2NykpLG89cyhuKDgxOTIpKSxsPXMobig4ODApKSx1PXMobig0NzU2KSksaD1zKG4oNjUxMCkpLGY9cyhuKDU3ODApKSxjPXMobig3NzExKSksZD1zKG4oODc1NCkpLG09cyhuKDUwMDUpKSxwPXMobig5OTMpKSxnPXMobig2NTg2KSkseT1zKG4oOTI2MCkpO3QuQmxvY2tzPXtbZy5kZWZhdWx0LmtleV06Zy5kZWZhdWx0LFtvLmRlZmF1bHQua2V5XTpvLmRlZmF1bHQsW2kuZGVmYXVsdC5rZXldOmkuZGVmYXVsdCxbci5kZWZhdWx0LmtleV06ci5kZWZhdWx0LFthLmRlZmF1bHQua2V5XTphLmRlZmF1bHQsW3kuZGVmYXVsdC5rZXldOnkuZGVmYXVsdCxbbC5kZWZhdWx0LmtleV06bC5kZWZhdWx0LFt1LmRlZmF1bHQua2V5XTp1LmRlZmF1bHQsW2YuZGVmYXVsdC5rZXldOmYuZGVmYXVsdCxbYy5kZWZhdWx0LmtleV06Yy5kZWZhdWx0LFtkLmRlZmF1bHQua2V5XTpkLmRlZmF1bHQsW20uZGVmYXVsdC5rZXldOm0uZGVmYXVsdCxbcC5kZWZhdWx0LmtleV06cC5kZWZhdWx0LFtoLmRlZmF1bHQua2V5XTpoLmRlZmF1bHR9LGNvbnNvbGUud2FybigiVGhpcyBtZXNzYWdlIGlzIGhlcmUgdG8gcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIGFsbCBibG9ja3MgaW4gdGhlIHJlcG9ydCBVSS4gWW91IHNob3VsZCBvbmx5IHNlZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUgb25jZS4gSWYgeW91IHNlZSBpdCB0d2ljZSwgdGhlIHJlcG9ydCBVSSBpbmNsdWRlcyBhbGwgYmxvY2tzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiIpfSw3MTI0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPXZvaWQgMDtjb25zdCBzPW4oODcwNik7dC5jb21wdXRlQ29tbW9uQmxvY2tEYXRhPWU9Pntjb25zdCB0PXMuRGF5LmZyb21LZXkoZS50aW1lLm1pbkRhdGUpLG49cy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkscj0oMCxzLmdlblRpbWVLZXlzKSh0LG4pLGE9e3RpbWVLZXlzOnIsZGF5T2ZXZWVrOltdLGtleVRvVGltZXN0YW1wOntkYXRlOltdLHdlZWs6W10sbW9udGg6W119fTtsZXQgaT0wO2Zvcihjb25zdCBlIG9mIHIuZGF0ZUtleXMpe2NvbnN0IHQ9cy5EYXkuZnJvbUtleShlKTthLmtleVRvVGltZXN0YW1wLmRhdGUucHVzaCh0LnRvVGltZXN0YW1wKCkpLGEuZGF5T2ZXZWVrW2ldPXQudG9EYXRlKCkuZ2V0RGF5KCksaSsrfWZvcihjb25zdCBlIG9mIHIud2Vla0tleXMpYS5rZXlUb1RpbWVzdGFtcC53ZWVrLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtmb3IoY29uc3QgZSBvZiByLm1vbnRoS2V5cylhLmtleVRvVGltZXN0YW1wLm1vbnRoLnB1c2gocy5EYXkuZnJvbUtleShlKS50b1RpbWVzdGFtcCgpKTtyZXR1cm4gYX0sdC5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb249KGUsdCk9Pntjb25zdCBuPXt0b3RhbDp0LGNvdW50OltdLGJveHBsb3Q6e21pbjowLHdoaXNrZXJNaW46MCxxMTowLG1lZGlhbjowLHEzOjAsd2hpc2tlck1heDowLG1heDowLG91dGxpZXJzOjB9fTtpZih0PD0xKXJldHVybiBuO2Uuc29ydCgpO2NvbnN0IHM9ZVswXSxyPWVbdC0xXSxhPU1hdGguZmxvb3IoLjI1KnQpLGk9TWF0aC5mbG9vciguNSp0KSxvPU1hdGguZmxvb3IoLjc1KnQpLGw9ZVthXSx1PWVbaV0saD1lW29dLGY9aC1sLGM9TWF0aC5mbG9vcihNYXRoLm1heChzLGwtMS41KmYpKSxkPU1hdGguY2VpbChNYXRoLm1pbihyLGgrMS41KmYpKSxtPU1hdGgubWluKGQtYywxODApfHwwO24uY291bnQ9bmV3IEFycmF5KG0pLmZpbGwoMCksbi5ib3hwbG90PXttaW46cyx3aGlza2VyTWluOmMscTE6bCxtZWRpYW46dSxxMzpoLHdoaXNrZXJNYXg6ZCxtYXg6cixvdXRsaWVyczowfTtmb3IobGV0IHM9MDtzPHQ7cysrKXtjb25zdCB0PWVbc107dD49YyYmdDxkP24uY291bnRbTWF0aC5mbG9vcihtLyhkLWMpKih0LWMpKV0rKzpuLmJveHBsb3Qub3V0bGllcnMrK31yZXR1cm4gbn19LDE3OTc6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZpbHRlcnM9dm9pZCAwO2NvbnN0IHM9big4NzA2KTt0LkZpbHRlcnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFubmVscz1bXSx0aGlzLmF1dGhvcnM9bmV3IFVpbnQ4QXJyYXkoZS5hdXRob3JzLmxlbmd0aCksdGhpcy5zdGFydERheUluZGV4PTAsdGhpcy5lbmREYXlJbmRleD0wLHRoaXMuZGF0ZUtleXM9KDAscy5nZW5UaW1lS2V5cykocy5EYXkuZnJvbUtleShlLnRpbWUubWluRGF0ZSkscy5EYXkuZnJvbUtleShlLnRpbWUubWF4RGF0ZSkpLmRhdGVLZXlzfXVwZGF0ZUNoYW5uZWxzKGUpe3RoaXMuY2hhbm5lbHM9ZX11cGRhdGVBdXRob3JzKGUpe3RoaXMuYXV0aG9ycy5maWxsKDApO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hdXRob3JzW3RdPTF9dXBkYXRlU3RhcnREYXRlKGUpe3RoaXMuc3RhcnREYXlJbmRleD10aGlzLmRhdGVLZXlzLmluZGV4T2YoZSl9dXBkYXRlRW5kRGF0ZShlKXt0aGlzLmVuZERheUluZGV4PXRoaXMuZGF0ZUtleXMuaW5kZXhPZihlKX1oYXNDaGFubmVsKGUpe3JldHVybi0xIT09dGhpcy5jaGFubmVscy5pbmRleE9mKGUpfWhhc0F1dGhvcihlKXtyZXR1cm4gdGhpcy5hdXRob3JzW2VdPjB9aW5UaW1lKGUpe3JldHVybiB0aGlzLnN0YXJ0RGF5SW5kZXg8PWUmJmU8PXRoaXMuZW5kRGF5SW5kZXh9Z2V0IG51bUFjdGl2ZURheXMoKXtyZXR1cm4gdGhpcy5lbmREYXlJbmRleC10aGlzLnN0YXJ0RGF5SW5kZXgrMX19fSw4NjE1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maWx0ZXJNZXNzYWdlcz12b2lkIDA7Y29uc3Qgcz1uKDExNTgpLHI9big4NjMzKTt0LmZpbHRlck1lc3NhZ2VzPShlLHQsbixhPXtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITB9KT0+e2NvbnN0IGk9bmV3IHMuQml0U3RyZWFtKHQubWVzc2FnZXMuYnVmZmVyKTtmb3IobGV0IHM9MDtzPHQuY2hhbm5lbHMubGVuZ3RoO3MrKyl7aWYoYS5jaGFubmVscyYmIW4uaGFzQ2hhbm5lbChzKSljb250aW51ZTtjb25zdCBvPXQuY2hhbm5lbHNbc107aWYodm9pZCAwIT09by5tc2dBZGRyJiZ2b2lkIDAhPT1vLm1zZ0NvdW50KXtpLm9mZnNldD1vLm1zZ0FkZHI7Zm9yKGxldCBsPTA7bDxvLm1zZ0NvdW50O2wrKyl7Y29uc3QgbD1uZXcgci5NZXNzYWdlVmlldyhpLHQuYml0Q29uZmlnKTtpZigoIWEudGltZXx8bi5pblRpbWUobC5kYXlJbmRleCkpJiYoIWEuYXV0aG9yc3x8bi5oYXNBdXRob3IobC5hdXRob3JJbmRleCkpKXtjb25zdCB0PWkub2Zmc2V0O2wuZ3VpbGRJbmRleD1vLmd1aWxkSW5kZXgsbC5jaGFubmVsSW5kZXg9cyxlKGwpLGkub2Zmc2V0PXR9fX19fX0sOTk2OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPShlLHQpPT57Y29uc3Qgbj17ZG9tYWluOiJUTERzIixncm91cENvdW50OjAsc3ViZG9tYWluczpbXX07Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXS5zcGxpdCgiLiIpO2xldCBhPW4saT0iIjtmb3IobGV0IG49ci5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgbz1yW25dLGw9bytpO2lmKGk9Ii4iK28raSx2b2lkIDA9PT1hLnN1YmRvbWFpbnMpY29udGludWU7Y29uc3QgdT1hLnN1YmRvbWFpbnMuZmluZCgoZT0+ZS5kb21haW49PT1pKSk7dm9pZCAwPT09dT8oYS5zdWJkb21haW5zLnB1c2goe2RvbWFpbjppLGdyb3VwQ291bnQ6MCxzdWJkb21haW5zOlt7ZG9tYWluOmwsZ3JvdXBDb3VudDowLGNvdW50OjB9XX0pLGE9YS5zdWJkb21haW5zW2Euc3ViZG9tYWlucy5sZW5ndGgtMV0pOmE9dSxhLmdyb3VwQ291bnQrPXRbc10sYS5zdWJkb21haW5zWzBdLmRvbWFpbj09PWVbc10mJihhLnN1YmRvbWFpbnNbMF0uZ3JvdXBDb3VudD10W3NdLGEuc3ViZG9tYWluc1swXS5jb3VudD10W3NdKX19bi5ncm91cENvdW50PW4uc3ViZG9tYWlucy5yZWR1Y2UoKChlLHQpPT5lK3QuZ3JvdXBDb3VudCksMCk7bGV0IHM9MDtjb25zdCByPWU9PntpZihzKyssdm9pZCAwPT09ZS5zdWJkb21haW5zKXJldHVybiBlO2NvbnN0IHQ9ZS5zdWJkb21haW5zLnJlZHVjZSgoKGUsdCk9PmUrdC5ncm91cENvdW50KSwwKSxuPVtdO2xldCBhPTAsaT0wO2Zvcihjb25zdCBzIG9mIGUuc3ViZG9tYWlucylzLmdyb3VwQ291bnQvdD49LjAxP24ucHVzaChzKTooaSsrLGErPXMuZ3JvdXBDb3VudCk7cmV0dXJuIGE+MCYmYS90Pj0uMDEmJmk+MSYmKG4ucHVzaCh7ZG9tYWluOiJUTERzIj09PWUuZG9tYWluPyJPdGhlciBUTERzIjpgT3RoZXIgJyR7ZS5kb21haW59JyBkb21haW5zYCxjb3VudDphLGdyb3VwQ291bnQ6YX0pLGUuc3ViZG9tYWlucz1uKSwxPT09bi5sZW5ndGgmJiJUTERzIiE9PWUuZG9tYWluP3IoblswXSk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdWJkb21haW5zOm4ubWFwKHIpfSl9LGE9cihuKTtyZXR1cm4gY29uc29sZS5sb2coIkRvbWFpbiB0cmVlIG5vZGUgY291bnQ6ICIrcyksYX07dC5kZWZhdWx0PXtrZXk6ImRvbWFpbnMvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixhKT0+e2NvbnN0IGk9bmV3IEFycmF5KGUuZG9tYWlucy5sZW5ndGgpLmZpbGwoMCksbz1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5kb21haW5zO2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IG4gb2YgdClpW25bMF1dKz1uWzFdLG9bZS5hdXRob3JJbmRleF0rPW5bMV0sbFtlLmNoYW5uZWxJbmRleF0rPW5bMV19KSxlLHQpLHtjb3VudHM6e2RvbWFpbnM6aSxhdXRob3JzOm8sY2hhbm5lbHM6bH0sdHJlZTpyKGUuZG9tYWlucyxpKX19fX0sODQyNTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToiZW1vamkvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3JlZ3VsYXI6MCxjdXN0b206MCx1bmlxdWU6MCxtZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamk6MCxjb3VudHM6e2Vtb2ppczpuZXcgQXJyYXkoZS5lbW9qaXMubGVuZ3RoKS5maWxsKDApLGF1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfSxzZXQ6bmV3IFNldH0saT17cmVndWxhcjowLGN1c3RvbTowLHVuaXF1ZTowLG1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaTowLGNvdW50czp7ZW1vamlzOm5ldyBBcnJheShlLmVtb2ppcy5sZW5ndGgpLmZpbGwoMCksYXV0aG9yczpuZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSxjaGFubmVsczpuZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoMCl9LHNldDpuZXcgU2V0fSxvPSh0LG4scyxyLGEpPT57dC5jb3VudHMuZW1vamlzW25dKz1zLHQuY291bnRzLmF1dGhvcnNbcl0rPXMsdC5jb3VudHMuY2hhbm5lbHNbYV0rPXMsImN1c3RvbSI9PT1lLmVtb2ppc1tuXS50eXBlP3QuY3VzdG9tKz1zOnQucmVndWxhcis9cyx0LnNldC5hZGQobil9O3JldHVybigwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3QgdD1lLmVtb2ppcztpZih0KWZvcihjb25zdCBuIG9mIHQpbyhhLG5bMF0sblsxXSxlLmF1dGhvckluZGV4LGUuY2hhbm5lbEluZGV4KSxhLm1lc3NhZ2VzV2l0aEF0TGVhc3RPbmVFbW9qaSsrO2NvbnN0IG49ZS5yZWFjdGlvbnM7aWYobilmb3IoY29uc3QgdCBvZiBuKW8oaSx0WzBdLHRbMV0sZS5hdXRob3JJbmRleCxlLmNoYW5uZWxJbmRleCksaS5tZXNzYWdlc1dpdGhBdExlYXN0T25lRW1vamkrK30pLGUsdCksYS51bmlxdWU9YS5zZXQuc2l6ZSxhLnNldD12b2lkIDAsaS51bmlxdWU9aS5zZXQuc2l6ZSxpLnNldD12b2lkIDAse2luVGV4dDphLGluUmVhY3Rpb25zOml9fX19LDg2NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NzA2KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL2NvbnZlcnNhdGlvbi1zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aX09bi50aW1lS2V5cyxvPW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxsPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLHU9Wy4uLmxdOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT51W2UuYXV0aG9ySW5kZXhdKyspLGUsdCk7Y29uc3QgaD11Lm1hcCgoKGUsdCk9Pih7Y291bnQ6ZSxpbmRleDp0fSkpKS5maWx0ZXIoKGU9PmUuY291bnQ+MCkpLnNvcnQoKChlLHQpPT50LmNvdW50LWUuY291bnQpKS5zbGljZSgwLDIwKSxmPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKC0xKTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoO2UrKylmW2hbZV0uaW5kZXhdPWU7Y29uc3QgYz1oLmxlbmd0aCxkPW5ldyBVaW50MTZBcnJheShjKihjKzEpLzIpLmZpbGwoMCksbT1uZXcgQXJyYXkoZS5jaGFubmVscy5sZW5ndGgpLmZpbGwoe2FjdGl2ZVBhcnRpY2lwYW50Om5ldyBBcnJheShjKS5maWxsKCExKSxsYXN0TWVzc2FnZVRpbWVzdGFtcDotMX0pOygwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57Y29uc3Qgbj1zLkRheS5mcm9tS2V5KGlbZS5kYXlJbmRleF0pLnRvRGF0ZSgpO24uc2V0U2Vjb25kcyhlLnNlY29uZE9mRGF5KTtjb25zdCByPW4uZ2V0VGltZSgpLGE9bVtlLmNoYW5uZWxJbmRleF07aWYoLTE9PT1hLmxhc3RNZXNzYWdlVGltZXN0YW1wfHxyLWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA+MThlNSl7Y29uc3Qgbj1hLmFjdGl2ZVBhcnRpY2lwYW50Lm1hcCgoKGUsdCk9PmU/dDotMSkpLmZpbHRlcigoZT0+LTEhPT1lKSkscz1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD1lKzE7dDxzO3QrKyl7Y29uc3Qgcz1uW2VdLHI9blt0XSxhPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLHIpLG89YSpjLWEqKGErMSkvMitpO28+PTAmJm88ZC5sZW5ndGh8fGNvbnNvbGUubG9nKHMscixhLGksbyksY29uc29sZS5hc3NlcnQobz49MCYmbzxkLmxlbmd0aCksZFtvXSsrfWEuYWN0aXZlUGFydGljaXBhbnQuZmlsbCghMSksb1tlLmNoYW5uZWxJbmRleF0rKyx0Lmhhc0F1dGhvcihlLmF1dGhvckluZGV4KSYmbFtlLmF1dGhvckluZGV4XSsrfWEubGFzdE1lc3NhZ2VUaW1lc3RhbXA9cjtjb25zdCB1PWZbZS5hdXRob3JJbmRleF07LTEhPT11JiYoYS5hY3RpdmVQYXJ0aWNpcGFudFt1XT0hMCl9KSxlLHQse2NoYW5uZWxzOiEwLGF1dGhvcnM6ITEsdGltZTohMH0pO2NvbnN0IHA9W107Zm9yKGxldCBlPTA7ZTxjO2UrKylmb3IobGV0IHQ9ZSsxO3Q8Yzt0Kyspe2NvbnN0IG49ZFtlKmMtZSooZSsxKS8yK3RdO24+MCYmcC5wdXNoKHtmOmhbZV0uaW5kZXgsdDpoW3RdLmluZGV4LGM6bn0pfXJldHVybnthdXRob3JDb252ZXJzYXRpb25zOmwsY2hhbm5lbENvbnZlcnNhdGlvbnM6byxub2RlczpwfX19fSw4MTkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJpbnRlcmFjdGlvbi9jb252ZXJzYXRpb24tZHVyYXRpb24iLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2NvbnN0e2RhdGVLZXlzOmF9PW4udGltZUtleXMsaT0yODgqZS50aW1lLm51bURheXMsbz1uZXcgQXJyYXkoaSkuZmlsbCgwKTtsZXQgbCx1OygwLHMuZmlsdGVyTWVzc2FnZXMpKChlPT57b1syODgqZS5kYXlJbmRleCtNYXRoLmZsb29yKGUuc2Vjb25kT2ZEYXkvMzAwKV0rK30pLGUsdCk7bGV0IGg9LTEsZj0tMTtmb3IobGV0IGU9MDtlPGk7ZSsrKWlmKG9bZV0+MCl7aWYoLTEhPT1oKXtjb25zdCB0PTUqKGUtaCk7KHZvaWQgMD09PWx8fHQ+bC5taW51dGVzKSYmKGw9e21pbnV0ZXM6dCxzdGFydDp7a2V5OmFbTWF0aC5mbG9vcihoLzI4OCldLHNlY29uZE9mRGF5OmglMjg4KjMwMH0sZW5kOntrZXk6YVtNYXRoLmZsb29yKGUvMjg4KV0sc2Vjb25kT2ZEYXk6ZSUyODgqMzAwfX0pfWg9ZSwtMT09PWYmJihmPWUpO2NvbnN0IHQ9NSooZS1mKzEpOyh2b2lkIDA9PT11fHx0PnUubWludXRlcykmJih1PXttaW51dGVzOnQsc3RhcnQ6e2tleTphW01hdGguZmxvb3IoZi8yODgpXSxzZWNvbmRPZkRheTpmJTI4OCozMDB9LGVuZDp7a2V5OmFbTWF0aC5mbG9vcihlLzI4OCldLHNlY29uZE9mRGF5OmUlMjg4KjMwMH19KX1lbHNlIGY9LTE7cmV0dXJue2xvbmdlc3RUaW1lV2l0aG91dE1lc3NhZ2VzOmwsbG9uZ2VzdEFjdGl2ZUNvbnZlcnNhdGlvbjp1fX19fSw4ODA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6ImludGVyYWN0aW9uL3N0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPW5ldyBBcnJheShlLm1lbnRpb25zLmxlbmd0aCkuZmlsbCgwKSxpPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApO2xldCBvPVtdLGw9W107cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUubWVudGlvbnM7aWYodClmb3IoY29uc3QgZSBvZiB0KWFbZVswXV0rPWVbMV07Y29uc3Qgbj1lLnJlYWN0aW9ucztpZihuKXtsZXQgdD0wLHM9MDtmb3IoY29uc3QgZSBvZiBuKXQrPWVbMV0scz1NYXRoLm1heChzLGVbMV0pO3Q+MCYmKG8ubGVuZ3RoPDN8fHQ+b1tvLmxlbmd0aC0xXVsxXSkmJihvLnB1c2goW2UsdF0pLG89by5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSkuc2xpY2UoMCwzKSkscz4wJiYobC5sZW5ndGg8M3x8cz5sW2wubGVuZ3RoLTFdWzFdKSYmKGwucHVzaChbZSxzXSksbD1sLnNvcnQoKChlLHQpPT50WzFdLWVbMV0pKS5zbGljZSgwLDMpKX1lLmhhc1JlcGx5JiYoaVtlLmF1dGhvckluZGV4XSs9MSl9KSxlLHQpLHttZW50aW9uc0NvdW50OmEsYXV0aG9yc1JlcGx5Q291bnQ6aSx0b3BUb3RhbFJlYWN0aW9uczpvLm1hcCgoKFtlLHRdKT0+ZS5nZXRGdWxsTWVzc2FnZSgpKSksdG9wU2luZ2xlUmVhY3Rpb25zOmwubWFwKCgoW2UsdF0pPT5lLmdldEZ1bGxNZXNzYWdlKCkpKX19fX0sNDc1NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KTt0LmRlZmF1bHQ9e2tleToibGFuZ3VhZ2Uvc3RhdHMiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIiwidGltZSJdLGZuOihlLHQsbixyKT0+e2xldCBhPTAsaT0wO2NvbnN0IG89bmV3IEFycmF5KDI1NSkuZmlsbCgwKSxsPW5ldyBBcnJheShlLndvcmRzLmxlbmd0aCkuZmlsbCgwKSx1PW5ldyBTZXQ7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2b2lkIDAhPT1lLmxhbmdJbmRleCYmKGErKyxvW2UubGFuZ0luZGV4XSsrKTtjb25zdCB0PWUud29yZHM7aWYodClmb3IoY29uc3QgZSBvZiB0KWxbZVswXV0rPWVbMV0saSs9ZVsxXSx1LmFkZChlWzBdKX0pLGUsdCk7Y29uc3QgaD1NYXRoLm1heCgxLC4wMyphKSxmPW8ubWFwKCgoZSx0KT0+KHtpbmRleDp0LHZhbHVlOmV9KSkpLGM9Zi5maWx0ZXIoKGU9PmUudmFsdWU8aCkpLnJlZHVjZSgoKGUsdCk9PmUrdC52YWx1ZSksMCksZD1mLmZpbHRlcigoZT0+ZS52YWx1ZT49aCkpO3JldHVybiBkLnB1c2goe2luZGV4OjAsdmFsdWU6Y30pLGQuc29ydCgoKGUsdCk9PnQudmFsdWUtZS52YWx1ZSkpLHtsYW5ndWFnZXM6ZCx0b3RhbFdvcmRzOmksdW5pcXVlV29yZHM6dS5zaXplLGF2Z1dvcmRzUGVyTWVzc2FnZTppL2Esd29yZHNDb3VudDpsfX19fSw2NTEwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcz1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJsYW5ndWFnZS93b3JkLXN0YXRzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyIsInRpbWUiXSxmbjooZSx0LG4scik9Pntjb25zdCBhPXtwZXJNb250aDpbXSxjb3VudHM6e2F1dGhvcnM6bmV3IEFycmF5KGUuYXV0aG9ycy5sZW5ndGgpLmZpbGwoMCksY2hhbm5lbHM6bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApfX0se2tleVRvVGltZXN0YW1wOml9PW4se2RhdGVUb01vbnRoSW5kZXg6b309bi50aW1lS2V5cztmb3IoY29uc3QgZSBvZiBpLm1vbnRoKWEucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4gci53b3JkSW5kZXg8MHx8KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pnt2YXIgdDtpZighZS5oYXNXb3JkcylyZXR1cm47Y29uc3Qgbj1udWxsPT09KHQ9ZS53b3Jkcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmluZCgoKFtlLHRdKT0+ZT09PXIud29yZEluZGV4KSk7aWYodm9pZCAwIT09bil7Y29uc3QgdD1uWzFdO2EucGVyTW9udGhbb1tlLmRheUluZGV4XV0udis9dCxhLmNvdW50cy5hdXRob3JzW2UuYXV0aG9ySW5kZXhdKz10LGEuY291bnRzLmNoYW5uZWxzW2UuY2hhbm5lbEluZGV4XSs9dH19KSxlLHQse2F1dGhvcnM6ITAsY2hhbm5lbHM6ITAsdGltZTohMH0pLGF9fX0sNTc4MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big3MTI0KSxyPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL2VkaXRlZCIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCk9Pntjb25zdCBuPW5ldyBBcnJheShlLmF1dGhvcnMubGVuZ3RoKS5maWxsKDApLGE9bmV3IEFycmF5KGUuY2hhbm5lbHMubGVuZ3RoKS5maWxsKDApO2xldCBpPTA7Y29uc3Qgbz1uZXcgVWludDMyQXJyYXkoZS5udW1NZXNzYWdlcykuZmlsbCg0Mjk0OTY3MjgwKTtsZXQgbD0wO3JldHVybigwLHIuZmlsdGVyTWVzc2FnZXMpKChlPT57aWYoZS5oYXNFZGl0cyl7bltlLmF1dGhvckluZGV4XSsrLGFbZS5jaGFubmVsSW5kZXhdKys7Y29uc3QgdD1lLmVkaXRlZEFmdGVyO29bbCsrXT10LHQ8PTEmJmkrK319KSxlLHQpLHtjb3VudDp7YXV0aG9yczpuLGNoYW5uZWxzOmF9LGVkaXRlZEluTGVzc1RoYW4xU2Vjb25kOmksZWRpdFRpbWVEaXN0cmlidXRpb246KDAscy5jb21wdXRlVmFyaWFibGVEaXN0cmlidXRpb24pKG8sbCl9fX19LDc3MTE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6Im1lc3NhZ2VzL3Blci1wZXJpb2QiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuKT0+e2NvbnN0IHI9e3BlckRheTpbXSxwZXJXZWVrOltdLHBlck1vbnRoOltdfSx7a2V5VG9UaW1lc3RhbXA6YX09bix7ZGF0ZVRvV2Vla0luZGV4OmksZGF0ZVRvTW9udGhJbmRleDpvfT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGEuZGF0ZSlyLnBlckRheS5wdXNoKHt0czplLHY6MH0pO2Zvcihjb25zdCBlIG9mIGEud2VlaylyLnBlcldlZWsucHVzaCh7dHM6ZSx2OjB9KTtmb3IoY29uc3QgZSBvZiBhLm1vbnRoKXIucGVyTW9udGgucHVzaCh7dHM6ZSx2OjB9KTtyZXR1cm4oMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e3IucGVyRGF5W2UuZGF5SW5kZXhdLnYrKyxyLnBlcldlZWtbaVtlLmRheUluZGV4XV0udisrLHIucGVyTW9udGhbb1tlLmRheUluZGV4XV0udisrfSksZSx0LHthdXRob3JzOiEwLGNoYW5uZWxzOiEwLHRpbWU6ITF9KSxyfX19LDg3NTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oMzI4NCkscj1uKDg2MTUpO3QuZGVmYXVsdD17a2V5OiJtZXNzYWdlcy9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7ZGF0ZUtleXM6aSx3ZWVrS2V5czpvLG1vbnRoS2V5czpsLHllYXJLZXlzOnUsZGF0ZVRvV2Vla0luZGV4OmgsZGF0ZVRvTW9udGhJbmRleDpmLGRhdGVUb1llYXJJbmRleDpjfT1uLnRpbWVLZXlzO2xldCBkPTAsbT0wLHA9MCxnPTA7Y29uc3QgeT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgwKSx2PW5ldyBBcnJheShlLmNoYW5uZWxzLmxlbmd0aCkuZmlsbCgwKSxiPXtbcy5BdHRhY2htZW50VHlwZS5JbWFnZV06MCxbcy5BdHRhY2htZW50VHlwZS5JbWFnZUFuaW1hdGVkXTowLFtzLkF0dGFjaG1lbnRUeXBlLlZpZGVvXTowLFtzLkF0dGFjaG1lbnRUeXBlLlN0aWNrZXJdOjAsW3MuQXR0YWNobWVudFR5cGUuQXVkaW9dOjAsW3MuQXR0YWNobWVudFR5cGUuRG9jdW1lbnRdOjAsW3MuQXR0YWNobWVudFR5cGUuT3RoZXJdOjB9LHg9bmV3IEFycmF5KDI0KmUudGltZS5udW1EYXlzKS5maWxsKDApLHc9bmV3IEFycmF5KGUudGltZS5udW1EYXlzKS5maWxsKDApLEk9bmV3IEFycmF5KGUudGltZS5udW1Nb250aHMpLmZpbGwoMCksTT1uZXcgQXJyYXkoZS50aW1lLm51bVllYXJzKS5maWxsKDApLGs9bmV3IEFycmF5KDE2OCkuZmlsbCgwKTsoMCxyLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2QrKyxlLmhhc0VkaXRzJiZtKyssZS5oYXNEb21haW5zJiZnKyssdm9pZCAwIT09ZS5sYW5nSW5kZXgmJnArKyx5W2UuYXV0aG9ySW5kZXhdKyssdltlLmNoYW5uZWxJbmRleF0rKyx4WzI0KmUuZGF5SW5kZXgrTWF0aC5mbG9vcihlLnNlY29uZE9mRGF5LzM2MDApXSsrLHdbZS5kYXlJbmRleF0rKyxJW2ZbZS5kYXlJbmRleF1dKyssTVtjW2UuZGF5SW5kZXhdXSsrO2NvbnN0IHQ9bi5kYXlPZldlZWtbZS5kYXlJbmRleF07a1syNCp0K01hdGguZmxvb3IoZS5zZWNvbmRPZkRheS8zNjAwKV0rKztjb25zdCBzPWUuYXR0YWNobWVudHM7aWYocylmb3IoY29uc3QgZSBvZiBzKWJbZVswXV0rPWVbMV19KSxlLHQpO2NvbnN0IEQ9ay5tYXAoKChlLHQpPT4oe3ZhbHVlOmUsaG91cjp0JTI0KyJocyIsd2Vla2RheTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdW01hdGguZmxvb3IodC8yNCldfSkpKSxBPShlLHQpPT57bGV0IG49MCxzPS0xO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSxzPXQpO3JldHVybnttZXNzYWdlczpuLGF0Oi0xPT09cz92b2lkIDA6dChzKX19O3JldHVybnt0b3RhbDpkLGVkaXRlZDptLG51bUFjdGl2ZURheXM6dC5udW1BY3RpdmVEYXlzLHdpdGhBdHRhY2htZW50c0NvdW50OmIsd2l0aFRleHQ6cCx3aXRoTGlua3M6Zyxjb3VudHM6e2F1dGhvcnM6eSxjaGFubmVsczp2fSx3ZWVrZGF5SG91ckFjdGl2aXR5OkQsbW9zdEFjdGl2ZTp7aG91cjpBKHgsKGU9Pih7a2V5OmlbTWF0aC5mbG9vcihlLzI0KV0sc2Vjb25kT2ZEYXk6ZSUyNCozNjAwfSkpKSxkYXk6QSh3LChlPT4oe2tleTppW2VdfSkpKSxtb250aDpBKEksKGU9Pih7a2V5OmxbZV19KSkpLHllYXI6QShNLChlPT4oe2tleTp1W2VdfSkpKX19fX19LDUwMDU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9wZXItcGVyaW9kIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixyKT0+e2NvbnN0IGE9e3Bvc2l0aXZlTWVzc2FnZXM6MCxuZWdhdGl2ZU1lc3NhZ2VzOjAsbmV1dHJhbE1lc3NhZ2VzOjAscGVyTW9udGg6W10scGVyV2VlazpbXX0se2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLHdlZWtLZXlzOmwsZGF0ZVRvTW9udGhJbmRleDp1LGRhdGVUb1dlZWtJbmRleDpofT1uLnRpbWVLZXlzO2Zvcihjb25zdCBlIG9mIGkubW9udGgpYS5wZXJNb250aC5wdXNoKHt0OmUscDowLG46MCx6OjAsZGlmZlA6MCxkaWZmTjowLHBlcmNQOjAscGVyY046MH0pO2Zvcihjb25zdCBlIG9mIGkud2VlaylhLnBlcldlZWsucHVzaCh7dDplLHA6MCxuOjAsejowLGRpZmZQOjAsZGlmZk46MCxwZXJjUDowLHBlcmNOOjB9KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2NvbnN0IHQ9ZS5zZW50aW1lbnQ7dm9pZCAwIT09dCYmKDA9PT10PyhhLm5ldXRyYWxNZXNzYWdlcysrLGEucGVyTW9udGhbdVtlLmRheUluZGV4XV0ueis9MSxhLnBlcldlZWtbaFtlLmRheUluZGV4XV0ueis9MSk6dD4wPyhhLnBvc2l0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLnArPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLnArPTEpOihhLm5lZ2F0aXZlTWVzc2FnZXMrKyxhLnBlck1vbnRoW3VbZS5kYXlJbmRleF1dLm4tPTEsYS5wZXJXZWVrW2hbZS5kYXlJbmRleF1dLm4tPTEpKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgZj1lPT57Y29uc3QgdD1NYXRoLmFicyhlLnApLG49TWF0aC5hYnMoZS5uKSxzPXQrbitlLnoscj10LW47ZS5kaWZmUD1NYXRoLm1heCgwLHIpLGUuZGlmZk49TWF0aC5taW4oMCxyKSxzPjAmJihlLnBlcmNQPXQvcyoxMDAsZS5wZXJjTj0tbi9zKjEwMCl9O3JldHVybiBhLnBlcldlZWsuZm9yRWFjaChmKSxhLnBlck1vbnRoLmZvckVhY2goZiksYX19fSw5OTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSk7dC5kZWZhdWx0PXtrZXk6InNlbnRpbWVudC9zdGF0cyIsdHJpZ2dlcnM6WyJhdXRob3JzIiwiY2hhbm5lbHMiLCJ0aW1lIl0sZm46KGUsdCxuLHIpPT57Y29uc3QgYT17cG9zaXRpdmVNZXNzYWdlczowLG5lZ2F0aXZlTWVzc2FnZXM6MCxuZXV0cmFsTWVzc2FnZXM6MH07cmV0dXJuKDAscy5maWx0ZXJNZXNzYWdlcykoKGU9Pntjb25zdCB0PWUuc2VudGltZW50O3ZvaWQgMCE9PXQmJigwPT09dD9hLm5ldXRyYWxNZXNzYWdlcysrOnQ+MD9hLnBvc2l0aXZlTWVzc2FnZXMrKzphLm5lZ2F0aXZlTWVzc2FnZXMrKyl9KSxlLHQpLGF9fX0sNjU4NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IHM9big4NjE1KSxyPW4oMTE0Nik7dC5kZWZhdWx0PXtrZXk6InRpbWVsaW5lL2FjdGl2ZS1hdXRob3JzIix0cmlnZ2VyczpbImF1dGhvcnMiLCJjaGFubmVscyJdLGZuOihlLHQsbixhKT0+e2NvbnN0e2tleVRvVGltZXN0YW1wOml9PW4se21vbnRoS2V5czpvLGRhdGVUb01vbnRoSW5kZXg6bH09bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiBvKWEucHVzaChuZXcgU2V0KTsoMCxzLmZpbHRlck1lc3NhZ2VzKSgoZT0+e2UuZ3VpbGRJbmRleCE9PW4uZ3VpbGRJbmRleCYmZS5jaGFubmVsSW5kZXghPT1uLmNoYW5uZWxJbmRleHx8KGFbbFtlLmRheUluZGV4XV0uYWRkKGUuYXV0aG9ySW5kZXgpLHI9ITApfSksZSx0LHtjaGFubmVsczohMCxhdXRob3JzOiEwLHRpbWU6ITF9KTtjb25zdCB1PVtdO2lmKHIpZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoKHt0czppLm1vbnRoW2VdLHY6YVtlXS5zaXplfSk7cmV0dXJuIHV9KSl9fX19LDkyNjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBzPW4oODYxNSkscj1uKDExNDYpO3QuZGVmYXVsdD17a2V5OiJ0aW1lbGluZS9ncm93dGgiLHRyaWdnZXJzOlsiYXV0aG9ycyIsImNoYW5uZWxzIl0sZm46KGUsdCxuLGEpPT57Y29uc3R7a2V5VG9UaW1lc3RhbXA6aX09bix7ZGF0ZUtleXM6b309bi50aW1lS2V5cztyZXR1cm57cGVyU2VyaWVzUGVyTW9udGg6KDAsci5nZW5lcmF0ZVNlcmllcykoZSkubWFwKChuPT57bGV0IHI9ITE7Y29uc3QgYT1uZXcgQXJyYXkoZS5hdXRob3JzLmxlbmd0aCkuZmlsbCgtMSk7KDAscy5maWx0ZXJNZXNzYWdlcykoKGU9PntlLmd1aWxkSW5kZXghPT1uLmd1aWxkSW5kZXgmJmUuY2hhbm5lbEluZGV4IT09bi5jaGFubmVsSW5kZXh8fCgoLTE9PT1hW2UuYXV0aG9ySW5kZXhdfHxlLmRheUluZGV4PGFbZS5hdXRob3JJbmRleF0pJiYoYVtlLmF1dGhvckluZGV4XT1lLmRheUluZGV4KSxyPSEwKX0pLGUsdCx7Y2hhbm5lbHM6ITAsYXV0aG9yczohMCx0aW1lOiExfSk7Y29uc3QgbD1uZXcgQXJyYXkoZS50aW1lLm51bURheXMpLmZpbGwoMCk7Zm9yKGNvbnN0IGUgb2YgYSktMSE9PWUmJmxbZV0rKztjb25zdCB1PVtdO2lmKHIpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLnRpbWUubnVtRGF5cztuKyspdCs9bFtuXSx1LnB1c2goe3RzOmkuZGF0ZVtuXSx2OnR9KTt1LnB1c2goe3RzOmkuZGF0ZVtvLmxlbmd0aC0xXSx2OnR9KX1yZXR1cm4gdX0pKX19fX0sMTE0NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlU2VyaWVzPXZvaWQgMCx0LmdlbmVyYXRlU2VyaWVzPWU9PlsuLi5lLmd1aWxkcy5tYXAoKChlLHQpPT4oe2d1aWxkOmUsZ3VpbGRJbmRleDp0fSkpKS5maWx0ZXIoKCh7Z3VpbGRJbmRleDp0fSk9PmUuY2hhbm5lbHMuc29tZSgoZT0+ZS5ndWlsZEluZGV4PT09dCYmInRleHQiPT09ZS50eXBlKSkpKS5tYXAoKCh7Z3VpbGQ6ZSxndWlsZEluZGV4OnR9KT0+KHt0aXRsZTplLm5hbWUsZ3VpbGRJbmRleDp0fSkpKSwuLi5lLmNoYW5uZWxzLm1hcCgoKGUsdCk9Pih7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSkpKS5maWx0ZXIoKCh7Y2hhbm5lbDplfSk9PiJncm91cCI9PT1lLnR5cGUpKS5tYXAoKCh7Y2hhbm5lbDplLGNoYW5uZWxJbmRleDp0fSk9Pih7dGl0bGU6ZS5uYW1lLGNoYW5uZWxJbmRleDp0fSkpKV19LDg4MDU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iYXNlOTFkZWNvZGU9dC5iYXNlOTFlbmNvZGU9dm9pZCAwO2NvbnN0IG49J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjstPT4/QFtdXl9ge3x9fiInLnNwbGl0KCIiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpLHM9bi5yZWR1Y2UoKChlLHQsbik9PihlW3RdPW4sZSkpLG5ldyBVaW50OEFycmF5KDI1NikpO3QuYmFzZTkxZW5jb2RlPWU9Pntjb25zdCB0PWUubGVuZ3RoO2xldCBzPTAscj0wLGE9MCxpPTA7Zm9yKDtzPHQ7KXtpZihhfD1lW3NdPDxyLHIrPTgscj4xMyl7bGV0IGU9ODE5MSZhO2U+ODg/KGE+Pj0xMyxyLT0xMyk6KGU9MTYzODMmYSxhPj49MTQsci09MTQpLGkrPTJ9cysrfXImJihpKyssKHI+N3x8YT45MCkmJmkrKyk7Y29uc3Qgbz1uZXcgVWludDhBcnJheSgxMitpKTtsZXQgbD0xMjtzPTAscj0wLGE9MDtjb25zdCB1PXQudG9TdHJpbmcoKS5wYWRTdGFydCgxMiwiMCIpO2ZvcihvLnNldCgobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUodSksMCk7czx0Oyl7aWYoYXw9ZVtzXTw8cixyKz04LHI+MTMpe2xldCBlPTgxOTEmYTtlPjg4PyhhPj49MTMsci09MTMpOihlPTE2MzgzJmEsYT4+PTE0LHItPTE0KSxvW2wrK109bltlJTkxXSxvW2wrK109bltlLzkxfDBdfXMrK31yZXR1cm4gciYmKG9bbCsrXT1uW2ElOTFdLChyPjd8fGE+OTApJiYob1tsKytdPW5bYS85MXwwXSkpLG5ldyBUZXh0RGVjb2RlcigiaXNvLTg4NTktMTAiKS5kZWNvZGUobyl9LHQuYmFzZTkxZGVjb2RlPWU9PntsZXQgdD0xMixuPTAscj0wLGE9MCxpPS0xO2NvbnN0IG89ZS5sZW5ndGgsbD1wYXJzZUludChlLnNsaWNlKDAsMTIpKSx1PW5ldyBVaW50OEFycmF5KGwpO2Zvcig7dDxvOyl7Y29uc3Qgbz1zW2VbdF0uY2hhckNvZGVBdCgwKV07aWYoaTwwKWk9bztlbHNle2krPTkxKm8scnw9aTw8YSxhKz0oODE5MSZpKT44OD8xMzoxNDtkb3t1W24rK109MjU1JnIscj4+PTgsYS09OH13aGlsZShhPjcpO2k9LTF9dCsrfXJldHVybiBpPi0xJiYodVtuKytdPTI1NSYocnxpPDxhKSksdX19LDE4MTM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29tcHJlc3NEYXRhYmFzZT10LmNvbXByZXNzRGF0YWJhc2U9dm9pZCAwO2NvbnN0IHM9big4MDgzKSxyPW4oODgwNSk7dC5jb21wcmVzc0RhdGFiYXNlPWU9PntsZXQgdD1lLm1lc3NhZ2VzLG49SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlczp2b2lkIDB9KSksYT0obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUobik7bj12b2lkIDA7bGV0IGk9bmV3IFVpbnQ4QXJyYXkoOCthLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKSxvPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcik7by5zZXRVaW50MzIoMCxhLmxlbmd0aCksby5zZXRVaW50MzIoNCx0LmJ5dGVMZW5ndGgpLGkuc2V0KGEsOCksaS5zZXQodCw4K2EubGVuZ3RoKSxhPXZvaWQgMDtsZXQgbD0oMCxzLmd6aXBTeW5jKShpKTtpPXZvaWQgMDtsZXQgdT0oMCxyLmJhc2U5MWVuY29kZSkobCk7cmV0dXJuIGw9dm9pZCAwLHV9LHQuZGVjb21wcmVzc0RhdGFiYXNlPWU9Pntjb25zdCB0PSgwLHIuYmFzZTkxZGVjb2RlKShlKSxuPSgwLHMuZ3VuemlwU3luYykodCksYT1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGk9YS5nZXRVaW50MzIoMCksbz1hLmdldFVpbnQzMig0KSxsPW4uc2xpY2UoOCw4K2kpLHU9bi5zbGljZSg4K2ksOCtpK28pLGg9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGwpLGY9SlNPTi5wYXJzZShoKTtyZXR1cm4gZi5tZXNzYWdlcz11LGZ9fSwzODY2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWF0Y2hGb3JtYXQ9dC5zdHJpcERpYWNyaXRpY3NBbmRTeW1ib2xzPXQubm9ybWFsaXplVGV4dD12b2lkIDA7Y29uc3Qgbj0vXHNccysvZyxzPS9bXHV7RkUwRn1cdXtGRTBFfV0vZ3U7dC5ub3JtYWxpemVUZXh0PWU9PmUubm9ybWFsaXplKCJORktDIikucmVwbGFjZShuLCIgIikucmVwbGFjZShzLCIiKS50cmltKCk7Y29uc3Qgcj1be2Jhc2U6IkEiLGxldHRlcnM6IkHikrbvvKHDgMOBw4LhuqbhuqThuqrhuqjDg8SAxILhurDhuq7hurThurLIpsegw4THnuG6osOFx7rHjciAyILhuqDhuqzhurbhuIDEhMi64rGv8J2QgCJ9LHtiYXNlOiJBQSIsbGV0dGVyczoi6pyyIn0se2Jhc2U6IkFFIixsZXR0ZXJzOiLDhse8x6IifSx7YmFzZToiQU8iLGxldHRlcnM6IuqctCJ9LHtiYXNlOiJBVSIsbGV0dGVyczoi6py2In0se2Jhc2U6IkFWIixsZXR0ZXJzOiLqnLjqnLoifSx7YmFzZToiQVkiLGxldHRlcnM6IuqcvCJ9LHtiYXNlOiJCIixsZXR0ZXJzOiJC4pK377yi4biC4biE4biGyYPGgsaB8J2QgSJ9LHtiYXNlOiJDIixsZXR0ZXJzOiJD4pK477yjxIbEiMSKxIzDh+G4iMaHyLvqnL7wnZCCIn0se2Jhc2U6IkQiLGxldHRlcnM6IkTikrnvvKThuIrEjuG4jOG4kOG4kuG4jsSQxovGisaJ6p258J2QgyJ9LHtiYXNlOiJEWiIsbGV0dGVyczoix7HHhCJ9LHtiYXNlOiJEeiIsbGV0dGVyczoix7LHhSJ9LHtiYXNlOiJFIixsZXR0ZXJzOiJF4pK677ylw4jDicOK4buA4bq+4buE4buC4bq8xJLhuJThuJbElMSWw4vhurrEmsiEyIbhurjhu4bIqOG4nMSY4biY4biaxpDGjvCdkIQifSx7YmFzZToiRiIsbGV0dGVyczoiRuKSu++8puG4nsaR6p278J2QhSJ9LHtiYXNlOiJHIixsZXR0ZXJzOiJH4pK877ynx7TEnOG4oMSexKDHpsSix6TGk+qeoOqdveqdvvCdkIYifSx7YmFzZToiSCIsbGV0dGVyczoiSOKSve+8qMSk4bii4bimyJ7huKThuKjhuKrEpuKxp+KxteqejfCdkIcifSx7YmFzZToiSSIsbGV0dGVyczoiSeKSvu+8qcOMw43DjsSoxKrErMSww4/huK7hu4jHj8iIyIrhu4rEruG4rMaX8J2QiCJ9LHtiYXNlOiJKIixsZXR0ZXJzOiJK4pK/77yqxLTJiPCdkIkifSx7YmFzZToiSyIsbGV0dGVyczoiS+KTgO+8q+G4sMeo4biyxLbhuLTGmOKxqeqdgOqdguqdhOqeovCdkIoifSx7YmFzZToiTCIsbGV0dGVyczoiTOKTge+8rMS/xLnEveG4tuG4uMS74bi84bi6xYHIveKxouKxoOqdiOqdhuqegPCdkIsifSx7YmFzZToiTEoiLGxldHRlcnM6IseHIn0se2Jhc2U6IkxqIixsZXR0ZXJzOiLHiCJ9LHtiYXNlOiJNIixsZXR0ZXJzOiJN4pOC77yt4bi+4bmA4bmC4rGuxpzwnZCMIn0se2Jhc2U6Ik4iLGxldHRlcnM6Ik7ik4PvvK7HuMWDw5HhuYTFh+G5hsWF4bmK4bmIyKDGneqekOqepPCdkI0ifSx7YmFzZToiTkoiLGxldHRlcnM6IseKIn0se2Jhc2U6Ik5qIixsZXR0ZXJzOiLHiyJ9LHtiYXNlOiJPIixsZXR0ZXJzOiJP4pOE77yvw5LDk8OU4buS4buQ4buW4buUw5XhuYzIrOG5jsWM4bmQ4bmSxY7Irsiww5bIquG7jsWQx5HIjMiOxqDhu5zhu5rhu6Dhu57hu6Lhu4zhu5jHqsesw5jHvsaGxp/qnYrqnYzwnZCOIn0se2Jhc2U6Ik9JIixsZXR0ZXJzOiLGoiJ9LHtiYXNlOiJPTyIsbGV0dGVyczoi6p2OIn0se2Jhc2U6Ik9VIixsZXR0ZXJzOiLIoiJ9LHtiYXNlOiJQIixsZXR0ZXJzOiJQ4pOF77yw4bmU4bmWxqTisaPqnZDqnZLqnZTwnZCPIn0se2Jhc2U6IlEiLGxldHRlcnM6IlHik4bvvLHqnZbqnZjJivCdkJAifSx7YmFzZToiUiIsbGV0dGVyczoiUuKTh++8ssWU4bmYxZjIkMiS4bma4bmcxZbhuZ7JjOKxpOqdmuqepuqegvCdkJEifSx7YmFzZToiUyIsbGV0dGVyczoiU+KTiO+8s+G6nsWa4bmkxZzhuaDFoOG5puG5ouG5qMiYxZ7isb7qnqjqnoTwnZCSIn0se2Jhc2U6IlQiLGxldHRlcnM6IlTik4nvvLThuarFpOG5rMiaxaLhubDhua7Fpsasxq7IvuqehvCdkJMifSx7YmFzZToiVFoiLGxldHRlcnM6IuqcqCJ9LHtiYXNlOiJVIixsZXR0ZXJzOiJV4pOK77y1w5nDmsObxajhubjFquG5usWsw5zHm8eXx5XHmeG7psWuxbDHk8iUyJbGr+G7quG7qOG7ruG7rOG7sOG7pOG5ssWy4bm24bm0yYTwnZCUIn0se2Jhc2U6IlYiLGxldHRlcnM6Ilbik4vvvLbhubzhub7GsuqdnsmF8J2QlSJ9LHtiYXNlOiJWWSIsbGV0dGVyczoi6p2gIn0se2Jhc2U6IlciLGxldHRlcnM6Ilfik4zvvLfhuoDhuoLFtOG6huG6hOG6iOKxsvCdkJYifSx7YmFzZToiWCIsbGV0dGVyczoiWOKTje+8uOG6iuG6jPCdkJcifSx7YmFzZToiWSIsbGV0dGVyczoiWeKTju+8ueG7ssOdxbbhu7jIsuG6jsW44bu24bu0xrPJjuG7vvCdkJgifSx7YmFzZToiWiIsbGV0dGVyczoiWuKTj++8usW54bqQxbvFveG6kuG6lMa1yKTisb/isavqnaLwnZCZIn0se2Jhc2U6ImEiLGxldHRlcnM6ImHik5DvvYHhuprDoMOhw6LhuqfhuqXhuqvhuqnDo8SBxIPhurHhuq/hurXhurPIp8ehw6THn+G6o8Olx7vHjsiByIPhuqHhuq3hurfhuIHEheKxpcmQ8J2QmiJ9LHtiYXNlOiJhYSIsbGV0dGVyczoi6pyzIn0se2Jhc2U6ImFlIixsZXR0ZXJzOiLDpse9x6MifSx7YmFzZToiYW8iLGxldHRlcnM6IuqctSJ9LHtiYXNlOiJhdSIsbGV0dGVyczoi6py3In0se2Jhc2U6ImF2IixsZXR0ZXJzOiLqnLnqnLsifSx7YmFzZToiYXkiLGxldHRlcnM6IuqcvSJ9LHtiYXNlOiJiIixsZXR0ZXJzOiJi4pOR772C4biD4biF4biHxoDGg8mT8J2QmyJ9LHtiYXNlOiJjIixsZXR0ZXJzOiJj4pOS772DxIfEicSLxI3Dp+G4icaIyLzqnL/ihoTwnZCcIn0se2Jhc2U6ImQiLGxldHRlcnM6ImTik5PvvYThuIvEj+G4jeG4keG4k+G4j8SRxozJlsmX6p268J2QnSJ9LHtiYXNlOiJkeiIsbGV0dGVyczoix7PHhiJ9LHtiYXNlOiJlIixsZXR0ZXJzOiJl4pOU772Fw6jDqcOq4buB4bq/4buF4buD4bq9xJPhuJXhuJfElcSXw6vhurvEm8iFyIfhurnhu4fIqeG4ncSZ4biZ4bibyYfJm8ed8J2QniJ9LHtiYXNlOiJmIixsZXR0ZXJzOiJm4pOV772G4bifxpLqnbzwnZCfIn0se2Jhc2U6ImciLGxldHRlcnM6Imfik5bvvYfHtcSd4bihxJ/EocenxKPHpcmg6p6h4bW56p2/8J2QoCJ9LHtiYXNlOiJoIixsZXR0ZXJzOiJo4pOX772IxKXhuKPhuKfIn+G4peG4qeG4q+G6lsSn4rGo4rG2yaXwnZChIn0se2Jhc2U6Imh2IixsZXR0ZXJzOiLGlSJ9LHtiYXNlOiJpIixsZXR0ZXJzOiJp4pOY772Jw6zDrcOuxKnEq8Stw6/huK/hu4nHkMiJyIvhu4vEr+G4rcmoxLHwnZCiIn0se2Jhc2U6ImoiLGxldHRlcnM6Imrik5nvvYrEtcewyYnwnZCjIn0se2Jhc2U6ImsiLGxldHRlcnM6Imvik5rvvYvhuLHHqeG4s8S34bi1xpnisarqnYHqnYPqnYXqnqPwnZCkIn0se2Jhc2U6ImwiLGxldHRlcnM6Imzik5vvvYzFgMS6xL7huLfhuLnEvOG4veG4u8W/xYLGmsmr4rGh6p2J6p6B6p2H8J2QpSJ9LHtiYXNlOiJsaiIsbGV0dGVyczoix4kifSx7YmFzZToibSIsbGV0dGVyczoibeKTnO+9jeG4v+G5geG5g8mxya/wnZCmIn0se2Jhc2U6Im4iLGxldHRlcnM6Im7ik53vvY7HucWEw7HhuYXFiOG5h8WG4bmL4bmJxp7JssWJ6p6R6p6l8J2QpyJ9LHtiYXNlOiJuaiIsbGV0dGVyczoix4wifSx7YmFzZToibyIsbGV0dGVyczoib+KTnu+9j8Oyw7PDtOG7k+G7keG7l+G7lcO14bmNyK3huY/FjeG5keG5k8WPyK/IscO2yKvhu4/FkceSyI3Ij8ah4bud4bub4buh4buf4buj4buN4buZx6vHrcO4x7/JlOqdi+qdjcm18J2QqCJ9LHtiYXNlOiJvaSIsbGV0dGVyczoixqMifSx7YmFzZToib3UiLGxldHRlcnM6IsijIn0se2Jhc2U6Im9vIixsZXR0ZXJzOiLqnY8ifSx7YmFzZToicCIsbGV0dGVyczoicOKTn++9kOG5leG5l8al4bW96p2R6p2T6p2V8J2QqSJ9LHtiYXNlOiJxIixsZXR0ZXJzOiJx4pOg772RyYvqnZfqnZnwnZCqIn0se2Jhc2U6InIiLGxldHRlcnM6InLik6HvvZLFleG5mcWZyJHIk+G5m+G5ncWX4bmfyY3Jveqdm+qep+qeg/CdkKsifSx7YmFzZToicyIsbGV0dGVyczoic+KTou+9k8OfxZvhuaXFneG5ocWh4bmn4bmj4bmpyJnFn8i/6p6p6p6F4bqb8J2QrCJ9LHtiYXNlOiJ0IixsZXR0ZXJzOiJ04pOj772U4bmr4bqXxaXhua3Im8Wj4bmx4bmvxafGrcqI4rGm6p6H8J2QrSJ9LHtiYXNlOiJ0eiIsbGV0dGVyczoi6pypIn0se2Jhc2U6InUiLGxldHRlcnM6InXik6TvvZXDucO6w7vFqeG5ucWr4bm7xa3DvMecx5jHlsea4bunxa/FsceUyJXIl8aw4bur4bup4buv4but4bux4bul4bmzxbPhubfhubXKifCdkK4ifSx7YmFzZToidiIsbGV0dGVyczoiduKTpe+9luG5veG5v8qL6p2fyozwnZCvIn0se2Jhc2U6InZ5IixsZXR0ZXJzOiLqnaEifSx7YmFzZToidyIsbGV0dGVyczoid+KTpu+9l+G6geG6g8W14bqH4bqF4bqY4bqJ4rGz8J2QsCJ9LHtiYXNlOiJ4IixsZXR0ZXJzOiJ44pOn772Y4bqL4bqN8J2QsSJ9LHtiYXNlOiJ5IixsZXR0ZXJzOiJ54pOo772Z4buzw73Ft+G7uciz4bqPw7/hu7fhupnhu7XGtMmP4bu/8J2QsiJ9LHtiYXNlOiJ6IixsZXR0ZXJzOiJ64pOp772axbrhupHFvMW+4bqT4bqVxrbIpcmA4rGs6p2j8J2QsyJ9XSxhPW5ldyBSZWdFeHAoIlsiK3IubWFwKChlPT5lLmxldHRlcnMpKS5qb2luKCIiKSsiXSIsImd1IiksaT17fTtmb3IoY29uc3QgZSBvZiByKWZvcihjb25zdCB0IG9mIGUubGV0dGVycylpW3RdPWUuYmFzZTt0LnN0cmlwRGlhY3JpdGljc0FuZFN5bWJvbHM9ZT0+ZS5yZXBsYWNlKGEsKGU9PmlbZV0pKSx0Lm1hdGNoRm9ybWF0PWU9PigwLHQuc3RyaXBEaWFjcml0aWNzQW5kU3ltYm9scykoKDAsdC5ub3JtYWxpemVUZXh0KShlKSkudG9Mb2NhbGVMb3dlckNhc2UoKX0sMTE1ODooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpdFN0cmVhbT12b2lkIDAsdC5CaXRTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoZSl7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3Qgbm90IGJlIGEgdmlldyIpO2lmKGUuYnl0ZUxlbmd0aCU0IT0wKXRocm93IG5ldyBFcnJvcigiYnVmZmVyIG11c3QgYmUgYWxpZ25lZCB0byAzMmJpdHMiKX10aGlzLmJ1ZmZlcj1lP25ldyBVaW50MzJBcnJheShlKTpuZXcgVWludDMyQXJyYXkoMTAyNCksdGhpcy5vZmZzZXQ9MH1nZXQgYnVmZmVyOCgpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsMCw0Kk1hdGguY2VpbCh0aGlzLm9mZnNldC8zMikpfWdyb3coKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxLjUqdGhpcy5idWZmZXIubGVuZ3RoKTtlLnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9ZX1zZXRCaXRzKGUsdCl7Y29uc3Qgbj10aGlzLm9mZnNldDt0aGlzLm9mZnNldCs9ZSwobitlKS84PnRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtNCYmdGhpcy5ncm93KCk7Y29uc3Qgcz10aGlzLmJ1ZmZlcixyPTMyPT09ZT80Mjk0OTY3Mjk1OigxPDxlKS0xLGE9dCZyLGk9bj4+PjUsbz1uLShpPDw1KTtpZihvK2U+MzIpe2NvbnN0IHQ9ZS0oMzItbyk7c1tpXT1zW2ldJn4ocj4+PnQpfGE+Pj50LHNbaSsxXT1zW2krMV0mfihyPDwzMi10KXxhPDwzMi10fWVsc2V7Y29uc3QgdD0zMi1vLWU7c1tpXT1zW2ldJn4ocjw8dCl8YTw8dH19Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuYnVmZmVyLG49dGhpcy5vZmZzZXQ7dGhpcy5vZmZzZXQrPWU7Y29uc3Qgcz1uPj4+NSxyPW4tKHM8PDUpLGE9dFtzXSxpPXRbcysxXTtsZXQgbz0wO3JldHVybiBvPXIrZT4zMj8oYTw8cnxpPj4+MzItcik+Pj4zMi1lOmE8PHI+Pj4zMi1lLG8+Pj4wfXdyaXRlVmFySW50KGUsdD0zMil7aWYodDwxMCl0aGlzLnNldEJpdHModCxlKTtlbHNle2Zvcig7ZT4xMjc7KXRoaXMuc2V0Qml0cyg4LDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuc2V0Qml0cyg4LGUpfX1yZWFkVmFySW50KGU9MzIpe2lmKGU8MTApcmV0dXJuIHRoaXMuZ2V0Qml0cyhlKTtsZXQgdD0wLG49MCxzPTA7ZG97bj10aGlzLmdldEJpdHMoOCksdHw9KDEyNyZuKTw8cyxzKz03fXdoaWxlKDEyOCZuKTtyZXR1cm4gdH19fSwxNDI5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2tpcEluZGV4Q291bnRzPXQucmVhZEluZGV4Q291bnRzPXQud3JpdGVJbmRleENvdW50cz12b2lkIDAsdC53cml0ZUluZGV4Q291bnRzPShlLHQsbik9Pntjb25zdCBzPWUubGVuZ3RoO2xldCByPTAsYT0wO2ZvcihsZXQgdD0wO3Q8czt0Kyspe2NvbnN0IG49ZVt0XVsxXTtyKz1uLGE9TWF0aC5tYXgoYSxuKX1pZigxPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMCksdm9pZCB0LnNldEJpdHMobixlWzBdWzBdKTtpZigyPT09cilyZXR1cm4gdC5zZXRCaXRzKDIsMSksdm9pZCgxPT09ZS5sZW5ndGg/KHQuc2V0Qml0cyhuLGVbMF1bMF0pLHQuc2V0Qml0cyhuLGVbMF1bMF0pKToodC5zZXRCaXRzKG4sZVswXVswXSksdC5zZXRCaXRzKG4sZVsxXVswXSkpKTtjb25zdCBpPTMyLU1hdGguY2x6MzIoYSksbz1NYXRoLm1pbihyLDEwMjMpLGw9TWF0aC5taW4ocywxMjcpO2lmKDEwK24qbzwxMisobitpKSpsKXtlLnNvcnQoKChlLHQpPT5lWzBdLXRbMF0pKSx0LnNldEJpdHMoMiwyKSx0LnNldEJpdHMoMTAsbyk7bGV0IHI9MCxhPTA7Zm9yKGxldCBpPTA7aTxzO2krKylmb3IobGV0IHM9MDtzPGVbaV1bMV0mJnI8bztzKyspe2NvbnN0IHM9ZVtpXVswXS1hO3Quc2V0Qml0cyhuLHMpLGErPXMscisrfX1lbHNle3Quc2V0Qml0cygyLDMpLHQuc2V0Qml0cyg3LGwpLHQuc2V0Qml0cyg1LGktMSk7Zm9yKGxldCBzPTA7czxsO3MrKyl0LnNldEJpdHMobixlW3NdWzBdKSx0LnNldEJpdHMoaSxlW3NdWzFdKX19LHQucmVhZEluZGV4Q291bnRzPShlLHQpPT57Y29uc3Qgbj1bXSxzPWUuZ2V0Qml0cygyKTtpZigwPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSk7ZWxzZSBpZigxPT09cyluLnB1c2goW2UuZ2V0Qml0cyh0KSwxXSksbi5wdXNoKFtlLmdldEJpdHModCksMV0pO2Vsc2UgaWYoMj09PXMpe2NvbnN0IHM9ZS5nZXRCaXRzKDEwKTtsZXQgcj0tMTtmb3IobGV0IGE9MDthPHM7YSsrKXtjb25zdCBzPWUuZ2V0Qml0cyh0KTstMT09PXI/KG4ucHVzaChbcywxXSkscj1zKTowPT09cz9uW24ubGVuZ3RoLTFdWzFdKys6KG4ucHVzaChbcitzLDFdKSxyKz1zKX19ZWxzZXtjb25zdCBzPWUuZ2V0Qml0cyg3KSxyPWUuZ2V0Qml0cyg1KSsxO2ZvcihsZXQgYT0wO2E8czthKyspe2NvbnN0IHM9ZS5nZXRCaXRzKHQpLGE9ZS5nZXRCaXRzKHIpO24ucHVzaChbcyxhXSl9fXJldHVybiBufSx0LnNraXBJbmRleENvdW50cz0oZSx0KT0+e2NvbnN0IG49ZS5nZXRCaXRzKDIpO2lmKDA9PT1uKWUub2Zmc2V0Kz10O2Vsc2UgaWYoMT09PW4pZS5vZmZzZXQrPTIqdDtlbHNlIGlmKDI9PT1uKXtjb25zdCBuPWUuZ2V0Qml0cygxMCk7ZS5vZmZzZXQrPXQqbn1lbHNle2NvbnN0IG49ZS5nZXRCaXRzKDcpLHM9ZS5nZXRCaXRzKDUpKzE7ZS5vZmZzZXQrPSh0K3MpKm59fX0sNzIyMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVhZE1lc3NhZ2U9dC53cml0ZU1lc3NhZ2U9dC5EZWZhdWx0TWVzc2FnZUJpdENvbmZpZz10Lk1lc3NhZ2VGbGFncz12b2lkIDA7Y29uc3Qgcz1uKDE0MjkpO3ZhciByOyFmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlJlcGx5PTFdPSJSZXBseSIsZVtlLkVkaXRlZD0yXT0iRWRpdGVkIixlW2UuVGV4dD00XT0iVGV4dCIsZVtlLldvcmRzPThdPSJXb3JkcyIsZVtlLkVtb2ppcz0xNl09IkVtb2ppcyIsZVtlLkF0dGFjaG1lbnRzPTMyXT0iQXR0YWNobWVudHMiLGVbZS5SZWFjdGlvbnM9NjRdPSJSZWFjdGlvbnMiLGVbZS5NZW50aW9ucz0xMjhdPSJNZW50aW9ucyIsZVtlLkRvbWFpbnM9MjU2XT0iRG9tYWlucyJ9KHI9dC5NZXNzYWdlRmxhZ3N8fCh0Lk1lc3NhZ2VGbGFncz17fSkpLHQuRGVmYXVsdE1lc3NhZ2VCaXRDb25maWc9e2RheUJpdHM6MjEsYXV0aG9ySWR4Qml0czoyMSx3b3JkSWR4Qml0czoyMSxlbW9qaUlkeEJpdHM6MTgsbWVudGlvbnNJZHhCaXRzOjIwLGRvbWFpbnNJZHhCaXRzOjE2fSx0LndyaXRlTWVzc2FnZT0oZSx0LG4pPT57dmFyIGEsaSxvLGwsdSxoO3Quc2V0Qml0cyhuLmRheUJpdHMsZS5kYXlJbmRleCksdC5zZXRCaXRzKDE3LGUuc2Vjb25kT2ZEYXkpLHQuc2V0Qml0cyhuLmF1dGhvcklkeEJpdHMsZS5hdXRob3JJbmRleCk7bGV0IGY9ci5Ob25lO2UucmVwbHlPZmZzZXQmJihmfD1yLlJlcGx5KSx2b2lkIDAhPT1lLmVkaXRlZEFmdGVyJiYoZnw9ci5FZGl0ZWQpLHZvaWQgMCE9PWUubGFuZ0luZGV4JiYoZnw9ci5UZXh0KSwobnVsbD09PShhPWUud29yZHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCkmJihmfD1yLldvcmRzKSwobnVsbD09PShpPWUuZW1vamlzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpJiYoZnw9ci5FbW9qaXMpLChudWxsPT09KG89ZS5hdHRhY2htZW50cyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ubGVuZ3RoKSYmKGZ8PXIuQXR0YWNobWVudHMpLChudWxsPT09KGw9ZS5yZWFjdGlvbnMpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxlbmd0aCkmJihmfD1yLlJlYWN0aW9ucyksKG51bGw9PT0odT1lLm1lbnRpb25zKXx8dm9pZCAwPT09dT92b2lkIDA6dS5sZW5ndGgpJiYoZnw9ci5NZW50aW9ucyksKG51bGw9PT0oaD1lLmRvbWFpbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCkmJihmfD1yLkRvbWFpbnMpLHQuc2V0Qml0cyg5LGYpLGYmci5SZXBseSYmdC53cml0ZVZhckludChlLnJlcGx5T2Zmc2V0KSxmJnIuRWRpdGVkJiZ0LndyaXRlVmFySW50KGUuZWRpdGVkQWZ0ZXIpLGYmci5UZXh0JiYodC5zZXRCaXRzKDgsZS5sYW5nSW5kZXgpLHQuc2V0Qml0cyg4LGUuc2VudGltZW50KzEyOCkpLGYmci5Xb3JkcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLndvcmRzLHQsbi53b3JkSWR4Qml0cyksZiZyLkVtb2ppcyYmKDAscy53cml0ZUluZGV4Q291bnRzKShlLmVtb2ppcyx0LG4uZW1vamlJZHhCaXRzKSxmJnIuQXR0YWNobWVudHMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5hdHRhY2htZW50cyx0LDMpLGYmci5SZWFjdGlvbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5yZWFjdGlvbnMsdCxuLmVtb2ppSWR4Qml0cyksZiZyLk1lbnRpb25zJiYoMCxzLndyaXRlSW5kZXhDb3VudHMpKGUubWVudGlvbnMsdCxuLm1lbnRpb25zSWR4Qml0cyksZiZyLkRvbWFpbnMmJigwLHMud3JpdGVJbmRleENvdW50cykoZS5kb21haW5zLHQsbi5kb21haW5zSWR4Qml0cyl9LHQucmVhZE1lc3NhZ2U9KGUsdCk9Pntjb25zdCBuPWUuZ2V0Qml0cyh0LmRheUJpdHMpLGE9ZS5nZXRCaXRzKDE3KSxpPWUuZ2V0Qml0cyh0LmF1dGhvcklkeEJpdHMpLG89ZS5nZXRCaXRzKDkpLGw9e2RheUluZGV4Om4sc2Vjb25kT2ZEYXk6YSxhdXRob3JJbmRleDppfTtyZXR1cm4gbyZyLlJlcGx5JiYobC5yZXBseU9mZnNldD1lLnJlYWRWYXJJbnQoKSksbyZyLkVkaXRlZCYmKGwuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLG8mci5UZXh0JiYobC5sYW5nSW5kZXg9ZS5nZXRCaXRzKDgpLGwuc2VudGltZW50PWUuZ2V0Qml0cyg4KS0xMjgpLG8mci5Xb3JkcyYmKGwud29yZHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC53b3JkSWR4Qml0cykpLG8mci5FbW9qaXMmJihsLmVtb2ppcz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5BdHRhY2htZW50cyYmKGwuYXR0YWNobWVudHM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsMykpLG8mci5SZWFjdGlvbnMmJihsLnJlYWN0aW9ucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLG8mci5NZW50aW9ucyYmKGwubWVudGlvbnM9KDAscy5yZWFkSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSxvJnIuRG9tYWlucyYmKGwuZG9tYWlucz0oMCxzLnJlYWRJbmRleENvdW50cykoZSx0LmRvbWFpbnNJZHhCaXRzKSksbH19LDg2MzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VWaWV3PXZvaWQgMDtjb25zdCBzPW4oMTQyOSkscj1uKDcyMjIpO2NsYXNzIGF7Z2V0IGhhc1RleHQoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5UZXh0KT4wfWdldCBoYXNSZXBseSgpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlJlcGx5KT4wfWdldCBoYXNFZGl0cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MH1nZXQgaGFzV29yZHMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Xb3Jkcyk+MH1nZXQgaGFzRW1vamlzKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuRW1vamlzKT4wfWdldCBoYXNBdHRhY2htZW50cygpe3JldHVybih0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wfWdldCBoYXNSZWFjdGlvbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZWFjdGlvbnMpPjB9Z2V0IGhhc01lbnRpb25zKCl7cmV0dXJuKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuTWVudGlvbnMpPjB9Z2V0IGhhc0RvbWFpbnMoKXtyZXR1cm4odGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLmJpdENvbmZpZz10LHRoaXMuZ3VpbGRJbmRleD0tMSx0aGlzLmNoYW5uZWxJbmRleD0tMSx0aGlzLndvcmRzT2Zmc2V0PTAsdGhpcy5lbW9qaXNPZmZzZXQ9MCx0aGlzLmF0dGFjaG1lbnRzT2Zmc2V0PTAsdGhpcy5yZWFjdGlvbnNPZmZzZXQ9MCx0aGlzLm1lbnRpb25zT2Zmc2V0PTAsdGhpcy5kb21haW5zT2Zmc2V0PTAsdGhpcy5kYXlJbmRleD1lLmdldEJpdHModC5kYXlCaXRzKSx0aGlzLnNlY29uZE9mRGF5PWUuZ2V0Qml0cygxNyksdGhpcy5hdXRob3JJbmRleD1lLmdldEJpdHModC5hdXRob3JJZHhCaXRzKSx0aGlzLmZsYWdzPWUuZ2V0Qml0cyg5KSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5SZXBseSk+MCYmKHRoaXMucmVwbHlPZmZzZXQ9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkVkaXRlZCk+MCYmKHRoaXMuZWRpdGVkQWZ0ZXI9ZS5yZWFkVmFySW50KCkpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLlRleHQpPjAmJih0aGlzLmxhbmdJbmRleD1lLmdldEJpdHMoOCksdGhpcy5zZW50aW1lbnQ9ZS5nZXRCaXRzKDgpLTEyOCksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuV29yZHMpPjAmJih0aGlzLndvcmRzT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQud29yZElkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5FbW9qaXMpPjAmJih0aGlzLmVtb2ppc09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSx0LmVtb2ppSWR4Qml0cykpLCh0aGlzLmZsYWdzJnIuTWVzc2FnZUZsYWdzLkF0dGFjaG1lbnRzKT4wJiYodGhpcy5hdHRhY2htZW50c09mZnNldD1lLm9mZnNldCwoMCxzLnNraXBJbmRleENvdW50cykoZSwzKSksKHRoaXMuZmxhZ3Mmci5NZXNzYWdlRmxhZ3MuUmVhY3Rpb25zKT4wJiYodGhpcy5yZWFjdGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5lbW9qaUlkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5NZW50aW9ucyk+MCYmKHRoaXMubWVudGlvbnNPZmZzZXQ9ZS5vZmZzZXQsKDAscy5za2lwSW5kZXhDb3VudHMpKGUsdC5tZW50aW9uc0lkeEJpdHMpKSwodGhpcy5mbGFncyZyLk1lc3NhZ2VGbGFncy5Eb21haW5zKT4wJiYodGhpcy5kb21haW5zT2Zmc2V0PWUub2Zmc2V0LCgwLHMuc2tpcEluZGV4Q291bnRzKShlLHQuZG9tYWluc0lkeEJpdHMpKX1nZXQgd29yZHMoKXtpZigwIT09dGhpcy53b3Jkc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMud29yZHNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLndvcmRJZHhCaXRzKX1nZXQgZW1vamlzKCl7aWYoMCE9PXRoaXMuZW1vamlzT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5lbW9qaXNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IGF0dGFjaG1lbnRzKCl7aWYoMCE9PXRoaXMuYXR0YWNobWVudHNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLmF0dGFjaG1lbnRzT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSwzKX1nZXQgcmVhY3Rpb25zKCl7aWYoMCE9PXRoaXMucmVhY3Rpb25zT2Zmc2V0KXJldHVybiB0aGlzLnN0cmVhbS5vZmZzZXQ9dGhpcy5yZWFjdGlvbnNPZmZzZXQsKDAscy5yZWFkSW5kZXhDb3VudHMpKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnLmVtb2ppSWR4Qml0cyl9Z2V0IG1lbnRpb25zKCl7aWYoMCE9PXRoaXMubWVudGlvbnNPZmZzZXQpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLm1lbnRpb25zT2Zmc2V0LCgwLHMucmVhZEluZGV4Q291bnRzKSh0aGlzLnN0cmVhbSx0aGlzLmJpdENvbmZpZy5tZW50aW9uc0lkeEJpdHMpfWdldCBkb21haW5zKCl7aWYoMCE9PXRoaXMuZG9tYWluc09mZnNldClyZXR1cm4gdGhpcy5zdHJlYW0ub2Zmc2V0PXRoaXMuZG9tYWluc09mZnNldCwoMCxzLnJlYWRJbmRleENvdW50cykodGhpcy5zdHJlYW0sdGhpcy5iaXRDb25maWcuZG9tYWluc0lkeEJpdHMpfWdldCByZXBseSgpe2lmKHRoaXMuaGFzUmVwbHkpcmV0dXJuIHRoaXMuc3RyZWFtLm9mZnNldD10aGlzLnJlcGx5T2Zmc2V0LG5ldyBhKHRoaXMuc3RyZWFtLHRoaXMuYml0Q29uZmlnKX1nZXRGdWxsTWVzc2FnZSgpe3JldHVybntkYXlJbmRleDp0aGlzLmRheUluZGV4LHNlY29uZE9mRGF5OnRoaXMuc2Vjb25kT2ZEYXksZWRpdGVkQWZ0ZXI6dGhpcy5lZGl0ZWRBZnRlcixhdXRob3JJbmRleDp0aGlzLmF1dGhvckluZGV4LHJlcGx5T2Zmc2V0OnRoaXMucmVwbHlPZmZzZXQsbGFuZ0luZGV4OnRoaXMubGFuZ0luZGV4LHNlbnRpbWVudDp0aGlzLnNlbnRpbWVudCx3b3Jkczp0aGlzLndvcmRzLGVtb2ppczp0aGlzLmVtb2ppcyxhdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzLHJlYWN0aW9uczp0aGlzLnJlYWN0aW9ucyxtZW50aW9uczp0aGlzLm1lbnRpb25zLGRvbWFpbnM6dGhpcy5kb21haW5zLGd1aWxkSW5kZXg6dGhpcy5ndWlsZEluZGV4LGNoYW5uZWxJbmRleDp0aGlzLmNoYW5uZWxJbmRleH19fXQuTWVzc2FnZVZpZXc9YX0sNTA3MTpmdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHMpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihyLGEpe2Z1bmN0aW9uIGkoZSl7dHJ5e2wocy5uZXh0KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBvKGUpe3RyeXtsKHMudGhyb3coZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP3IoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGksbyl9bCgocz1zLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qgcj1uKDE5MSksYT1uKDcxMjQpLGk9bigxNzk3KSxvPW4oMTgxMyksbD1uKDM4NjYpO2xldCB1PW51bGwsaD1udWxsLGY9bnVsbDtzZWxmLm9ubWVzc2FnZT1lPT57c3dpdGNoKGUuZGF0YS50eXBlKXtjYXNlImluaXQiOihlPT57Y29uc29sZS50aW1lKCJEZWNvbXByZXNzIHRpbWUiKSx1PSgwLG8uZGVjb21wcmVzc0RhdGFiYXNlKShlLmRhdGFTdHIpLGNvbnNvbGUudGltZUVuZCgiRGVjb21wcmVzcyB0aW1lIiksY29uc29sZS50aW1lKCJDb21wdXRlIGNvbW1vbiBibG9jayBkYXRhIiksZj0oMCxhLmNvbXB1dGVDb21tb25CbG9ja0RhdGEpKHUpLGNvbnNvbGUudGltZUVuZCgiQ29tcHV0ZSBjb21tb24gYmxvY2sgZGF0YSIpLGg9bmV3IGkuRmlsdGVycyh1KSxjb25zb2xlLnRpbWUoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IHQ9e2F1dGhvcnM6dS5hdXRob3JzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uKSkpLGNoYW5uZWxzOnUuY2hhbm5lbHMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlLm5hbWUpKSksd29yZHM6dS53b3Jkcy5tYXAoKGU9PigwLGwubWF0Y2hGb3JtYXQpKGUpKSksZW1vamlzOnUuZW1vamlzLm1hcCgoZT0+KDAsbC5tYXRjaEZvcm1hdCkoZS5uYW1lKSkpLG1lbnRpb25zOnUubWVudGlvbnMubWFwKChlPT4oMCxsLm1hdGNoRm9ybWF0KShlKSkpfTtjb25zb2xlLnRpbWVFbmQoIkJ1aWxkIGZvcm1hdCBjYWNoZSIpO2NvbnN0IG49e3R5cGU6InJlYWR5IixkYXRhYmFzZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdSkse21lc3NhZ2VzOnZvaWQgMH0pLGZvcm1hdENhY2hlOnR9O3NlbGYucG9zdE1lc3NhZ2Uobil9KShlLmRhdGEpO2JyZWFrO2Nhc2UicmVxdWVzdCI6dD1lLmRhdGEscyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQiKTt0LmZpbHRlcnMuY2hhbm5lbHMmJmgudXBkYXRlQ2hhbm5lbHModC5maWx0ZXJzLmNoYW5uZWxzKSx0LmZpbHRlcnMuYXV0aG9ycyYmaC51cGRhdGVBdXRob3JzKHQuZmlsdGVycy5hdXRob3JzKSx0LmZpbHRlcnMuc3RhcnREYXRlJiZoLnVwZGF0ZVN0YXJ0RGF0ZSh0LmZpbHRlcnMuc3RhcnREYXRlKSx0LmZpbHRlcnMuZW5kRGF0ZSYmaC51cGRhdGVFbmREYXRlKHQuZmlsdGVycy5lbmREYXRlKTtjb25zdCBlPXQucmVxdWVzdCxuPXt0eXBlOiJyZXN1bHQiLHJlcXVlc3Q6ZSxyZXN1bHQ6e3N1Y2Nlc3M6ITEsdHJpZ2dlcnM6W10sZXJyb3JNZXNzYWdlOiJVbmtub3duIGVycm9yIn19O3RyeXtpZighKGUuYmxvY2tLZXkgaW4gci5CbG9ja3MpKXRocm93IG5ldyBFcnJvcigiQmxvY2tGbiBub3QgZm91bmQiKTtuLnJlc3VsdC50cmlnZ2Vycz1yLkJsb2Nrc1tlLmJsb2NrS2V5XS50cmlnZ2Vycztjb25zdCB0PWUuYmxvY2tLZXkrKGUuYXJncz8iLS0iK0pTT04uc3RyaW5naWZ5KGUuYXJncyk6IiIpO2NvbnNvbGUudGltZSh0KTtjb25zdCBzPXIuQmxvY2tzW2UuYmxvY2tLZXldLmZuKHUsaCxmLGUuYXJncyk7Y29uc29sZS50aW1lRW5kKHQpLG4ucmVzdWx0LnN1Y2Nlc3M9ITAsbi5yZXN1bHQuZGF0YT1zLG4ucmVzdWx0LmVycm9yTWVzc2FnZT12b2lkIDB9Y2F0Y2goZSl7bi5yZXN1bHQuZXJyb3JNZXNzYWdlPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSsiIixjb25zb2xlLmxvZygiRXJyb3IgYWhlYWQg4oaTIiksY29uc29sZS5lcnJvcihlKX1zZWxmLnBvc3RNZXNzYWdlKG4pfSkpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coIlVua25vd24gbWVzc2FnZSIsZS5kYXRhKX12YXIgdH0sY29uc29sZS5sb2coIldvcmtlclJlcG9ydCBzdGFydGVkIil9LDgwODM6KGUsdCxuKT0+e3ZhciBzPW4oNTkyOCkscj1VaW50OEFycmF5LGE9VWludDE2QXJyYXksaT1VaW50MzJBcnJheSxvPW5ldyByKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxsPW5ldyByKFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0pLHU9bmV3IHIoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBhKDMxKSxzPTA7czwzMTsrK3MpbltzXT10Kz0xPDxlW3MtMV07dmFyIHI9bmV3IGkoblszMF0pO2ZvcihzPTE7czwzMDsrK3MpZm9yKHZhciBvPW5bc107bzxuW3MrMV07KytvKXJbb109by1uW3NdPDw1fHM7cmV0dXJuW24scl19LGY9aChvLDIpLGM9ZlswXSxkPWZbMV07Y1syOF09MjU4LGRbMjU4XT0yODtmb3IodmFyIG09aChsLDApLHA9bVswXSxnPW1bMV0seT1uZXcgYSgzMjc2OCksdj0wO3Y8MzI3Njg7Kyt2KXt2YXIgYj0oNDM2OTAmdik+Pj4xfCgyMTg0NSZ2KTw8MTtiPSg2MTY4MCYoYj0oNTI0MjgmYik+Pj4yfCgxMzEwNyZiKTw8MikpPj4+NHwoMzg1NSZiKTw8NCx5W3ZdPSgoNjUyODAmYik+Pj44fCgyNTUmYik8PDgpPj4+MX12YXIgeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBzPWUubGVuZ3RoLHI9MCxpPW5ldyBhKHQpO3I8czsrK3IpZVtyXSYmKytpW2Vbcl0tMV07dmFyIG8sbD1uZXcgYSh0KTtmb3Iocj0wO3I8dDsrK3IpbFtyXT1sW3ItMV0raVtyLTFdPDwxO2lmKG4pe289bmV3IGEoMTw8dCk7dmFyIHU9MTUtdDtmb3Iocj0wO3I8czsrK3IpaWYoZVtyXSlmb3IodmFyIGg9cjw8NHxlW3JdLGY9dC1lW3JdLGM9bFtlW3JdLTFdKys8PGYsZD1jfCgxPDxmKS0xO2M8PWQ7KytjKW9beVtjXT4+PnVdPWh9ZWxzZSBmb3Iobz1uZXcgYShzKSxyPTA7cjxzOysrcillW3JdJiYob1tyXT15W2xbZVtyXS0xXSsrXT4+PjE1LWVbcl0pO3JldHVybiBvfSx3PW5ldyByKDI4OCk7Zm9yKHY9MDt2PDE0NDsrK3Ypd1t2XT04O2Zvcih2PTE0NDt2PDI1NjsrK3Ypd1t2XT05O2Zvcih2PTI1Njt2PDI4MDsrK3Ypd1t2XT03O2Zvcih2PTI4MDt2PDI4ODsrK3Ypd1t2XT04O3ZhciBJPW5ldyByKDMyKTtmb3Iodj0wO3Y8MzI7Kyt2KUlbdl09NTt2YXIgTT14KHcsOSwwKSxrPXgodyw5LDEpLEQ9eChJLDUsMCksQT14KEksNSwxKSxUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lWzBdLG49MTtuPGUubGVuZ3RoOysrbillW25dPnQmJih0PWVbbl0pO3JldHVybiB0fSxPPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz10Lzh8MDtyZXR1cm4oZVtzXXxlW3MrMV08PDgpPj4oNyZ0KSZufSxCPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC84fDA7cmV0dXJuKGVbbl18ZVtuKzFdPDw4fGVbbisyXTw8MTYpPj4oNyZ0KX0sQz1mdW5jdGlvbihlKXtyZXR1cm4oZSs3KS84fDB9LGo9ZnVuY3Rpb24oZSx0LG4peyhudWxsPT10fHx0PDApJiYodD0wKSwobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTt2YXIgcz1uZXcoMj09ZS5CWVRFU19QRVJfRUxFTUVOVD9hOjQ9PWUuQllURVNfUEVSX0VMRU1FTlQ/aTpyKShuLXQpO3JldHVybiBzLnNldChlLnN1YmFycmF5KHQsbikpLHN9O3QuRmxhdGVFcnJvckNvZGU9e1VuZXhwZWN0ZWRFT0Y6MCxJbnZhbGlkQmxvY2tUeXBlOjEsSW52YWxpZExlbmd0aExpdGVyYWw6MixJbnZhbGlkRGlzdGFuY2U6MyxTdHJlYW1GaW5pc2hlZDo0LE5vU3RyZWFtSGFuZGxlcjo1LEludmFsaWRIZWFkZXI6NixOb0NhbGxiYWNrOjcsSW52YWxpZFVURjg6OCxFeHRyYUZpZWxkVG9vTG9uZzo5LEludmFsaWREYXRlOjEwLEZpbGVuYW1lVG9vTG9uZzoxMSxTdHJlYW1GaW5pc2hpbmc6MTIsSW52YWxpZFppcERhdGE6MTMsVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOjE0fTt2YXIgRT1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyBFcnJvcih0fHxFW2VdKTtpZihzLmNvZGU9ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxGKSwhbil0aHJvdyBzO3JldHVybiBzfSxTPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1lLmxlbmd0aDtpZighc3x8biYmbi5mJiYhbi5sKXJldHVybiB0fHxuZXcgcigwKTt2YXIgYT0hdHx8bixpPSFufHxuLmk7bnx8KG49e30pLHR8fCh0PW5ldyByKDMqcykpO3ZhciBoPWZ1bmN0aW9uKGUpe3ZhciBuPXQubGVuZ3RoO2lmKGU+bil7dmFyIHM9bmV3IHIoTWF0aC5tYXgoMipuLGUpKTtzLnNldCh0KSx0PXN9fSxmPW4uZnx8MCxkPW4ucHx8MCxtPW4uYnx8MCxnPW4ubCx5PW4uZCx2PW4ubSxiPW4ubix3PTgqcztkb3tpZighZyl7Zj1PKGUsZCwxKTt2YXIgST1PKGUsZCsxLDMpO2lmKGQrPTMsIUkpe3ZhciBNPWVbKFI9QyhkKSs0KS00XXxlW1ItM108PDgsRD1SK007aWYoRD5zKXtpJiZGKDApO2JyZWFrfWEmJmgobStNKSx0LnNldChlLnN1YmFycmF5KFIsRCksbSksbi5iPW0rPU0sbi5wPWQ9OCpELG4uZj1mO2NvbnRpbnVlfWlmKDE9PUkpZz1rLHk9QSx2PTksYj01O2Vsc2UgaWYoMj09SSl7dmFyIEU9TyhlLGQsMzEpKzI1NyxTPU8oZSxkKzEwLDE1KSs0LF89RStPKGUsZCs1LDMxKSsxO2QrPTE0O2Zvcih2YXIgej1uZXcgcihfKSxLPW5ldyByKDE5KSxQPTA7UDxTOysrUClLW3VbUF1dPU8oZSxkKzMqUCw3KTtkKz0zKlM7dmFyIFc9VChLKSxVPSgxPDxXKS0xLEw9eChLLFcsMSk7Zm9yKFA9MDtQPF87KXt2YXIgUixWPUxbTyhlLGQsVSldO2lmKGQrPTE1JlYsKFI9Vj4+PjQpPDE2KXpbUCsrXT1SO2Vsc2V7dmFyIE49MCxxPTA7Zm9yKDE2PT1SPyhxPTMrTyhlLGQsMyksZCs9MixOPXpbUC0xXSk6MTc9PVI/KHE9MytPKGUsZCw3KSxkKz0zKToxOD09UiYmKHE9MTErTyhlLGQsMTI3KSxkKz03KTtxLS07KXpbUCsrXT1OfX12YXIgWj16LnN1YmFycmF5KDAsRSksJD16LnN1YmFycmF5KEUpO3Y9VChaKSxiPVQoJCksZz14KFosdiwxKSx5PXgoJCxiLDEpfWVsc2UgRigxKTtpZihkPncpe2kmJkYoMCk7YnJlYWt9fWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgWT0oMTw8diktMSxHPSgxPDxiKS0xLEg9ZDs7SD1kKXt2YXIgSj0oTj1nW0IoZSxkKSZZXSk+Pj40O2lmKChkKz0xNSZOKT53KXtpJiZGKDApO2JyZWFrfWlmKE58fEYoMiksSjwyNTYpdFttKytdPUo7ZWxzZXtpZigyNTY9PUope0g9ZCxnPW51bGw7YnJlYWt9dmFyIFE9Si0yNTQ7aWYoSj4yNjQpe3ZhciBYPW9bUD1KLTI1N107UT1PKGUsZCwoMTw8WCktMSkrY1tQXSxkKz1YfXZhciBlZT15W0IoZSxkKSZHXSx0ZT1lZT4+PjQ7aWYoZWV8fEYoMyksZCs9MTUmZWUsJD1wW3RlXSx0ZT4zJiYoWD1sW3RlXSwkKz1CKGUsZCkmKDE8PFgpLTEsZCs9WCksZD53KXtpJiZGKDApO2JyZWFrfWEmJmgobSsxMzEwNzIpO2Zvcih2YXIgbmU9bStRO208bmU7bSs9NCl0W21dPXRbbS0kXSx0W20rMV09dFttKzEtJF0sdFttKzJdPXRbbSsyLSRdLHRbbSszXT10W20rMy0kXTttPW5lfX1uLmw9ZyxuLnA9SCxuLmI9bSxuLmY9ZixnJiYoZj0xLG4ubT12LG4uZD15LG4ubj1iKX13aGlsZSghZik7cmV0dXJuIG09PXQubGVuZ3RoP3Q6aih0LDAsbSl9LF89ZnVuY3Rpb24oZSx0LG4pe248PD03JnQ7dmFyIHM9dC84fDA7ZVtzXXw9bixlW3MrMV18PW4+Pj44fSx6PWZ1bmN0aW9uKGUsdCxuKXtuPDw9NyZ0O3ZhciBzPXQvOHwwO2Vbc118PW4sZVtzKzFdfD1uPj4+OCxlW3MrMl18PW4+Pj4xNn0sSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxzPTA7czxlLmxlbmd0aDsrK3MpZVtzXSYmbi5wdXNoKHtzLGY6ZVtzXX0pO3ZhciBpPW4ubGVuZ3RoLG89bi5zbGljZSgpO2lmKCFpKXJldHVybltOLDBdO2lmKDE9PWkpe3ZhciBsPW5ldyByKG5bMF0ucysxKTtyZXR1cm4gbFtuWzBdLnNdPTEsW2wsMV19bi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmYtdC5mfSkpLG4ucHVzaCh7czotMSxmOjI1MDAxfSk7dmFyIHU9blswXSxoPW5bMV0sZj0wLGM9MSxkPTI7Zm9yKG5bMF09e3M6LTEsZjp1LmYraC5mLGw6dSxyOmh9O2MhPWktMTspdT1uW25bZl0uZjxuW2RdLmY/ZisrOmQrK10saD1uW2YhPWMmJm5bZl0uZjxuW2RdLmY/ZisrOmQrK10sbltjKytdPXtzOi0xLGY6dS5mK2guZixsOnUscjpofTt2YXIgbT1vWzBdLnM7Zm9yKHM9MTtzPGk7KytzKW9bc10ucz5tJiYobT1vW3NdLnMpO3ZhciBwPW5ldyBhKG0rMSksZz1QKG5bYy0xXSxwLDApO2lmKGc+dCl7cz0wO3ZhciB5PTAsdj1nLXQsYj0xPDx2O2ZvcihvLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBbdC5zXS1wW2Uuc118fGUuZi10LmZ9KSk7czxpOysrcyl7dmFyIHg9b1tzXS5zO2lmKCEocFt4XT50KSlicmVhazt5Kz1iLSgxPDxnLXBbeF0pLHBbeF09dH1mb3IoeT4+Pj12O3k+MDspe3ZhciB3PW9bc10ucztwW3ddPHQ/eS09MTw8dC1wW3ddKystMTorK3N9Zm9yKDtzPj0wJiZ5Oy0tcyl7dmFyIEk9b1tzXS5zO3BbSV09PXQmJigtLXBbSV0sKyt5KX1nPXR9cmV0dXJuW25ldyByKHApLGddfSxQPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMT09ZS5zP01hdGgubWF4KFAoZS5sLHQsbisxKSxQKGUucix0LG4rMSkpOnRbZS5zXT1ufSxXPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0JiYhZVstLXRdOyk7Zm9yKHZhciBuPW5ldyBhKCsrdCkscz0wLHI9ZVswXSxpPTEsbz1mdW5jdGlvbihlKXtuW3MrK109ZX0sbD0xO2w8PXQ7KytsKWlmKGVbbF09PXImJmwhPXQpKytpO2Vsc2V7aWYoIXImJmk+Mil7Zm9yKDtpPjEzODtpLT0xMzgpbygzMjc1NCk7aT4yJiYobyhpPjEwP2ktMTE8PDV8Mjg2OTA6aS0zPDw1fDEyMzA1KSxpPTApfWVsc2UgaWYoaT4zKXtmb3IobyhyKSwtLWk7aT42O2ktPTYpbyg4MzA0KTtpPjImJihvKGktMzw8NXw4MjA4KSxpPTApfWZvcig7aS0tOylvKHIpO2k9MSxyPWVbbF19cmV0dXJuW24uc3ViYXJyYXkoMCxzKSx0XX0sVT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHM9MDtzPHQubGVuZ3RoOysrcyluKz1lW3NdKnRbc107cmV0dXJuIG59LEw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW4ubGVuZ3RoLHI9Qyh0KzIpO2Vbcl09MjU1JnMsZVtyKzFdPXM+Pj44LGVbcisyXT0yNTVeZVtyXSxlW3IrM109MjU1XmVbcisxXTtmb3IodmFyIGE9MDthPHM7KythKWVbcithKzRdPW5bYV07cmV0dXJuIDgqKHIrNCtzKX0sUj1mdW5jdGlvbihlLHQsbixzLHIsaSxoLGYsYyxkLG0pe18odCxtKyssbiksKytyWzI1Nl07Zm9yKHZhciBwPUsociwxNSksZz1wWzBdLHk9cFsxXSx2PUsoaSwxNSksYj12WzBdLGs9dlsxXSxBPVcoZyksVD1BWzBdLE89QVsxXSxCPVcoYiksQz1CWzBdLGo9QlsxXSxFPW5ldyBhKDE5KSxGPTA7RjxULmxlbmd0aDsrK0YpRVszMSZUW0ZdXSsrO2ZvcihGPTA7RjxDLmxlbmd0aDsrK0YpRVszMSZDW0ZdXSsrO2Zvcih2YXIgUz1LKEUsNyksUD1TWzBdLFI9U1sxXSxWPTE5O1Y+NCYmIVBbdVtWLTFdXTstLVYpO3ZhciBOLHEsWiwkLFk9ZCs1PDwzLEc9VShyLHcpK1UoaSxJKStoLEg9VShyLGcpK1UoaSxiKStoKzE0KzMqVitVKEUsUCkrKDIqRVsxNl0rMypFWzE3XSs3KkVbMThdKTtpZihZPD1HJiZZPD1IKXJldHVybiBMKHQsbSxlLnN1YmFycmF5KGMsYytkKSk7aWYoXyh0LG0sMSsoSDxHKSksbSs9MixIPEcpe049eChnLHksMCkscT1nLFo9eChiLGssMCksJD1iO3ZhciBKPXgoUCxSLDApO2ZvcihfKHQsbSxPLTI1NyksXyh0LG0rNSxqLTEpLF8odCxtKzEwLFYtNCksbSs9MTQsRj0wO0Y8VjsrK0YpXyh0LG0rMypGLFBbdVtGXV0pO20rPTMqVjtmb3IodmFyIFE9W1QsQ10sWD0wO1g8MjsrK1gpe3ZhciBlZT1RW1hdO2ZvcihGPTA7RjxlZS5sZW5ndGg7KytGKXt2YXIgdGU9MzEmZWVbRl07Xyh0LG0sSlt0ZV0pLG0rPVBbdGVdLHRlPjE1JiYoXyh0LG0sZWVbRl0+Pj41JjEyNyksbSs9ZWVbRl0+Pj4xMil9fX1lbHNlIE49TSxxPXcsWj1ELCQ9STtmb3IoRj0wO0Y8ZjsrK0YpaWYoc1tGXT4yNTUpe3RlPXNbRl0+Pj4xOCYzMSx6KHQsbSxOW3RlKzI1N10pLG0rPXFbdGUrMjU3XSx0ZT43JiYoXyh0LG0sc1tGXT4+PjIzJjMxKSxtKz1vW3RlXSk7dmFyIG5lPTMxJnNbRl07eih0LG0sWltuZV0pLG0rPSRbbmVdLG5lPjMmJih6KHQsbSxzW0ZdPj4+NSY4MTkxKSxtKz1sW25lXSl9ZWxzZSB6KHQsbSxOW3NbRl1dKSxtKz1xW3NbRl1dO3JldHVybiB6KHQsbSxOWzI1Nl0pLG0rcVsyNTZdfSxWPW5ldyBpKFs2NTU0MCwxMzEwODAsMTMxMDg4LDEzMTEwNCwyNjIxNzYsMTA0ODcwNCwxMDQ4ODMyLDIxMTQ1NjAsMjExNzYzMl0pLE49bmV3IHIoMCkscT1mdW5jdGlvbihlLHQsbixzLHUsaCl7dmFyIGY9ZS5sZW5ndGgsYz1uZXcgcihzK2YrNSooMStNYXRoLmNlaWwoZi83ZTMpKSt1KSxtPWMuc3ViYXJyYXkocyxjLmxlbmd0aC11KSxwPTA7aWYoIXR8fGY8OClmb3IodmFyIHk9MDt5PD1mO3krPTY1NTM1KXt2YXIgdj15KzY1NTM1O3Y+PWYmJihtW3A+PjNdPWgpLHA9TChtLHArMSxlLnN1YmFycmF5KHksdikpfWVsc2V7Zm9yKHZhciBiPVZbdC0xXSx4PWI+Pj4xMyx3PTgxOTEmYixJPSgxPDxuKS0xLE09bmV3IGEoMzI3NjgpLGs9bmV3IGEoSSsxKSxEPU1hdGguY2VpbChuLzMpLEE9MipELFQ9ZnVuY3Rpb24odCl7cmV0dXJuKGVbdF1eZVt0KzFdPDxEXmVbdCsyXTw8QSkmSX0sTz1uZXcgaSgyNWUzKSxCPW5ldyBhKDI4OCksRT1uZXcgYSgzMiksRj0wLFM9MCxfPSh5PTAsMCksej0wLEs9MDt5PGY7Kyt5KXt2YXIgUD1UKHkpLFc9MzI3NjcmeSxVPWtbUF07aWYoTVtXXT1VLGtbUF09Vyx6PD15KXt2YXIgcT1mLXk7aWYoKEY+N2UzfHxfPjI0NTc2KSYmcT40MjMpe3A9UihlLG0sMCxPLEIsRSxTLF8sSyx5LUsscCksXz1GPVM9MCxLPXk7Zm9yKHZhciBaPTA7WjwyODY7KytaKUJbWl09MDtmb3IoWj0wO1o8MzA7KytaKUVbWl09MH12YXIgJD0yLFk9MCxHPXcsSD1XLVUmMzI3Njc7aWYocT4yJiZQPT1UKHktSCkpZm9yKHZhciBKPU1hdGgubWluKHgscSktMSxRPU1hdGgubWluKDMyNzY3LHkpLFg9TWF0aC5taW4oMjU4LHEpO0g8PVEmJi0tRyYmVyE9VTspe2lmKGVbeSskXT09ZVt5KyQtSF0pe2Zvcih2YXIgZWU9MDtlZTxYJiZlW3krZWVdPT1lW3krZWUtSF07KytlZSk7aWYoZWU+JCl7aWYoJD1lZSxZPUgsZWU+SilicmVhazt2YXIgdGU9TWF0aC5taW4oSCxlZS0yKSxuZT0wO2ZvcihaPTA7Wjx0ZTsrK1ope3ZhciBzZT15LUgrWiszMjc2OCYzMjc2NyxyZT1zZS1NW3NlXSszMjc2OCYzMjc2NztyZT5uZSYmKG5lPXJlLFU9c2UpfX19SCs9KFc9VSktKFU9TVtXXSkrMzI3NjgmMzI3Njd9aWYoWSl7T1tfKytdPTI2ODQzNTQ1NnxkWyRdPDwxOHxnW1ldO3ZhciBhZT0zMSZkWyRdLGllPTMxJmdbWV07Uys9b1thZV0rbFtpZV0sKytCWzI1NythZV0sKytFW2llXSx6PXkrJCwrK0Z9ZWxzZSBPW18rK109ZVt5XSwrK0JbZVt5XV19fXA9UihlLG0saCxPLEIsRSxTLF8sSyx5LUsscCksIWgmJjcmcCYmKHA9TChtLHArMSxOKSl9cmV0dXJuIGooYywwLHMrQyhwKSt1KX0sWj1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgSW50MzJBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3Qpe2Zvcih2YXIgbj10LHM9OTstLXM7KW49KDEmbiYmLTMwNjY3NDkxMilebj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpLCQ9ZnVuY3Rpb24oKXt2YXIgZT0tMTtyZXR1cm57cDpmdW5jdGlvbih0KXtmb3IodmFyIG49ZSxzPTA7czx0Lmxlbmd0aDsrK3Mpbj1aWzI1NSZuXnRbc11dXm4+Pj44O2U9bn0sZDpmdW5jdGlvbigpe3JldHVybn5lfX19LFk9ZnVuY3Rpb24oKXt2YXIgZT0xLHQ9MDtyZXR1cm57cDpmdW5jdGlvbihuKXtmb3IodmFyIHM9ZSxyPXQsYT0wfG4ubGVuZ3RoLGk9MDtpIT1hOyl7Zm9yKHZhciBvPU1hdGgubWluKGkrMjY1NSxhKTtpPG87KytpKXIrPXMrPW5baV07cz0oNjU1MzUmcykrMTUqKHM+PjE2KSxyPSg2NTUzNSZyKSsxNSoocj4+MTYpfWU9cyx0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm4oMjU1JihlJT02NTUyMSkpPDwyNHxlPj4+ODw8MTZ8KDI1NSYodCU9NjU1MjEpKTw8OHx0Pj4+OH19fSxHPWZ1bmN0aW9uKGUsdCxuLHMscil7cmV0dXJuIHEoZSxudWxsPT10LmxldmVsPzY6dC5sZXZlbCxudWxsPT10Lm1lbT9NYXRoLmNlaWwoMS41Kk1hdGgubWF4KDgsTWF0aC5taW4oMTMsTWF0aC5sb2coZS5sZW5ndGgpKSkpOjEyK3QubWVtLG4scywhcil9LEg9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHMgaW4gZSluW3NdPWVbc107Zm9yKHZhciBzIGluIHQpbltzXT10W3NdO3JldHVybiBufSxKPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHM9ZSgpLHI9ZS50b1N0cmluZygpLGE9ci5zbGljZShyLmluZGV4T2YoIlsiKSsxLHIubGFzdEluZGV4T2YoIl0iKSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIiksaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgbz1zW2ldLGw9YVtpXTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dCs9IjsiK2wrIj0iO3ZhciB1PW8udG9TdHJpbmcoKTtpZihvLnByb3RvdHlwZSlpZigtMSE9dS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpe3ZhciBoPXUuaW5kZXhPZigiICIsOCkrMTt0Kz11LnNsaWNlKGgsdS5pbmRleE9mKCIoIixoKSl9ZWxzZSBmb3IodmFyIGYgaW4gdCs9dSxvLnByb3RvdHlwZSl0Kz0iOyIrbCsiLnByb3RvdHlwZS4iK2YrIj0iK28ucHJvdG90eXBlW2ZdLnRvU3RyaW5nKCk7ZWxzZSB0Kz11fWVsc2UgbltsXT1vfXJldHVyblt0LG5dfSxRPVtdLFg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE7aWYoIVFbbl0pe2Zvcih2YXIgaT0iIixvPXt9LGw9ZS5sZW5ndGgtMSx1PTA7dTxsOysrdSlpPShhPUooZVt1XSxpLG8pKVswXSxvPWFbMV07UVtuXT1KKGVbbF0saSxvKX12YXIgaD1IKHt9LFFbbl1bMV0pO3JldHVybiBzLmRlZmF1bHQoUVtuXVswXSsiO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0iK3QudG9TdHJpbmcoKSsifSIsbixoLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYnVmZmVyJiZ0LnB1c2goKGVbbl09bmV3IGVbbl0uY29uc3RydWN0b3IoZVtuXSkpLmJ1ZmZlcik7cmV0dXJuIHR9KGgpLHIpfSxlZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxjLHAsayxBLHksRSx4LFQsTyxCLEMsaixGLFMsQmUsaWUsb2VdfSx0ZT1mdW5jdGlvbigpe3JldHVybltyLGEsaSxvLGwsdSxkLGcsTSx3LEQsSSx5LFYsTix4LF8seixLLFAsVyxVLEwsUixDLGoscSxHLERlLGllXX0sbmU9ZnVuY3Rpb24oKXtyZXR1cm5bcGUsdmUsbWUsJCxaXX0sc2U9ZnVuY3Rpb24oKXtyZXR1cm5bZ2UseWVdfSxyZT1mdW5jdGlvbigpe3JldHVybltiZSxtZSxZXX0sYWU9ZnVuY3Rpb24oKXtyZXR1cm5beGVdfSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gcG9zdE1lc3NhZ2UoZSxbZS5idWZmZXJdKX0sb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2l6ZSYmbmV3IHIoZS5zaXplKX0sbGU9ZnVuY3Rpb24oZSx0LG4scyxyLGEpe3ZhciBpPVgobixzLHIsKGZ1bmN0aW9uKGUsdCl7aS50ZXJtaW5hdGUoKSxhKGUsdCl9KSk7cmV0dXJuIGkucG9zdE1lc3NhZ2UoW2UsdF0sdC5jb25zdW1lP1tlLmJ1ZmZlcl06W10pLGZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LHVlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9uZGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBwb3N0TWVzc2FnZShbZSx0XSxbZS5idWZmZXJdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUucHVzaCh0LmRhdGFbMF0sdC5kYXRhWzFdKX19LGhlPWZ1bmN0aW9uKGUsdCxuLHMscil7dmFyIGEsaT1YKGUscyxyLChmdW5jdGlvbihlLG4pe2U/KGkudGVybWluYXRlKCksdC5vbmRhdGEuY2FsbCh0LGUpKTooblsxXSYmaS50ZXJtaW5hdGUoKSx0Lm9uZGF0YS5jYWxsKHQsZSxuWzBdLG5bMV0pKX0pKTtpLnBvc3RNZXNzYWdlKG4pLHQucHVzaD1mdW5jdGlvbihlLG4pe3Qub25kYXRhfHxGKDUpLGEmJnQub25kYXRhKEYoNCwwLDEpLG51bGwsISFuKSxpLnBvc3RNZXNzYWdlKFtlLGE9bl0sW2UuYnVmZmVyXSl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7aS50ZXJtaW5hdGUoKX19LGZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF18ZVt0KzFdPDw4fSxjZT1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH0sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSs0Mjk0OTY3Mjk2KmNlKGUsdCs0KX0sbWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcig7bjsrK3QpZVt0XT1uLG4+Pj49OH0scGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbGVuYW1lO2lmKGVbMF09MzEsZVsxXT0xMzksZVsyXT04LGVbOF09dC5sZXZlbDwyPzQ6OT09dC5sZXZlbD8yOjAsZVs5XT0zLDAhPXQubXRpbWUmJm1lKGUsNCxNYXRoLmZsb29yKG5ldyBEYXRlKHQubXRpbWV8fERhdGUubm93KCkpLzFlMykpLG4pe2VbM109ODtmb3IodmFyIHM9MDtzPD1uLmxlbmd0aDsrK3MpZVtzKzEwXT1uLmNoYXJDb2RlQXQocyl9fSxnZT1mdW5jdGlvbihlKXszMT09ZVswXSYmMTM5PT1lWzFdJiY4PT1lWzJdfHxGKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHQ9ZVszXSxuPTEwOzQmdCYmKG4rPWVbMTBdfDIrKGVbMTFdPDw4KSk7Zm9yKHZhciBzPSh0Pj4zJjEpKyh0Pj40JjEpO3M+MDtzLT0hZVtuKytdKTtyZXR1cm4gbisoMiZ0KX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9LHZlPWZ1bmN0aW9uKGUpe3JldHVybiAxMCsoZS5maWxlbmFtZSYmZS5maWxlbmFtZS5sZW5ndGgrMXx8MCl9LGJlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZXZlbCxzPTA9PW4/MDpuPDY/MTo5PT1uPzM6MjtlWzBdPTEyMCxlWzFdPXM8PDZ8KHM/MzItMipzOjEpfSx4ZT1mdW5jdGlvbihlKXsoOCE9KDE1JmVbMF0pfHxlWzBdPj4+ND43fHwoZVswXTw8OHxlWzFdKSUzMSkmJkYoNiwiaW52YWxpZCB6bGliIGRhdGEiKSwzMiZlWzFdJiZGKDYsImludmFsaWQgemxpYiBkYXRhOiBwcmVzZXQgZGljdGlvbmFyaWVzIG5vdCBzdXBwb3J0ZWQiKX07ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCh0PWUsZT17fSksdGhpcy5vbmRhdGE9dCxlfXZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0fHwiZnVuY3Rpb24iIT10eXBlb2YgZXx8KHQ9ZSxlPXt9KSx0aGlzLm9uZGF0YT10LHRoaXMubz1lfHx7fX1yZXR1cm4gZS5wcm90b3R5cGUucD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKEcoZSx0aGlzLm8sMCwwLCF0KSx0KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhfHxGKDUpLHRoaXMuZCYmRig0KSx0aGlzLmQ9dCx0aGlzLnAoZSx0fHwhMSl9LGV9KCk7dC5EZWZsYXRlPUllO3ZhciBNZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2hlKFt0ZSxmdW5jdGlvbigpe3JldHVyblt1ZSxJZV19XSx0aGlzLHdlLmNhbGwodGhpcyxlLHQpLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgSWUoZS5kYXRhKTtvbm1lc3NhZ2U9dWUodCl9KSw2KX19KCk7ZnVuY3Rpb24ga2UoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGVdLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoRGUoZS5kYXRhWzBdLGUuZGF0YVsxXSkpfSksMCxuKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBHKGUsdHx8e30sMCwwKX10LkFzeW5jRGVmbGF0ZT1NZSx0LmRlZmxhdGU9a2UsdC5kZWZsYXRlU3luYz1EZTt2YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucz17fSx0aGlzLnA9bmV3IHIoMCksdGhpcy5vbmRhdGE9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZT1mdW5jdGlvbihlKXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCk7dmFyIHQ9dGhpcy5wLmxlbmd0aCxuPW5ldyByKHQrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0KSx0aGlzLnA9bn0sZS5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXt0aGlzLmQ9dGhpcy5zLmk9ZXx8ITE7dmFyIHQ9dGhpcy5zLmIsbj1TKHRoaXMucCx0aGlzLm8sdGhpcy5zKTt0aGlzLm9uZGF0YShqKG4sdCx0aGlzLnMuYiksdGhpcy5kKSx0aGlzLm89aihuLHRoaXMucy5iLTMyNzY4KSx0aGlzLnMuYj10aGlzLm8ubGVuZ3RoLHRoaXMucD1qKHRoaXMucCx0aGlzLnMucC84fDApLHRoaXMucy5wJj03fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5lKGUpLHRoaXMuYyh0KX0sZX0oKTt0LkluZmxhdGU9QWU7dmFyIFRlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgQWU7b25tZXNzYWdlPXVlKGUpfSksNyl9fSgpO2Z1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEJlKGUuZGF0YVswXSxvZShlLmRhdGFbMV0pKSl9KSwxLG4pfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIFMoZSx0KX10LkFzeW5jSW5mbGF0ZT1UZSx0LmluZmxhdGU9T2UsdC5pbmZsYXRlU3luYz1CZTt2YXIgQ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPSQoKSx0aGlzLmw9MCx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSksdGhpcy5sKz1lLmxlbmd0aDt2YXIgbj1HKGUsdGhpcy5vLHRoaXMudiYmdmUodGhpcy5vKSx0JiY4LCF0KTt0aGlzLnYmJihwZShuLHRoaXMubyksdGhpcy52PTApLHQmJihtZShuLG4ubGVuZ3RoLTgsdGhpcy5jLmQoKSksbWUobixuLmxlbmd0aC00LHRoaXMubCkpLHRoaXMub25kYXRhKG4sdCl9LGV9KCk7dC5HemlwPUNlLHQuQ29tcHJlc3M9Q2U7dmFyIGplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLG5lLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLENlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDgpfX0oKTtmdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIG58fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyksbGUoZSx0LFt0ZSxuZSxmdW5jdGlvbigpe3JldHVybltGZV19XSwoZnVuY3Rpb24oZSl7cmV0dXJuIGllKEZlKGUuZGF0YVswXSxlLmRhdGFbMV0pKX0pLDIsbil9ZnVuY3Rpb24gRmUoZSx0KXt0fHwodD17fSk7dmFyIG49JCgpLHM9ZS5sZW5ndGg7bi5wKGUpO3ZhciByPUcoZSx0LHZlKHQpLDgpLGE9ci5sZW5ndGg7cmV0dXJuIHBlKHIsdCksbWUocixhLTgsbi5kKCkpLG1lKHIsYS00LHMpLHJ9dC5Bc3luY0d6aXA9amUsdC5Bc3luY0NvbXByZXNzPWplLHQuZ3ppcD1FZSx0LmNvbXByZXNzPUVlLHQuZ3ppcFN5bmM9RmUsdC5jb21wcmVzc1N5bmM9RmU7dmFyIFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnY9MSxBZS5jYWxsKHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZihBZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsZSksdGhpcy52KXt2YXIgbj10aGlzLnAubGVuZ3RoPjM/Z2UodGhpcy5wKTo0O2lmKG4+PXRoaXMucC5sZW5ndGgmJiF0KXJldHVybjt0aGlzLnA9dGhpcy5wLnN1YmFycmF5KG4pLHRoaXMudj0wfXQmJih0aGlzLnAubGVuZ3RoPDgmJkYoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx0aGlzLnA9dGhpcy5wLnN1YmFycmF5KDAsLTgpKSxBZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsdCl9LGV9KCk7dC5HdW56aXA9U2U7dmFyIF9lPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMub25kYXRhPWUsaGUoW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEFlLFNlXX1dLHRoaXMsMCwoZnVuY3Rpb24oKXt2YXIgZT1uZXcgU2U7b25tZXNzYWdlPXVlKGUpfSksOSl9fSgpO2Z1bmN0aW9uIHplKGUsdCxuKXtyZXR1cm4gbnx8KG49dCx0PXt9KSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmRig3KSxsZShlLHQsW2VlLHNlLGZ1bmN0aW9uKCl7cmV0dXJuW0tlXX1dLChmdW5jdGlvbihlKXtyZXR1cm4gaWUoS2UoZS5kYXRhWzBdKSl9KSwzLG4pfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIFMoZS5zdWJhcnJheShnZShlKSwtOCksdHx8bmV3IHIoeWUoZSkpKX10LkFzeW5jR3VuemlwPV9lLHQuZ3VuemlwPXplLHQuZ3VuemlwU3luYz1LZTt2YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jPVkoKSx0aGlzLnY9MSxJZS5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe0llLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxlLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGUsdCl7dGhpcy5jLnAoZSk7dmFyIG49RyhlLHRoaXMubyx0aGlzLnYmJjIsdCYmNCwhdCk7dGhpcy52JiYoYmUobix0aGlzLm8pLHRoaXMudj0wKSx0JiZtZShuLG4ubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEobix0KX0sZX0oKTt0LlpsaWI9UGU7dmFyIFdlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aGUoW3RlLHJlLGZ1bmN0aW9uKCl7cmV0dXJuW3VlLEllLFBlXX1dLHRoaXMsd2UuY2FsbCh0aGlzLGUsdCksKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBQZShlLmRhdGEpO29ubWVzc2FnZT11ZSh0KX0pLDEwKX19KCk7ZnVuY3Rpb24gVWUoZSx0KXt0fHwodD17fSk7dmFyIG49WSgpO24ucChlKTt2YXIgcz1HKGUsdCwyLDQpO3JldHVybiBiZShzLHQpLG1lKHMscy5sZW5ndGgtNCxuLmQoKSksc310LkFzeW5jWmxpYj1XZSx0LnpsaWI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbdGUscmUsZnVuY3Rpb24oKXtyZXR1cm5bVWVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShVZShlLmRhdGFbMF0sZS5kYXRhWzFdKSl9KSw0LG4pfSx0LnpsaWJTeW5jPVVlO3ZhciBMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52PTEsQWUuY2FsbCh0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7aWYoQWUucHJvdG90eXBlLmUuY2FsbCh0aGlzLGUpLHRoaXMudil7aWYodGhpcy5wLmxlbmd0aDwyJiYhdClyZXR1cm47dGhpcy5wPXRoaXMucC5zdWJhcnJheSgyKSx0aGlzLnY9MH10JiYodGhpcy5wLmxlbmd0aDw0JiZGKDYsImludmFsaWQgemxpYiBkYXRhIiksdGhpcy5wPXRoaXMucC5zdWJhcnJheSgwLC00KSksQWUucHJvdG90eXBlLmMuY2FsbCh0aGlzLHQpfSxlfSgpO3QuVW56bGliPUxlO3ZhciBSZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLm9uZGF0YT1lLGhlKFtlZSxhZSxmdW5jdGlvbigpe3JldHVyblt1ZSxBZSxMZV19XSx0aGlzLDAsKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IExlO29ubWVzc2FnZT11ZShlKX0pLDExKX19KCk7ZnVuY3Rpb24gVmUoZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLGxlKGUsdCxbZWUsYWUsZnVuY3Rpb24oKXtyZXR1cm5bTmVdfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBpZShOZShlLmRhdGFbMF0sb2UoZS5kYXRhWzFdKSkpfSksNSxuKX1mdW5jdGlvbiBOZShlLHQpe3JldHVybiBTKCh4ZShlKSxlLnN1YmFycmF5KDIsLTQpKSx0KX10LkFzeW5jVW56bGliPVJlLHQudW56bGliPVZlLHQudW56bGliU3luYz1OZTt2YXIgcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1TZSx0aGlzLkk9QWUsdGhpcy5aPUxlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLnMpdGhpcy5zLnB1c2goZSx0KTtlbHNle2lmKHRoaXMucCYmdGhpcy5wLmxlbmd0aCl7dmFyIG49bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCk7bi5zZXQodGhpcy5wKSxuLnNldChlLHRoaXMucC5sZW5ndGgpfWVsc2UgdGhpcy5wPWU7aWYodGhpcy5wLmxlbmd0aD4yKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24oKXtzLm9uZGF0YS5hcHBseShzLGFyZ3VtZW50cyl9O3RoaXMucz0zMT09dGhpcy5wWzBdJiYxMzk9PXRoaXMucFsxXSYmOD09dGhpcy5wWzJdP25ldyB0aGlzLkcoYSk6OCE9KDE1JnRoaXMucFswXSl8fHRoaXMucFswXT4+ND43fHwodGhpcy5wWzBdPDw4fHRoaXMucFsxXSklMzE/bmV3IHRoaXMuSShhKTpuZXcgdGhpcy5aKGEpLHRoaXMucy5wdXNoKHRoaXMucCx0KSx0aGlzLnA9bnVsbH19fSxlfSgpO3QuRGVjb21wcmVzcz1xZTt2YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuRz1fZSx0aGlzLkk9VGUsdGhpcy5aPVJlLHRoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtxZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jRGVjb21wcmVzcz1aZSx0LmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpLDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/emUoZSx0LG4pOjghPSgxNSZlWzBdKXx8ZVswXT4+ND43fHwoZVswXTw8OHxlWzFdKSUzMT9PZShlLHQsbik6VmUoZSx0LG4pfSx0LmRlY29tcHJlc3NTeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMxPT1lWzBdJiYxMzk9PWVbMV0mJjg9PWVbMl0/S2UoZSx0KTo4IT0oMTUmZVswXSl8fGVbMF0+PjQ+N3x8KGVbMF08PDh8ZVsxXSklMzE/QmUoZSx0KTpOZShlLHQpfTt2YXIgJGU9ZnVuY3Rpb24oZSx0LG4scyl7Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz10K2EsbD1zO0FycmF5LmlzQXJyYXkoaSkmJihsPUgocyxpWzFdKSxpPWlbMF0pLGkgaW5zdGFuY2VvZiByP25bb109W2ksbF06KG5bbys9Ii8iXT1bbmV3IHIoMCksbF0sJGUoaSxvLG4scykpfX0sWWU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RW5jb2RlciYmbmV3IFRleHRFbmNvZGVyLEdlPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2RlcixIZT0wO3RyeXtHZS5kZWNvZGUoTix7c3RyZWFtOiEwfSksSGU9MX1jYXRjaChlKXt9dmFyIEplPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7Oyl7dmFyIHM9ZVtuKytdLHI9KHM+MTI3KSsocz4yMjMpKyhzPjIzOSk7aWYobityPmUubGVuZ3RoKXJldHVyblt0LGooZSxuLTEpXTtyPzM9PXI/KHM9KCgxNSZzKTw8MTh8KDYzJmVbbisrXSk8PDEyfCg2MyZlW24rK10pPDw2fDYzJmVbbisrXSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHwxMDIzJnMpKTp0Kz0xJnI/U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmcyk8PDZ8NjMmZVtuKytdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZzKTw8MTJ8KDYzJmVbbisrXSk8PDZ8NjMmZVtuKytdKTp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpfX0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsSGU/dGhpcy50PW5ldyBUZXh0RGVjb2Rlcjp0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2lmKHRoaXMub25kYXRhfHxGKDUpLHQ9ISF0LHRoaXMudClyZXR1cm4gdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShlLHtzdHJlYW06ITB9KSx0KSx2b2lkKHQmJih0aGlzLnQuZGVjb2RlKCkubGVuZ3RoJiZGKDgpLHRoaXMudD1udWxsKSk7dGhpcy5wfHxGKDQpO3ZhciBuPW5ldyByKHRoaXMucC5sZW5ndGgrZS5sZW5ndGgpO24uc2V0KHRoaXMucCksbi5zZXQoZSx0aGlzLnAubGVuZ3RoKTt2YXIgcz1KZShuKSxhPXNbMF0saT1zWzFdO3Q/KGkubGVuZ3RoJiZGKDgpLHRoaXMucD1udWxsKTp0aGlzLnA9aSx0aGlzLm9uZGF0YShhLHQpfSxlfSgpO3QuRGVjb2RlVVRGOD1RZTt2YXIgWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWV9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uZGF0YXx8Rig1KSx0aGlzLmQmJkYoNCksdGhpcy5vbmRhdGEoZXQoZSksdGhpcy5kPXR8fCExKX0sZX0oKTtmdW5jdGlvbiBldChlLHQpe2lmKHQpe2Zvcih2YXIgbj1uZXcgcihlLmxlbmd0aCkscz0wO3M8ZS5sZW5ndGg7KytzKW5bc109ZS5jaGFyQ29kZUF0KHMpO3JldHVybiBufWlmKFllKXJldHVybiBZZS5lbmNvZGUoZSk7dmFyIGE9ZS5sZW5ndGgsaT1uZXcgcihlLmxlbmd0aCsoZS5sZW5ndGg+PjEpKSxvPTAsbD1mdW5jdGlvbihlKXtpW28rK109ZX07Zm9yKHM9MDtzPGE7KytzKXtpZihvKzU+aS5sZW5ndGgpe3ZhciB1PW5ldyByKG8rOCsoYS1zPDwxKSk7dS5zZXQoaSksaT11fXZhciBoPWUuY2hhckNvZGVBdChzKTtoPDEyOHx8dD9sKGgpOmg8MjA0OD8obCgxOTJ8aD4+NiksbCgxMjh8NjMmaCkpOmg+NTUyOTUmJmg8NTczNDQ/KGwoMjQwfChoPTY1NTM2KygxMDQ3NTUyJmgpfDEwMjMmZS5jaGFyQ29kZUF0KCsrcykpPj4xOCksbCgxMjh8aD4+MTImNjMpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKToobCgyMjR8aD4+MTIpLGwoMTI4fGg+PjYmNjMpLGwoMTI4fDYzJmgpKX1yZXR1cm4gaihpLDAsbyl9ZnVuY3Rpb24gdHQoZSx0KXtpZih0KXtmb3IodmFyIG49IiIscz0wO3M8ZS5sZW5ndGg7cys9MTYzODQpbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkocyxzKzE2Mzg0KSk7cmV0dXJuIG59aWYoR2UpcmV0dXJuIEdlLmRlY29kZShlKTt2YXIgcj1KZShlKSxhPXJbMF07cmV0dXJuIHJbMV0ubGVuZ3RoJiZGKDgpLGF9dC5FbmNvZGVVVEY4PVhlLHQuc3RyVG9VOD1ldCx0LnN0ckZyb21VOD10dDt2YXIgbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWU/MzplPDY/Mjo5PT1lPzE6MH0sc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCszMCtmZShlLHQrMjYpK2ZlKGUsdCsyOCl9LHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1mZShlLHQrMjgpLHI9dHQoZS5zdWJhcnJheSh0KzQ2LHQrNDYrcyksISgyMDQ4JmZlKGUsdCs4KSkpLGE9dCs0NitzLGk9Y2UoZSx0KzIwKSxvPW4mJjQyOTQ5NjcyOTU9PWk/YXQoZSxhKTpbaSxjZShlLHQrMjQpLGNlKGUsdCs0MildLGw9b1swXSx1PW9bMV0saD1vWzJdO3JldHVybltmZShlLHQrMTApLGwsdSxyLGErZmUoZSx0KzMwKStmZShlLHQrMzIpLGhdfSxhdD1mdW5jdGlvbihlLHQpe2Zvcig7MSE9ZmUoZSx0KTt0Kz00K2ZlKGUsdCsyKSk7cmV0dXJuW2RlKGUsdCsxMiksZGUoZSx0KzQpLGRlKGUsdCsyMCldfSxpdD1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKGUpZm9yKHZhciBuIGluIGUpe3ZhciBzPWVbbl0ubGVuZ3RoO3M+NjU1MzUmJkYoOSksdCs9cys0fXJldHVybiB0fSxvdD1mdW5jdGlvbihlLHQsbixzLHIsYSxpLG8pe3ZhciBsPXMubGVuZ3RoLHU9bi5leHRyYSxoPW8mJm8ubGVuZ3RoLGY9aXQodSk7bWUoZSx0LG51bGwhPWk/MzM2MzkyNDg6NjczMjQ3NTIpLHQrPTQsbnVsbCE9aSYmKGVbdCsrXT0yMCxlW3QrK109bi5vcyksZVt0XT0yMCx0Kz0yLGVbdCsrXT1uLmZsYWc8PDF8KGE8MCYmOCksZVt0KytdPXImJjgsZVt0KytdPTI1NSZuLmNvbXByZXNzaW9uLGVbdCsrXT1uLmNvbXByZXNzaW9uPj44O3ZhciBjPW5ldyBEYXRlKG51bGw9PW4ubXRpbWU/RGF0ZS5ub3coKTpuLm10aW1lKSxkPWMuZ2V0RnVsbFllYXIoKS0xOTgwO2lmKChkPDB8fGQ+MTE5KSYmRigxMCksbWUoZSx0LGQ8PDI1fGMuZ2V0TW9udGgoKSsxPDwyMXxjLmdldERhdGUoKTw8MTZ8Yy5nZXRIb3VycygpPDwxMXxjLmdldE1pbnV0ZXMoKTw8NXxjLmdldFNlY29uZHMoKT4+PjEpLHQrPTQsLTEhPWEmJihtZShlLHQsbi5jcmMpLG1lKGUsdCs0LGE8MD8tYS0yOmEpLG1lKGUsdCs4LG4uc2l6ZSkpLG1lKGUsdCsxMixsKSxtZShlLHQrMTQsZiksdCs9MTYsbnVsbCE9aSYmKG1lKGUsdCxoKSxtZShlLHQrNixuLmF0dHJzKSxtZShlLHQrMTAsaSksdCs9MTQpLGUuc2V0KHMsdCksdCs9bCxmKWZvcih2YXIgbSBpbiB1KXt2YXIgcD11W21dLGc9cC5sZW5ndGg7bWUoZSx0LCttKSxtZShlLHQrMixnKSxlLnNldChwLHQrNCksdCs9NCtnfXJldHVybiBoJiYoZS5zZXQobyx0KSx0Kz1oKSx0fSxsdD1mdW5jdGlvbihlLHQsbixzLHIpe21lKGUsdCwxMDEwMTAyNTYpLG1lKGUsdCs4LG4pLG1lKGUsdCsxMCxuKSxtZShlLHQrMTIscyksbWUoZSx0KzE2LHIpfSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5maWxlbmFtZT1lLHRoaXMuYz0kKCksdGhpcy5zaXplPTAsdGhpcy5jb21wcmVzc2lvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGEobnVsbCxlLHQpfSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5vbmRhdGF8fEYoNSksdGhpcy5jLnAoZSksdGhpcy5zaXplKz1lLmxlbmd0aCx0JiYodGhpcy5jcmM9dGhpcy5jLmQoKSksdGhpcy5wcm9jZXNzKGUsdHx8ITEpfSxlfSgpO3QuWmlwUGFzc1Rocm91Z2g9dXQ7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dHx8KHQ9e30pLHV0LmNhbGwodGhpcyxlKSx0aGlzLmQ9bmV3IEllKHQsKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCl9cmV0dXJuIGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSx0KXt0cnl7dGhpcy5kLnB1c2goZSx0KX1jYXRjaChlKXt0aGlzLm9uZGF0YShlLG51bGwsdCl9fSxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dXQucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGUsdCl9LGV9KCk7dC5aaXBEZWZsYXRlPWh0O3ZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3R8fCh0PXt9KSx1dC5jYWxsKHRoaXMsZSksdGhpcy5kPW5ldyBNZSh0LChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMuY29tcHJlc3Npb249OCx0aGlzLmZsYWc9bnQodC5sZXZlbCksdGhpcy50ZXJtaW5hdGU9dGhpcy5kLnRlcm1pbmF0ZX1yZXR1cm4gZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3RoaXMuZC5wdXNoKGUsdCl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt1dC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sZX0oKTt0LkFzeW5jWmlwRGVmbGF0ZT1mdDt2YXIgY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMub25kYXRhPWUsdGhpcy51PVtdLHRoaXMuZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLm9uZGF0YXx8Rig1KSwyJnRoaXMuZCl0aGlzLm9uZGF0YShGKDQrOCooMSZ0aGlzLmQpLDAsMSksbnVsbCwhMSk7ZWxzZXt2YXIgbj1ldChlLmZpbGVuYW1lKSxzPW4ubGVuZ3RoLGE9ZS5jb21tZW50LGk9YSYmZXQoYSksbz1zIT1lLmZpbGVuYW1lLmxlbmd0aHx8aSYmYS5sZW5ndGghPWkubGVuZ3RoLGw9cytpdChlLmV4dHJhKSszMDtzPjY1NTM1JiZ0aGlzLm9uZGF0YShGKDExLDAsMSksbnVsbCwhMSk7dmFyIHU9bmV3IHIobCk7b3QodSwwLGUsbixvLC0xKTt2YXIgaD1bdV0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49aDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHM9bltlXTt0Lm9uZGF0YShudWxsLHMsITEpfWg9W119LGM9dGhpcy5kO3RoaXMuZD0wO3ZhciBkPXRoaXMudS5sZW5ndGgsbT1IKGUse2Y6bix1Om8sbzppLHQ6ZnVuY3Rpb24oKXtlLnRlcm1pbmF0ZSYmZS50ZXJtaW5hdGUoKX0scjpmdW5jdGlvbigpe2lmKGYoKSxjKXt2YXIgZT10LnVbZCsxXTtlP2UucigpOnQuZD0xfWM9MX19KSxwPTA7ZS5vbmRhdGE9ZnVuY3Rpb24obixzLGEpe2lmKG4pdC5vbmRhdGEobixzLGEpLHQudGVybWluYXRlKCk7ZWxzZSBpZihwKz1zLmxlbmd0aCxoLnB1c2gocyksYSl7dmFyIGk9bmV3IHIoMTYpO21lKGksMCwxMzQ2OTU3NjApLG1lKGksNCxlLmNyYyksbWUoaSw4LHApLG1lKGksMTIsZS5zaXplKSxoLnB1c2goaSksbS5jPXAsbS5iPWwrcCsxNixtLmNyYz1lLmNyYyxtLnNpemU9ZS5zaXplLGMmJm0ucigpLGM9MX1lbHNlIGMmJmYoKX0sdGhpcy51LnB1c2gobSl9fSxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzImdGhpcy5kP3RoaXMub25kYXRhKEYoNCs4KigxJnRoaXMuZCksMCwxKSxudWxsLCEwKToodGhpcy5kP3RoaXMuZSgpOnRoaXMudS5wdXNoKHtyOmZ1bmN0aW9uKCl7MSZlLmQmJihlLnUuc3BsaWNlKC0xLDEpLGUuZSgpKX0sdDpmdW5jdGlvbigpe319KSx0aGlzLmQ9Myl9LGUucHJvdG90eXBlLmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsbj0wLHM9MCxhPXRoaXMudTtzPGEubGVuZ3RoO3MrKyluKz00NisodT1hW3NdKS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCk7Zm9yKHZhciBpPW5ldyByKG4rMjIpLG89MCxsPXRoaXMudTtvPGwubGVuZ3RoO28rKyl7dmFyIHU9bFtvXTtvdChpLGUsdSx1LmYsdS51LC11LmMtMix0LHUubyksZSs9NDYrdS5mLmxlbmd0aCtpdCh1LmV4dHJhKSsodS5vP3Uuby5sZW5ndGg6MCksdCs9dS5ifWx0KGksZSx0aGlzLnUubGVuZ3RoLG4sdCksdGhpcy5vbmRhdGEobnVsbCxpLCEwKSx0aGlzLmQ9Mn0sZS5wcm90b3R5cGUudGVybWluYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnU7ZTx0Lmxlbmd0aDtlKyspdFtlXS50KCk7dGhpcy5kPTJ9LGV9KCk7dC5aaXA9Y3QsdC56aXA9ZnVuY3Rpb24oZSx0LG4pe258fChuPXQsdD17fSksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJkYoNyk7dmFyIHM9e307JGUoZSwiIixzLHQpO3ZhciBhPU9iamVjdC5rZXlzKHMpLGk9YS5sZW5ndGgsbz0wLGw9MCx1PWksaD1uZXcgQXJyYXkoaSksZj1bXSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDsrK2UpZltlXSgpfSxkPWZ1bmN0aW9uKGUsdCl7eXQoKGZ1bmN0aW9uKCl7bihlLHQpfSkpfTt5dCgoZnVuY3Rpb24oKXtkPW59KSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcihsKzIyKSx0PW8sbj1sLW87bD0wO2Zvcih2YXIgcz0wO3M8dTsrK3Mpe3ZhciBhPWhbc107dHJ5e3ZhciBpPWEuYy5sZW5ndGg7b3QoZSxsLGEsYS5mLGEudSxpKTt2YXIgZj0zMCthLmYubGVuZ3RoK2l0KGEuZXh0cmEpLGM9bCtmO2Uuc2V0KGEuYyxjKSxvdChlLG8sYSxhLmYsYS51LGksbCxhLm0pLG8rPTE2K2YrKGEubT9hLm0ubGVuZ3RoOjApLGw9YytpfWNhdGNoKGUpe3JldHVybiBkKGUsbnVsbCl9fWx0KGUsbyxoLmxlbmd0aCxuLHQpLGQobnVsbCxlKX07aXx8bSgpO2Zvcih2YXIgcD1mdW5jdGlvbihlKXt2YXIgdD1hW2VdLG49c1t0XSxyPW5bMF0sdT1uWzFdLHA9JCgpLGc9ci5sZW5ndGg7cC5wKHIpO3ZhciB5PWV0KHQpLHY9eS5sZW5ndGgsYj11LmNvbW1lbnQseD1iJiZldChiKSx3PXgmJngubGVuZ3RoLEk9aXQodS5leHRyYSksTT0wPT11LmxldmVsPzA6OCxrPWZ1bmN0aW9uKG4scyl7aWYobiljKCksZChuLG51bGwpO2Vsc2V7dmFyIHI9cy5sZW5ndGg7aFtlXT1IKHUse3NpemU6ZyxjcmM6cC5kKCksYzpzLGY6eSxtOngsdTp2IT10Lmxlbmd0aHx8eCYmYi5sZW5ndGghPXcsY29tcHJlc3Npb246TX0pLG8rPTMwK3YrSStyLGwrPTc2KzIqKHYrSSkrKHd8fDApK3IsLS1pfHxtKCl9fTtpZih2PjY1NTM1JiZrKEYoMTEsMCwxKSxudWxsKSxNKWlmKGc8MTZlNCl0cnl7ayhudWxsLERlKHIsdSkpfWNhdGNoKGUpe2soZSxudWxsKX1lbHNlIGYucHVzaChrZShyLHUsaykpO2Vsc2UgayhudWxsLHIpfSxnPTA7Zzx1OysrZylwKGcpO3JldHVybiBjfSx0LnppcFN5bmM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSk7dmFyIG49e30scz1bXTskZShlLCIiLG4sdCk7dmFyIGE9MCxpPTA7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb10sdT1sWzBdLGg9bFsxXSxmPTA9PWgubGV2ZWw/MDo4LGM9KGs9ZXQobykpLmxlbmd0aCxkPWguY29tbWVudCxtPWQmJmV0KGQpLHA9bSYmbS5sZW5ndGgsZz1pdChoLmV4dHJhKTtjPjY1NTM1JiZGKDExKTt2YXIgeT1mP0RlKHUsaCk6dSx2PXkubGVuZ3RoLGI9JCgpO2IucCh1KSxzLnB1c2goSChoLHtzaXplOnUubGVuZ3RoLGNyYzpiLmQoKSxjOnksZjprLG0sdTpjIT1vLmxlbmd0aHx8bSYmZC5sZW5ndGghPXAsbzphLGNvbXByZXNzaW9uOmZ9KSksYSs9MzArYytnK3YsaSs9NzYrMiooYytnKSsocHx8MCkrdn1mb3IodmFyIHg9bmV3IHIoaSsyMiksdz1hLEk9aS1hLE09MDtNPHMubGVuZ3RoOysrTSl7dmFyIGs9c1tNXTtvdCh4LGsubyxrLGsuZixrLnUsay5jLmxlbmd0aCk7dmFyIEQ9MzAray5mLmxlbmd0aCtpdChrLmV4dHJhKTt4LnNldChrLmMsay5vK0QpLG90KHgsYSxrLGsuZixrLnUsay5jLmxlbmd0aCxrLm8say5tKSxhKz0xNitEKyhrLm0/ay5tLmxlbmd0aDowKX1yZXR1cm4gbHQoeCxhLHMubGVuZ3RoLEksdykseH07dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3RoaXMub25kYXRhKG51bGwsZSx0KX0sZS5jb21wcmVzc2lvbj0wLGV9KCk7dC5VbnppcFBhc3NUaHJvdWdoPWR0O3ZhciBtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKHQsbil7ZS5vbmRhdGEobnVsbCx0LG4pfSkpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dHJ5e3RoaXMuaS5wdXNoKGUsdCl9Y2F0Y2goZSl7dGhpcy5vbmRhdGEoZSxudWxsLHQpfX0sZS5jb21wcmVzc2lvbj04LGV9KCk7dC5VbnppcEluZmxhdGU9bXQ7dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dDwzMmU0P3RoaXMuaT1uZXcgQWUoKGZ1bmN0aW9uKGUsdCl7bi5vbmRhdGEobnVsbCxlLHQpfSkpOih0aGlzLmk9bmV3IFRlKChmdW5jdGlvbihlLHQscyl7bi5vbmRhdGEoZSx0LHMpfSkpLHRoaXMudGVybWluYXRlPXRoaXMuaS50ZXJtaW5hdGUpfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5pLnRlcm1pbmF0ZSYmKGU9aihlLDApKSx0aGlzLmkucHVzaChlLHQpfSxlLmNvbXByZXNzaW9uPTgsZX0oKTt0LkFzeW5jVW56aXBJbmZsYXRlPXB0O3ZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vbmZpbGU9ZSx0aGlzLms9W10sdGhpcy5vPXswOmR0fSx0aGlzLnA9Tn1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5vbmZpbGV8fEYoNSksdGhpcy5wfHxGKDQpLHRoaXMuYz4wKXt2YXIgcz1NYXRoLm1pbih0aGlzLmMsZS5sZW5ndGgpLGE9ZS5zdWJhcnJheSgwLHMpO2lmKHRoaXMuYy09cyx0aGlzLmQ/dGhpcy5kLnB1c2goYSwhdGhpcy5jKTp0aGlzLmtbMF0ucHVzaChhKSwoZT1lLnN1YmFycmF5KHMpKS5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChlLHQpfWVsc2V7dmFyIGk9MCxvPTAsbD12b2lkIDAsdT12b2lkIDA7dGhpcy5wLmxlbmd0aD9lLmxlbmd0aD8oKHU9bmV3IHIodGhpcy5wLmxlbmd0aCtlLmxlbmd0aCkpLnNldCh0aGlzLnApLHUuc2V0KGUsdGhpcy5wLmxlbmd0aCkpOnU9dGhpcy5wOnU9ZTtmb3IodmFyIGg9dS5sZW5ndGgsZj10aGlzLmMsYz1mJiZ0aGlzLmQsZD1mdW5jdGlvbigpe3ZhciBlLHQ9Y2UodSxvKTtpZig2NzMyNDc1Mj09dCl7aT0xLGw9byxtLmQ9bnVsbCxtLmM9MDt2YXIgcz1mZSh1LG8rNikscj1mZSh1LG8rOCksYT0yMDQ4JnMsYz04JnMsZD1mZSh1LG8rMjYpLHA9ZmUodSxvKzI4KTtpZihoPm8rMzArZCtwKXt2YXIgZz1bXTttLmsudW5zaGlmdChnKSxpPTI7dmFyIHksdj1jZSh1LG8rMTgpLGI9Y2UodSxvKzIyKSx4PXR0KHUuc3ViYXJyYXkobyszMCxvKz0zMCtkKSwhYSk7NDI5NDk2NzI5NT09dj8oZT1jP1stMl06YXQodSxvKSx2PWVbMF0sYj1lWzFdKTpjJiYodj0tMSksbys9cCxtLmM9djt2YXIgdz17bmFtZTp4LGNvbXByZXNzaW9uOnIsc3RhcnQ6ZnVuY3Rpb24oKXtpZih3Lm9uZGF0YXx8Rig1KSx2KXt2YXIgZT1uLm9bcl07ZXx8dy5vbmRhdGEoRigxNCwidW5rbm93biBjb21wcmVzc2lvbiB0eXBlICIrciwxKSxudWxsLCExKSwoeT12PDA/bmV3IGUoeCk6bmV3IGUoeCx2LGIpKS5vbmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3cub25kYXRhKGUsdCxuKX07Zm9yKHZhciB0PTAscz1nO3Q8cy5sZW5ndGg7dCsrKXt2YXIgYT1zW3RdO3kucHVzaChhLCExKX1uLmtbMF09PWcmJm4uYz9uLmQ9eTp5LnB1c2goTiwhMCl9ZWxzZSB3Lm9uZGF0YShudWxsLE4sITApfSx0ZXJtaW5hdGU6ZnVuY3Rpb24oKXt5JiZ5LnRlcm1pbmF0ZSYmeS50ZXJtaW5hdGUoKX19O3Y+PTAmJih3LnNpemU9dix3Lm9yaWdpbmFsU2l6ZT1iKSxtLm9uZmlsZSh3KX1yZXR1cm4iYnJlYWsifWlmKGYpe2lmKDEzNDY5NTc2MD09dClyZXR1cm4gbD1vKz0xMisoLTI9PWYmJjgpLGk9MyxtLmM9MCwiYnJlYWsiO2lmKDMzNjM5MjQ4PT10KXJldHVybiBsPW8tPTQsaT0zLG0uYz0wLCJicmVhayJ9fSxtPXRoaXM7bzxoLTQmJiJicmVhayIhPT1kKCk7KytvKTtpZih0aGlzLnA9TixmPDApe3ZhciBwPWk/dS5zdWJhcnJheSgwLGwtMTItKC0yPT1mJiY4KS0oMTM0Njk1NzYwPT1jZSh1LGwtMTYpJiY0KSk6dS5zdWJhcnJheSgwLG8pO2M/Yy5wdXNoKHAsISFpKTp0aGlzLmtbKygyPT1pKV0ucHVzaChwKX1pZigyJmkpcmV0dXJuIHRoaXMucHVzaCh1LnN1YmFycmF5KG8pLHQpO3RoaXMucD11LnN1YmFycmF5KG8pfXQmJih0aGlzLmMmJkYoMTMpLHRoaXMucD1udWxsKX0sZS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5vW2UuY29tcHJlc3Npb25dPWV9LGV9KCk7dC5VbnppcD1ndDt2YXIgeXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7ZSgpfTt0LnVuemlwPWZ1bmN0aW9uKGUsdCxuKXtufHwobj10LHQ9e30pLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZGKDcpO3ZhciBzPVtdLGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHMubGVuZ3RoOysrZSlzW2VdKCl9LGk9e30sbz1mdW5jdGlvbihlLHQpe3l0KChmdW5jdGlvbigpe24oZSx0KX0pKX07eXQoKGZ1bmN0aW9uKCl7bz1ufSkpO2Zvcih2YXIgbD1lLmxlbmd0aC0yMjsxMDEwMTAyNTYhPWNlKGUsbCk7LS1sKWlmKCFsfHxlLmxlbmd0aC1sPjY1NTU4KXJldHVybiBvKEYoMTMsMCwxKSxudWxsKSxhO3ZhciB1PWZlKGUsbCs4KTtpZih1KXt2YXIgaD11LGY9Y2UoZSxsKzE2KSxjPTQyOTQ5NjcyOTU9PWZ8fDY1NTM1PT1oO2lmKGMpe3ZhciBkPWNlKGUsbC0xMik7KGM9MTAxMDc1NzkyPT1jZShlLGQpKSYmKGg9dT1jZShlLGQrMzIpLGY9Y2UoZSxkKzQ4KSl9Zm9yKHZhciBtPXQmJnQuZmlsdGVyLHA9ZnVuY3Rpb24odCl7dmFyIG49cnQoZSxmLGMpLGw9blswXSxoPW5bMV0sZD1uWzJdLHA9blszXSxnPW5bNF0seT1uWzVdLHY9c3QoZSx5KTtmPWc7dmFyIGI9ZnVuY3Rpb24oZSx0KXtlPyhhKCksbyhlLG51bGwpKToodCYmKGlbcF09dCksLS11fHxvKG51bGwsaSkpfTtpZighbXx8bSh7bmFtZTpwLHNpemU6aCxvcmlnaW5hbFNpemU6ZCxjb21wcmVzc2lvbjpsfSkpaWYobClpZig4PT1sKXt2YXIgeD1lLnN1YmFycmF5KHYsditoKTtpZihoPDMyZTQpdHJ5e2IobnVsbCxCZSh4LG5ldyByKGQpKSl9Y2F0Y2goZSl7YihlLG51bGwpfWVsc2Ugcy5wdXNoKE9lKHgse3NpemU6ZH0sYikpfWVsc2UgYihGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitsLDEpLG51bGwpO2Vsc2UgYihudWxsLGooZSx2LHYraCkpO2Vsc2UgYihudWxsLG51bGwpfSxnPTA7ZzxoOysrZylwKCl9ZWxzZSBvKG51bGwse30pO3JldHVybiBhfSx0LnVuemlwU3luYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxzPWUubGVuZ3RoLTIyOzEwMTAxMDI1NiE9Y2UoZSxzKTstLXMpKCFzfHxlLmxlbmd0aC1zPjY1NTU4KSYmRigxMyk7dmFyIGE9ZmUoZSxzKzgpO2lmKCFhKXJldHVybnt9O3ZhciBpPWNlKGUscysxNiksbz00Mjk0OTY3Mjk1PT1pfHw2NTUzNT09YTtpZihvKXt2YXIgbD1jZShlLHMtMTIpOyhvPTEwMTA3NTc5Mj09Y2UoZSxsKSkmJihhPWNlKGUsbCszMiksaT1jZShlLGwrNDgpKX1mb3IodmFyIHU9dCYmdC5maWx0ZXIsaD0wO2g8YTsrK2gpe3ZhciBmPXJ0KGUsaSxvKSxjPWZbMF0sZD1mWzFdLG09ZlsyXSxwPWZbM10sZz1mWzRdLHk9Zls1XSx2PXN0KGUseSk7aT1nLHUmJiF1KHtuYW1lOnAsc2l6ZTpkLG9yaWdpbmFsU2l6ZTptLGNvbXByZXNzaW9uOmN9KXx8KGM/OD09Yz9uW3BdPUJlKGUuc3ViYXJyYXkodix2K2QpLG5ldyByKG0pKTpGKDE0LCJ1bmtub3duIGNvbXByZXNzaW9uIHR5cGUgIitjKTpuW3BdPWooZSx2LHYrZCkpfXJldHVybiBufX0sNTkyODooZSx0KT0+e3ZhciBuPXt9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQscyxyLGEpe3ZhciBpPW5ldyBXb3JrZXIoblt0XXx8KG5bdF09VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZSsnO2FkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtlPWUuZXJyb3I7cG9zdE1lc3NhZ2UoeyRlJDpbZS5tZXNzYWdlLGUuY29kZSxlLnN0YWNrXX0pfSknXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKSkpO3JldHVybiBpLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGEsbj10LiRlJDtpZihuKXt2YXIgcz1uZXcgRXJyb3IoblswXSk7cy5jb2RlPW5bMV0scy5zdGFjaz1uWzJdLGEocyxudWxsKX1lbHNlIGEobnVsbCx0KX0saS5wb3N0TWVzc2FnZShzLHIpLGl9fX0sdD17fTshZnVuY3Rpb24gbihzKXt2YXIgcj10W3NdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgYT10W3NdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtzXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9KDUwNzEpfSkoKTs=
Message:
messages/per-period: 789.0009765625 ms