-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathData_manupulation_Presentation.html
More file actions
186 lines (182 loc) · 251 KB
/
Data_manupulation_Presentation.html
File metadata and controls
186 lines (182 loc) · 251 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Parash Upreti" />
<meta name="date" content="2016-05-17" />
<title>Data Manupulation in R</title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<link href="data:text/css;charset=utf-8,%0Abody%0A%7B%0Amargin%3A%200%200%200%200%3B%0Apadding%3A%200%200%200%200%3B%0Awidth%3A%20100%25%3B%0Aheight%3A%20100%25%3B%0Acolor%3A%20black%3B%0Abackground%2Dcolor%3A%20white%3B%0Afont%2Dfamily%3A%20%22Gill%20Sans%20MT%22%2C%20%22Gill%20Sans%22%2C%20GillSans%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2014pt%3B%0A%7D%0Adiv%2Etoolbar%20%7B%0Aposition%3A%20fixed%3B%20z%2Dindex%3A%20200%3B%0Atop%3A%20auto%3B%20bottom%3A%200%3B%20left%3A%200%3B%20right%3A%200%3B%0Aheight%3A%201%2E2em%3B%20text%2Dalign%3A%20right%3B%0Apadding%2Dleft%3A%201em%3B%0Apadding%2Dright%3A%201em%3B%20font%2Dsize%3A%2060%25%3B%0Acolor%3A%20DimGray%3B%0Abackground%2Dcolor%3A%20rgb%28240%2C240%2C240%29%3B%0Aborder%2Dtop%3A%20solid%201px%20rgb%28180%2C180%2C180%29%3B%0A%7D%0Adiv%2Etoolbar%20span%2Ecopyright%20%7B%0Acolor%3A%20DimGray%3B%0Amargin%2Dleft%3A%200%2E5em%3B%0A%7D%0Adiv%2Einitial%5Fprompt%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Abottom%3A%201%2E2em%3B%0Awidth%3A%20100%25%3B%0Abackground%2Dcolor%3A%20rgb%28200%2C200%2C200%29%3B%0Aopacity%3A%200%2E35%3B%0Abackground%2Dcolor%3A%20rgb%28200%2C200%2C200%2C%200%2E35%29%3B%0Acursor%3A%20pointer%3B%0A%7D%0Adiv%2Einitial%5Fprompt%20p%2Ehelp%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Adiv%2Einitial%5Fprompt%20p%2Eclose%20%7B%0Atext%2Dalign%3A%20right%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Adiv%2Eslidy%5Ftoc%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%20300%3B%0Awidth%3A%2060%25%3B%0Amax%2Dwidth%3A%2030em%3B%0Aheight%3A%2030em%3B%0Aoverflow%3A%20auto%3B%0Atop%3A%20auto%3B%0Aright%3A%20auto%3B%0Aleft%3A%204em%3B%0Abottom%3A%204em%3B%0Apadding%3A%201em%3B%0Abackground%3A%20rgb%28240%2C240%2C240%29%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%202px%3B%0Afont%2Dsize%3A%2060%25%3B%0A%7D%0Adiv%2Eslidy%5Ftoc%20%2Etoc%5Fheading%20%7B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%20100%25%3B%0Amargin%3A%200%3B%0Amargin%2Dbottom%3A%201em%3B%0Aborder%2Dbottom%2Dstyle%3A%20solid%3B%0Aborder%2Dbottom%2Dcolor%3A%20rgb%28180%2C180%2C180%29%3B%0Aborder%2Dbottom%2Dwidth%3A%201px%3B%0A%7D%0Adiv%2Eslide%20%7B%0Az%2Dindex%3A%2020%3B%0Amargin%3A%200%200%200%200%3B%0Apadding%2Dtop%3A%200%3B%0Apadding%2Dbottom%3A%200%3B%0Apadding%2Dleft%3A%2020px%3B%0Apadding%2Dright%3A%2020px%3B%0Aborder%2Dwidth%3A%200%3B%0Aclear%3A%20both%3B%0Atop%3A%200%3B%0Abottom%3A%200%3B%0Aleft%3A%200%3B%0Aright%3A%200%3B%0Aline%2Dheight%3A%20120%25%3B%0Abackground%2Dcolor%3A%20transparent%3B%0A%7D%0Adiv%2Ebackground%20%7B%0Adisplay%3A%20none%3B%0A%7D%0Adiv%2Ehandout%20%7B%0Amargin%2Dleft%3A%2020px%3B%0Amargin%2Dright%3A%2020px%3B%0A%7D%0Adiv%2Eslide%2Etitlepage%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Adiv%2Eslide%2Etitlepage%20h1%20%7B%0Apadding%2Dtop%3A%2010%25%3B%0Amargin%2Dright%3A%200%3B%0A%7D%0Adiv%2Eslide%20h1%20%7B%0Apadding%2Dleft%3A%200%3B%0Apadding%2Dright%3A%2020pt%3B%0Apadding%2Dtop%3A%204pt%3B%0Apadding%2Dbottom%3A%204pt%3B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dleft%3A%200%3B%0Amargin%2Dright%3A%2060pt%3B%0Amargin%2Dbottom%3A%200%2E5em%3B%0Adisplay%3A%20block%3B%20font%2Dsize%3A%20160%25%3B%0Aline%2Dheight%3A%201%2E2em%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%40media%20screen%20and%20%28max%2Ddevice%2Dwidth%3A%201024px%29%0A%7B%0Adiv%2Eslide%20%7B%20font%2Dsize%3A%20100%25%3B%20%7D%0A%7D%0A%40media%20screen%20and%20%28max%2Ddevice%2Dwidth%3A%20800px%29%0A%7B%0Adiv%2Eslide%20%7B%20font%2Dsize%3A%20200%25%3B%20%7D%0Adiv%2Eslidy%5Ftoc%20%7B%0Atop%3A%201em%3B%0Aleft%3A%201em%3B%0Aright%3A%20auto%3B%0Awidth%3A%2080%25%3B%0Afont%2Dsize%3A%20180%25%3B%0A%7D%0A%7D%0Adiv%2Etoc%2Dheading%20%7B%0Awidth%3A%20100%25%3B%0Aborder%2Dbottom%3A%20solid%201px%20rgb%28180%2C180%2C180%29%3B%0Amargin%2Dbottom%3A%201em%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aimg%20%7B%0Aimage%2Drendering%3A%20optimize%2Dquality%3B%0A%7D%0Apre%20%7B%0Afont%2Dsize%3A%2080%25%3B%0Afont%2Dweight%3A%20bold%3B%0Aline%2Dheight%3A%20120%25%3B%0Apadding%2Dtop%3A%200%2E2em%3B%0Apadding%2Dbottom%3A%200%2E2em%3B%0Apadding%2Dleft%3A%201em%3B%0Apadding%2Dright%3A%201em%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dleft%2Dwidth%3A%201em%3B%0Aborder%2Dtop%2Dwidth%3A%20thin%3B%0Aborder%2Dright%2Dwidth%3A%20thin%3B%0Aborder%2Dbottom%2Dwidth%3A%20thin%3B%0Aborder%2Dcolor%3A%20%2395ABD0%3B%0Acolor%3A%20%2300428C%3B%0Abackground%2Dcolor%3A%20%23E4E5E7%3B%0A%7D%0Ali%20pre%20%7B%20margin%2Dleft%3A%200%3B%20%7D%0Ablockquote%20%7B%20font%2Dstyle%3A%20italic%20%7D%0Aimg%20%7B%20background%2Dcolor%3A%20transparent%20%7D%0Ap%2Ecopyright%20%7B%20font%2Dsize%3A%20smaller%20%7D%0A%2Ecenter%20%7B%20text%2Dalign%3A%20center%20%7D%0A%2Efootnote%20%7B%20font%2Dsize%3A%20smaller%3B%20margin%2Dleft%3A%202em%3B%20%7D%0Aa%20img%20%7B%20border%2Dwidth%3A%200%3B%20border%2Dstyle%3A%20none%20%7D%0Aa%3Avisited%20%7B%20color%3A%20navy%20%7D%0Aa%3Alink%20%7B%20color%3A%20navy%20%7D%0Aa%3Ahover%20%7B%20color%3A%20red%3B%20text%2Ddecoration%3A%20underline%20%7D%0Aa%3Aactive%20%7B%20color%3A%20red%3B%20text%2Ddecoration%3A%20underline%20%7D%0Aa%20%7Btext%2Ddecoration%3A%20none%7D%0A%2Etoolbar%20a%3Alink%20%7Bcolor%3A%20blue%7D%0A%2Etoolbar%20a%3Avisited%20%7Bcolor%3A%20blue%7D%0A%2Etoolbar%20a%3Aactive%20%7Bcolor%3A%20red%7D%0A%2Etoolbar%20a%3Ahover%20%7Bcolor%3A%20red%7D%0Aul%20%7B%20list%2Dstyle%2Dtype%3A%20square%3B%20%7D%0Aul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20disc%3B%20%7D%0Aul%20ul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20circle%3B%20%7D%0Aul%20ul%20ul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20disc%3B%20%7D%0Ali%20%7B%20margin%2Dleft%3A%200%2E5em%3B%20margin%2Dtop%3A%200%2E5em%3B%20%7D%0Ali%20li%20%7B%20font%2Dsize%3A%2085%25%3B%20font%2Dstyle%3A%20italic%20%7D%0Ali%20li%20li%20%7B%20font%2Dsize%3A%2085%25%3B%20font%2Dstyle%3A%20normal%20%7D%0Adiv%20dt%0A%7B%0Amargin%2Dleft%3A%200%3B%0Amargin%2Dtop%3A%201em%3B%0Amargin%2Dbottom%3A%200%2E5em%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Adiv%20dd%0A%7B%0Amargin%2Dleft%3A%202em%3B%0Amargin%2Dbottom%3A%200%2E5em%3B%0A%7D%0Ap%2Cpre%2Cul%2Col%2Cblockquote%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%2Cdl%2Ctable%20%7B%0Amargin%2Dleft%3A%201em%3B%0Amargin%2Dright%3A%201em%3B%0A%7D%0Ap%2Esubhead%20%7B%20font%2Dweight%3A%20bold%3B%20margin%2Dtop%3A%202em%3B%20%7D%0A%2Esmaller%20%7B%20font%2Dsize%3A%20smaller%20%7D%0A%2Ebigger%20%7B%20font%2Dsize%3A%20130%25%20%7D%0Atd%2Cth%20%7B%20padding%3A%200%2E2em%20%7D%0Aul%20%7B%0Amargin%3A%200%2E5em%201%2E5em%200%2E5em%201%2E5em%3B%0Apadding%3A%200%3B%0A%7D%0Aol%20%7B%0Amargin%3A%200%2E5em%201%2E5em%200%2E5em%201%2E5em%3B%0Apadding%3A%200%3B%0A%7D%0Aul%20%7B%20list%2Dstyle%2Dtype%3A%20square%3B%20%7D%0Aul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20disc%3B%20%7D%0Aul%20ul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20circle%3B%20%7D%0Aul%20ul%20ul%20ul%20%7B%20list%2Dstyle%2Dtype%3A%20disc%3B%20%7D%0Aul%20li%20%7B%20list%2Dstyle%3A%20square%3B%0Amargin%3A%200%2E1em%200em%200%2E6em%200%3B%0Apadding%3A%200%200%200%200%3B%0Aline%2Dheight%3A%20140%25%3B%0A%7D%0Aol%20li%20%7B%20margin%3A%200%2E1em%200em%200%2E6em%201%2E5em%3B%0Apadding%3A%200%200%200%200px%3B%0Aline%2Dheight%3A%20140%25%3B%0Alist%2Dstyle%2Dtype%3A%20decimal%3B%0A%7D%0Ali%20ul%20li%20%7B%20font%2Dsize%3A%2085%25%3B%20font%2Dstyle%3A%20italic%3B%0Alist%2Dstyle%2Dtype%3A%20disc%3B%0Abackground%3A%20transparent%3B%0Apadding%3A%200%200%200%200%3B%0A%7D%0Ali%20li%20ul%20li%20%7B%20font%2Dsize%3A%2085%25%3B%20font%2Dstyle%3A%20normal%3B%0Alist%2Dstyle%2Dtype%3A%20circle%3B%0Abackground%3A%20transparent%3B%0Apadding%3A%200%200%200%200%3B%0A%7D%0Ali%20li%20li%20ul%20li%20%7B%0Alist%2Dstyle%2Dtype%3A%20disc%3B%0Abackground%3A%20transparent%3B%0Apadding%3A%200%200%200%200%3B%0A%7D%0Ali%20ol%20li%20%7B%0Alist%2Dstyle%2Dtype%3A%20decimal%3B%0A%7D%0Ali%20li%20ol%20li%20%7B%0Alist%2Dstyle%2Dtype%3A%20decimal%3B%0A%7D%0A%0Aol%2Eoutline%20li%3Ahover%20%7B%20cursor%3A%20pointer%20%7D%0Aol%2Eoutline%20li%2Enofold%3Ahover%20%7B%20cursor%3A%20default%20%7D%0Aul%2Eoutline%20li%3Ahover%20%7B%20cursor%3A%20pointer%20%7D%0Aul%2Eoutline%20li%2Enofold%3Ahover%20%7B%20cursor%3A%20default%20%7D%0Aol%2Eoutline%20%7B%20list%2Dstyle%3Adecimal%3B%20%7D%0Aol%2Eoutline%20ol%20%7B%20list%2Dstyle%2Dtype%3Alower%2Dalpha%20%7D%0Aol%2Eoutline%20li%2Enofold%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAIACAMzMzOvr%2FywAAAAACQAJAAACD4SPoRvG614Dctb4MEMcFAA7%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aol%2Eoutline%20li%2Eunfolded%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAMPD%2F8zMzOvr%2F%2F%2F%2F%2FywAAAAACQAJAAACEYyPoivG614LAlg7ZZbxoR8UADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aol%2Eoutline%20li%2Efolded%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAMPD%2F8zMzOvr%2F%2F%2F%2F%2FywAAAAACQAJAAACFIyPoiu2sJyCyoF7W3hxz850CFIAADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aol%2Eoutline%20li%2Eunfolded%3Ahover%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAAAAAAAA%2F8PD%2F%2F%2F%2F%2FywAAAAACQAJAAACEYSPoivG614DIlg7ZZbxoQ8UADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aol%2Eoutline%20li%2Efolded%3Ahover%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAAAAAAAA%2F8PD%2F%2F%2F%2F%2FywAAAAACQAJAAACFISPoiu2sZyCyoV7G3hxz850CFIAADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aul%2Eoutline%20li%2Enofold%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAIACAMzMzOvr%2FywAAAAACQAJAAACD4SPoRvG614Dctb4MEMcFAA7%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aul%2Eoutline%20li%2Eunfolded%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAMPD%2F8zMzOvr%2F%2F%2F%2F%2FywAAAAACQAJAAACEYyPoivG614LAlg7ZZbxoR8UADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aul%2Eoutline%20li%2Efolded%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAMPD%2F8zMzOvr%2F%2F%2F%2F%2FywAAAAACQAJAAACFIyPoiu2sJyCyoF7W3hxz850CFIAADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aul%2Eoutline%20li%2Eunfolded%3Ahover%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAAAAAAAA%2F8PD%2F%2F%2F%2F%2FywAAAAACQAJAAACEYSPoivG614DIlg7ZZbxoQ8UADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0Aul%2Eoutline%20li%2Efolded%3Ahover%20%7B%0Apadding%3A%200%200%200%2020px%3B%0Abackground%3A%20transparent%20url%28data%3Aimage%2Fgif%3Bbase64%2CR0lGODdhCQAJAKEDAAAAAAAA%2F8PD%2F%2F%2F%2F%2FywAAAAACQAJAAACFISPoiu2sZyCyoV7G3hxz850CFIAADs%3D%29%20no%2Drepeat%200px%200%2E5em%3B%0A%7D%0A%0Aa%2Etitleslide%20%7B%20font%2Dweight%3A%20bold%3B%20font%2Dstyle%3A%20italic%20%7D%0A%0Aimg%2Ehidden%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0Adiv%2Einitial%5Fprompt%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0Adiv%2Eslide%20%7B%0Avisibility%3A%20visible%3B%0Aposition%3A%20inherit%3B%0A%7D%0Adiv%2Ehandout%20%7B%0Aborder%2Dtop%2Dstyle%3A%20solid%3B%0Aborder%2Dtop%2Dwidth%3A%20thin%3B%0Aborder%2Dtop%2Dcolor%3A%20black%3B%0A%7D%0A%40media%20screen%20%7B%0A%2Ehidden%20%7B%20display%3A%20none%3B%20visibility%3A%20visible%20%7D%0Adiv%2Eslide%2Ehidden%20%7B%20display%3A%20block%3B%20visibility%3A%20visible%20%7D%0Adiv%2Ehandout%2Ehidden%20%7B%20display%3A%20block%3B%20visibility%3A%20visible%20%7D%0Adiv%2Ebackground%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0Abody%2Esingle%5Fslide%20div%2Einitial%5Fprompt%20%7B%20display%3A%20block%3B%20visibility%3A%20visible%20%7D%0Abody%2Esingle%5Fslide%20div%2Ebackground%20%7B%20display%3A%20block%3B%20visibility%3A%20visible%20%7D%0Abody%2Esingle%5Fslide%20div%2Ebackground%2Ehidden%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0Abody%2Esingle%5Fslide%20%2Einvisible%20%7B%20visibility%3A%20hidden%20%7D%0Abody%2Esingle%5Fslide%20%2Ehidden%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0Abody%2Esingle%5Fslide%20div%2Eslide%20%7B%20position%3A%20absolute%20%7D%0Abody%2Esingle%5Fslide%20div%2Ehandout%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%20%7D%0A%7D%0A%40media%20print%20%7B%0A%2Ehidden%20%7B%20display%3A%20block%3B%20visibility%3A%20visible%20%7D%0Adiv%2Eslide%20pre%20%7B%20font%2Dsize%3A%2060%25%3B%20padding%2Dleft%3A%200%2E5em%3B%20%7D%0Adiv%2Etoolbar%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%3B%20%7D%0Adiv%2Eslidy%5Ftoc%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%3B%20%7D%0Adiv%2Ebackground%20%7B%20display%3A%20none%3B%20visibility%3A%20hidden%3B%20%7D%0Adiv%2Eslide%20%7B%20page%2Dbreak%2Dbefore%3A%20always%20%7D%0A%0Adiv%2Eslide%2Efirst%2Dslide%20%7B%20page%2Dbreak%2Dbefore%3A%20avoid%20%7D%0A%7D%0A%0A%0A%2Ejslider%20table%20%7B%0Amargin%2Dleft%3A%200em%3B%0Amargin%2Dright%3A%200em%3B%0A%7D%0A%0Atable%2EdataTable%2C%20%2Eshiny%2Ddatatable%2Doutput%20div%20%7B%0Afont%2Dsize%3A%2014pt%3B%0A%7D%0A%0A%2EdataTables%5Finfo%2C%20%2EdataTables%5Fpaginate%20%7B%0Afont%2Dsize%3A%2019px%3B%0A%7D%0A%0Apre%2EsourceCode%2C%20code%2EsourceCode%20%7B%0Afont%2Dsize%3A%2080%25%3B%0A%7D%0A%0Alabel%2C%20button%2C%20input%2C%20select%2C%20textarea%20%7B%0Afont%2Dsize%3A%2014pt%3B%0A%7D%0A%0Aul%2Enav%2C%20ul%2Enav%20li%20%7B%0Alist%2Dstyle%2Dtype%3A%20none%3B%0A%7D%0A" rel="stylesheet" type="text/css" media="screen, projection, print" />
<script src="data:application/x-javascript;base64,Lyogc2xpZHkuanMKCiAgIENvcHlyaWdodCAoYykgMjAwNS0yMDEzIFczQyAoTUlULCBFUkNJTSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgIFczQyBsaWFiaWxpdHksIHRyYWRlbWFyaywgZG9jdW1lbnQgdXNlIGFuZCBzb2Z0d2FyZSBsaWNlbnNpbmcKICAgcnVsZXMgYXBwbHksIHNlZToKCiAgIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LWRvY3VtZW50cwogICBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZQoKICAgRGVmaW5lcyBzaW5nbGUgbmFtZSAidzNjX3NsaWR5IiBpbiBnbG9iYWwgbmFtZXNwYWNlCiAgIEFkZHMgZXZlbnQgaGFuZGxlcnMgd2l0aG91dCB0cmFtcGxpbmcgb24gYW55IG90aGVycwoqLwoKLy8gdGhlIHNsaWR5IG9iamVjdCBpbXBsZW1lbnRhdGlvbgp2YXIgdzNjX3NsaWR5ID0gewogIC8vIGNsYXNzaWZ5IHdoaWNoIGtpbmQgb2YgYnJvd3NlciB3ZSdyZSBydW5uaW5nIHVuZGVyCiAgbnNfcG9zOiAodHlwZW9mIHdpbmRvdy5wYWdlWU9mZnNldCE9J3VuZGVmaW5lZCcpLAogIGtodG1sOiAoKG5hdmlnYXRvci51c2VyQWdlbnQpLmluZGV4T2YoIktIVE1MIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgb3BlcmE6ICgobmF2aWdhdG9yLnVzZXJBZ2VudCkuaW5kZXhPZigiT3BlcmEiKSA+PSAwID8gdHJ1ZSA6IGZhbHNlKSwKICBpcGFkOiAoKG5hdmlnYXRvci51c2VyQWdlbnQpLmluZGV4T2YoImlQYWQiKSA+PSAwID8gdHJ1ZSA6IGZhbHNlKSwKICBpcGhvbmU6ICgobmF2aWdhdG9yLnVzZXJBZ2VudCkuaW5kZXhPZigiaVBob25lIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgYW5kcm9pZDogKChuYXZpZ2F0b3IudXNlckFnZW50KS5pbmRleE9mKCJBbmRyb2lkIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgaWU6ICh0eXBlb2YgZG9jdW1lbnQuYWxsICE9ICJ1bmRlZmluZWQiICYmICF0aGlzLm9wZXJhKSwKICBpZTY6ICghdGhpcy5uc19wb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDYiKSAhPSAtMSksCiAgaWU3OiAoIXRoaXMubnNfcG9zICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSA3IikgIT0gLTEpLAogIGllODogKCF0aGlzLm5zX3BvcyAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUgOCIpICE9IC0xKSwKICBpZTk6ICghdGhpcy5uc19wb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDkiKSAhPSAtMSksCgogIC8vIGRhdGEgZm9yIHN3aXBlIGFuZCBkb3VibGUgdGFwIGRldGVjdGlvbiBvbiB0b3VjaCBzY3JlZW5zCiAgbGFzdF90YXA6IDAsCiAgcHJldl90YXA6IDAsCiAgc3RhcnRfeDogMCwKICBzdGFydF95OiAwLAogIGRlbHRhX3g6IDAsCiAgZGVsdGFfeTogMCwKCiAgLy8gYXJlIHdlIHJ1bm5pbmcgYXMgWEhUTUw/IChkb2Vzbid0IHdvcmsgb24gT3BlcmEpCiAgaXNfeGh0bWw6IC94bWwvLnRlc3QoZG9jdW1lbnQuY29udGVudFR5cGUpLAoKICBzbGlkZV9udW1iZXI6IDAsIC8vIGludGVnZXIgc2xpZGUgY291bnQ6IDAsIDEsIDIsIC4uLgogIHNsaWRlX251bWJlcl9lbGVtZW50OiBudWxsLCAvLyBlbGVtZW50IGNvbnRhaW5pbmcgc2xpZGUgbnVtYmVyCiAgc2xpZGVzOiBbXSwgLy8gc2V0IHRvIGFycmF5IG9mIHNsaWRlIGRpdidzCiAgbm90ZXM6IFtdLCAvLyBzZXQgdG8gYXJyYXkgb2YgaGFuZG91dCBkaXYncwogIGJhY2tncm91bmRzOiBbXSwgLy8gc2V0IHRvIGFycmF5IG9mIGJhY2tncm91bmQgZGl2J3MKICBvYnNlcnZlcnM6IFtdLCAvLyBsaXN0IG9mIG9ic2VydmVyIGZ1bmN0aW9ucwogIHRvb2xiYXI6IG51bGwsIC8vIGVsZW1lbnQgY29udGFpbmluZyB0b29sYmFyCiAgdGl0bGU6IG51bGwsIC8vIGRvY3VtZW50IHRpdGxlCiAgbGFzdF9zaG93bjogbnVsbCwgLy8gbGFzdCBpbmNyZW1lbnRhbGx5IHNob3duIGl0ZW0KICBlb3M6IG51bGwsICAvLyBzcGFuIGVsZW1lbnQgZm9yIGVuZCBvZiBzbGlkZSBpbmRpY2F0b3IKICB0b2M6IG51bGwsIC8vIHRhYmxlIG9mIGNvbnRlbnRzCiAgb3V0bGluZTogbnVsbCwgLy8gb3V0bGluZSBlbGVtZW50IHdpdGggdGhlIGZvY3VzCiAgc2VsZWN0ZWRfdGV4dF9sZW46IDAsIC8vIGxlbmd0aCBvZiBkcmFnIHNlbGVjdGlvbiBvbiBkb2N1bWVudAogIHZpZXdfYWxsOiAwLCAgLy8gMSB0byB2aWV3IGFsbCBzbGlkZXMgKyBoYW5kb3V0cwogIHdhbnRfdG9vbGJhcjogdHJ1ZSwgIC8vIHVzZXIgcHJlZmVyZW5jZSB0byBzaG93L2hpZGUgdG9vbGJhcgogIG1vdXNlX2NsaWNrX2VuYWJsZWQ6IHRydWUsIC8vIGVuYWJsZXMgbGVmdCBjbGljayBmb3IgbmV4dCBzbGlkZQogIHNjcm9sbF9oYWNrOiAwLCAvLyBJRSB3b3JrIGFyb3VuZCBmb3IgcG9zaXRpb246IGZpeGVkCiAgZGlzYWJsZV9zbGlkZV9jbGljazogZmFsc2UsICAvLyB1c2VkIGJ5IGNsaWNrZWQgYW5jaG9ycwoKICBsYW5nOiAiZW4iLCAvLyB1cGRhdGVkIHRvIGxhbmd1YWdlIHNwZWNpZmllZCBieSBodG1sIGZpbGUKCiAgaGVscF9hbmNob3I6IG51bGwsIC8vIHVzZWQgZm9yIGtleWJvYXJkIGZvY3VzIGhhY2sgaW4gc2hvd1Rvb2xiYXIoKQogIGhlbHBfcGFnZTogImh0dHA6Ly93d3cudzMub3JnL1RhbGtzL1Rvb2xzL1NsaWR5Mi9oZWxwL2hlbHAuaHRtbCIsCiAgaGVscF90ZXh0OiAiTmF2aWdhdGUgd2l0aCBtb3VzZSBjbGljaywgc3BhY2UgYmFyLCBDdXJzb3IgTGVmdC9SaWdodCwgIiArCiAgICAgICAgICAgICAib3IgUGcgVXAgYW5kIFBnIERuLiBVc2UgUyBhbmQgQiB0byBjaGFuZ2UgZm9udCBzaXplLiIsCgogIHNpemVfaW5kZXg6IDAsCiAgc2l6ZV9hZGp1c3RtZW50OiAwLAogIHNpemVzOiAgbmV3IEFycmF5KCIxMHB0IiwgIjEycHQiLCAiMTRwdCIsICIxNnB0IiwgIjE4cHQiLCAiMjBwdCIsCiAgICAgICAgICAgICAgICAgICAgIjIycHQiLCAiMjRwdCIsICIyNnB0IiwgIjI4cHQiLCAiMzBwdCIsICIzMnB0IiksCgogIC8vIG5lZWRlZCBmb3IgZWZmaWNpZW50IHJlc2l6aW5nCiAgbGFzdF93aWR0aDogMCwKICBsYXN0X2hlaWdodDogMCwKCgogIC8vIE5lZWRlZCBmb3IgY3Jvc3MgYnJvd3NlciBzdXBwb3J0IGZvciByZWxhdGl2ZSB3aWR0aC9oZWlnaHQgb24KICAvLyBvYmplY3QgZWxlbWVudHMuIFRoZSB3b3JrIGFyb3VuZCBpcyB0byBzYXZlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzCiAgLy8gYW5kIHRoZW4gdG8gcmVjb21wdXRlIGFic29sdXRlIHdpZHRoL2hlaWdodCBkaW1lbnNpb25zIG9uIHJlc2l6aW5nCiAgIG9iamVjdHM6IFtdLAoKICAvLyBhdHRhY2ggaW5pdGlhbGlhdGlvbiBldmVudCBoYW5kbGVycwogIHNldF91cDogZnVuY3Rpb24gKCkgewogICAgdmFyIGluaXQgPSBmdW5jdGlvbigpIHsgdzNjX3NsaWR5LmluaXQoKTsgfTsKICAgIGlmICh0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT0gInVuZGVmaW5lZCIpCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgaW5pdCwgZmFsc2UpOwogICAgZWxzZQogICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsIGluaXQpOwogIH0sCgogIGhpZGVfc2xpZGVzOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiAhdzNjX3NsaWR5LmluaXRpYWxpemVkKQogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIGVsc2UKICAgICAgc2V0VGltZW91dCh3M2Nfc2xpZHkuaGlkZV9zbGlkZXMsIDUwKTsKICB9LAoKICAvLyBoYWNrIHRvIHBlcnN1YWRlIElFIHRvIGNvbXB1dGUgY29ycmVjdCBkb2N1bWVudCBoZWlnaHQKICAvLyBhcyBuZWVkZWQgZm9yIHNpbXVsYXRpbmcgZml4ZWQgcG9zaXRpb25pbmcgb2YgdG9vbGJhcgogIGllX2hhY2s6IGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5yZXNpemVCeSgwLC0xKTsKICAgIHdpbmRvdy5yZXNpemVCeSgwLCAxKTsKICB9LAoKICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAvL2FsZXJ0KCJzbGlkeSBzdGFydGluZyB0ZXN0IDEwIik7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CiAgICB0aGlzLmluaXRfbG9jYWxpemF0aW9uKCk7CiAgICB0aGlzLmFkZF90b29sYmFyKCk7CiAgICB0aGlzLndyYXBfaW1wbGljaXRfc2xpZGVzKCk7CiAgICB0aGlzLmNvbGxlY3Rfc2xpZGVzKCk7CiAgICB0aGlzLmNvbGxlY3Rfbm90ZXMoKTsKICAgIHRoaXMuY29sbGVjdF9iYWNrZ3JvdW5kcygpOwogICAgdGhpcy5vYmplY3RzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0Iik7CiAgICB0aGlzLnBhdGNoX2FuY2hvcnMoKTsKICAgIHRoaXMuc2xpZGVfbnVtYmVyID0gdGhpcy5maW5kX3NsaWRlX251bWJlcihsb2NhdGlvbi5ocmVmKTsKICAgIHdpbmRvdy5vZmZzY3JlZW5idWZmZXJpbmcgPSB0cnVlOwogICAgdGhpcy5zaXplX2FkanVzdG1lbnQgPSB0aGlzLmZpbmRfc2l6ZV9hZGp1c3QoKTsKICAgIHRoaXMudGltZV9sZWZ0ID0gdGhpcy5maW5kX2R1cmF0aW9uKCk7CiAgICB0aGlzLmhpZGVfaW1hZ2VfdG9vbGJhcigpOyAgLy8gc3VwcHJlc3MgSUUgaW1hZ2UgdG9vbGJhciBwb3B1cAogICAgdGhpcy5pbml0X291dGxpbmVyKCk7ICAvLyBhY3RpdmF0ZSBmb2xkL3VuZm9sZCBzdXBwb3J0CiAgICB0aGlzLnRpdGxlID0gZG9jdW1lbnQudGl0bGU7CiAgICB0aGlzLmtleWJvYXJkbGVzcyA9ICh0aGlzLmlwYWR8fHRoaXMuaXBob25lfHx0aGlzLmFuZHJvaWQpOwoKICAgIGlmICh0aGlzLmtleWJvYXJkbGVzcykKICAgIHsKICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgIHRoaXMud2FudF90b29sYmFyID0gMDsKICAgIH0KCiAgICAvLyB3b3JrIGFyb3VuZCBmb3Igb3BlcmEgYnVnCiAgICB0aGlzLmlzX3hodG1sID0gKGRvY3VtZW50LmJvZHkudGFnTmFtZSA9PSAiQk9EWSIgPyBmYWxzZSA6IHRydWUpOwoKICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiAwKQogICAgewogICAgICB2YXIgc2xpZGUgPSB0aGlzLnNsaWRlc1t0aGlzLnNsaWRlX251bWJlcl07CiAgIAogICAgICBpZiAodGhpcy5zbGlkZV9udW1iZXIgPiAwKQogICAgICB7CiAgICAgICAgdGhpcy5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICAgICAgICB0aGlzLmxhc3Rfc2hvd24gPSB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obnVsbCk7CiAgICAgICAgdGhpcy5zZXRfZW9zX3N0YXR1cyh0cnVlKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0aGlzLmxhc3Rfc2hvd24gPSBudWxsOwogICAgICAgIHRoaXMuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJoaWRkZW4iKTsKICAgICAgICB0aGlzLnNldF9lb3Nfc3RhdHVzKCF0aGlzLm5leHRfaW5jcmVtZW50YWxfaXRlbSh0aGlzLmxhc3Rfc2hvd24pKTsKICAgICAgfQoKICAgICAgdGhpcy5zZXRfbG9jYXRpb24oKTsKICAgICAgdGhpcy5hZGRfY2xhc3ModGhpcy5zbGlkZXNbMF0sICJmaXJzdC1zbGlkZSIpOwogICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZShzbGlkZSk7CiAgICB9CgogICAgdGhpcy50b2MgPSB0aGlzLnRhYmxlX29mX2NvbnRlbnRzKCk7CgogICAgdGhpcy5hZGRfaW5pdGlhbF9wcm9tcHQoKTsKCiAgICAvLyBiaW5kIGV2ZW50IGhhbmRsZXJzIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBjdXN0b20gcGFnZSBzY3JpcHRzCiAgICAvLyBUYXAgZXZlbnRzIGJlaGF2ZSB0b28gd2VpcmRseSB0byBzdXBwb3J0IGNsaWNrcyByZWxpYWJseSBvbgogICAgLy8gaVBob25lIGFuZCBpUGFkLCBzbyBleGNsdWRlIHRoZXNlIGZyb20gY2xpY2sgaGFuZGxlcgoKICAgIGlmICghdGhpcy5rZXlib2FyZGxlc3MpCiAgICB7CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LmJvZHksICJjbGljayIsIHRoaXMubW91c2VfYnV0dG9uX2NsaWNrKTsKICAgICAgdGhpcy5hZGRfbGlzdGVuZXIoZG9jdW1lbnQuYm9keSwgIm1vdXNlZG93biIsIHRoaXMubW91c2VfYnV0dG9uX2Rvd24pOwogICAgfQoKICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LCAia2V5ZG93biIsIHRoaXMua2V5X2Rvd24pOwogICAgdGhpcy5hZGRfbGlzdGVuZXIoZG9jdW1lbnQsICJrZXlwcmVzcyIsIHRoaXMua2V5X3ByZXNzKTsKICAgIHRoaXMuYWRkX2xpc3RlbmVyKHdpbmRvdywgInJlc2l6ZSIsIHRoaXMucmVzaXplZCk7CiAgICB0aGlzLmFkZF9saXN0ZW5lcih3aW5kb3csICJzY3JvbGwiLCB0aGlzLnNjcm9sbGVkKTsKICAgIHRoaXMuYWRkX2xpc3RlbmVyKHdpbmRvdywgInVubG9hZCIsIHRoaXMudW5sb2FkZWQpOwoKICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LCAiZ2VzdHVyZWNoYW5nZSIsIGZ1bmN0aW9uICgpCiAgICB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgIHRoaXMuYXR0YWNoX3RvdWNoX2hhbmRlcnModGhpcy5zbGlkZXMpOwoKICAgIC8vIHRoaXMgc2VlbXMgdG8gYmUgYSBkZWJ1Z2dpbmcgaGFjawogICAgLy9pZiAoIWRvY3VtZW50LmJvZHkub25jbGljaykKICAgIC8vICBkb2N1bWVudC5ib2R5Lm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IH07CgogICAgdGhpcy5zaW5nbGVfc2xpZGVfdmlldygpOwoKICAgIC8vdGhpcy5zZXRfbG9jYXRpb24oKTsKCiAgICB0aGlzLnJlc2l6ZWQoKTsKCiAgICBpZiAodGhpcy5pZTcpCiAgICAgIHNldFRpbWVvdXQodzNjX3NsaWR5LmllX2hhY2ssIDEwMCk7CgogICAgdGhpcy5zaG93X3Rvb2xiYXIoKTsKCiAgICAvLyBmb3IgYmFjayBidXR0b24gZGV0ZWN0aW9uCiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IHczY19zbGlkeS5jaGVja19sb2NhdGlvbigpOyB9LCAyMDApOwogICAgdzNjX3NsaWR5LmluaXRpYWxpemVkID0gdHJ1ZTsKICB9LAoKICAvLyBjcmVhdGUgZGl2IGVsZW1lbnQgd2l0aCBsaW5rcyB0byBlYWNoIHNsaWRlCiAgdGFibGVfb2ZfY29udGVudHM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciB0b2MgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKTsKICAgIHRoaXMuYWRkX2NsYXNzKHRvYywgInNsaWR5X3RvYyBoaWRkZW4iKTsKICAgIC8vdG9jLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwoKICAgIHZhciBoZWFkaW5nID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmFkZF9jbGFzcyhoZWFkaW5nLCAidG9jLWhlYWRpbmciKTsKICAgIGhlYWRpbmcuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgiVGFibGUgb2YgQ29udGVudHMiKTsKCiAgICB0b2MuYXBwZW5kQ2hpbGQoaGVhZGluZyk7CiAgICB2YXIgcHJldmlvdXMgPSBudWxsOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIHZhciB0aXRsZSA9IHRoaXMuaGFzX2NsYXNzKHRoaXMuc2xpZGVzW2ldLCAidGl0bGUiKTsKICAgICAgdmFyIG51bSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKChpICsgMSkgKyAiLiAiKTsKCiAgICAgIHRvYy5hcHBlbmRDaGlsZChudW0pOwoKICAgICAgdmFyIGEgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJhIik7CiAgICAgIGEuc2V0QXR0cmlidXRlKCJocmVmIiwgIiMoIiArIChpKzEpICsgIikiKTsKCiAgICAgIGlmICh0aXRsZSkKICAgICAgICB0aGlzLmFkZF9jbGFzcyhhLCAidGl0bGVzbGlkZSIpOwoKICAgICAgdmFyIG5hbWUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnNsaWRlX25hbWUoaSkpOwogICAgICBhLmFwcGVuZENoaWxkKG5hbWUpOwogICAgICBhLm9uY2xpY2sgPSB3M2Nfc2xpZHkudG9jX2NsaWNrOwogICAgICBhLm9ua2V5ZG93biA9IHczY19zbGlkeS50b2Nfa2V5X2Rvd247CiAgICAgIGEucHJldmlvdXMgPSBwcmV2aW91czsKCiAgICAgIGlmIChwcmV2aW91cykKICAgICAgICBwcmV2aW91cy5uZXh0ID0gYTsKCiAgICAgIHRvYy5hcHBlbmRDaGlsZChhKTsKCiAgICAgIGlmIChpID09IDApCiAgICAgICAgdG9jLmZpcnN0ID0gYTsKCiAgICAgIGlmIChpIDwgdGhpcy5zbGlkZXMubGVuZ3RoIC0gMSkKICAgICAgewogICAgICAgIHZhciBiciA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImJyIik7CiAgICAgICAgdG9jLmFwcGVuZENoaWxkKGJyKTsKICAgICAgfQoKICAgICAgcHJldmlvdXMgPSBhOwogICAgfQoKICAgIHRvYy5mb2N1cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKHRoaXMuZmlyc3QpCiAgICAgICAgdGhpcy5maXJzdC5mb2N1cygpOwogICAgfQoKICAgIHRvYy5vbm1vdXNldXAgPSB3M2Nfc2xpZHkubW91c2VfYnV0dG9uX3VwOwoKICAgIHRvYy5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgZXx8KGU9d2luZG93LmV2ZW50KTsKCiAgICAgIGlmICh3M2Nfc2xpZHkuc2VsZWN0ZWRfdGV4dF9sZW4gPD0gMCkKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfdGFibGVfb2ZfY29udGVudHModHJ1ZSk7CgogICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKICAgIAogICAgICBpZiAoZS5jYW5jZWwgIT0gdW5kZWZpbmVkKQogICAgICAgIGUuY2FuY2VsID0gdHJ1ZTsKICAgICAgCiAgICAgIGlmIChlLnJldHVyblZhbHVlICE9IHVuZGVmaW5lZCkKICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgIAogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRvYywgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKICAgIHJldHVybiB0b2M7CiAgfSwKCiAgaXNfc2hvd25fdG9jOiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gIXczY19zbGlkeS5oYXNfY2xhc3ModzNjX3NsaWR5LnRvYywgImhpZGRlbiIpOwogIH0sCgogIHNob3dfdGFibGVfb2ZfY29udGVudHM6IGZ1bmN0aW9uICgpIHsKICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3ModzNjX3NsaWR5LnRvYywgImhpZGRlbiIpOwogICAgdmFyIHRvYyA9IHczY19zbGlkeS50b2M7CiAgICB0b2MuZm9jdXMoKTsKCiAgICBpZiAodzNjX3NsaWR5LmllNyAmJiB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID09IDApCiAgICAgIHNldFRpbWVvdXQodzNjX3NsaWR5LmllX2hhY2ssIDEwMCk7CiAgfSwKCiAgaGlkZV90YWJsZV9vZl9jb250ZW50czogZnVuY3Rpb24gKGZvY3VzKSB7CiAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKHczY19zbGlkeS50b2MsICJoaWRkZW4iKTsKCiAgICBpZiAoZm9jdXMgJiYgIXczY19zbGlkeS5vcGVyYSAmJgogICAgICAgICF3M2Nfc2xpZHkuaGFzX2NsYXNzKHczY19zbGlkeS50b2MsICJoaWRkZW4iKSkKICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogIH0sCgogIHRvZ2dsZV90YWJsZV9vZl9jb250ZW50czogZnVuY3Rpb24gKCkgewogICAgaWYgKHczY19zbGlkeS5pc19zaG93bl90b2MoKSkKICAgICAgdzNjX3NsaWR5LmhpZGVfdGFibGVfb2ZfY29udGVudHModHJ1ZSk7CiAgICBlbHNlCiAgICAgIHczY19zbGlkeS5zaG93X3RhYmxlX29mX2NvbnRlbnRzKCk7CiAgfSwKCiAgLy8gY2FsbGVkIG9uIGNsaWNraW5nIHRvYyBlbnRyeQogIHRvY19jbGljazogZnVuY3Rpb24gKGUpIHsKICAgIGlmICghZSkKICAgICAgZSA9IHdpbmRvdy5ldmVudDsKCiAgICB2YXIgdGFyZ2V0ID0gdzNjX3NsaWR5LmdldF90YXJnZXQoZSk7CgogICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMSkKICAgIHsKICAgICAgdmFyIHVyaSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKCiAgICAgIGlmICh1cmkpCiAgICAgIHsKICAgICAgICAvL2FsZXJ0KCJnb2luZyB0byAiICsgdXJpKTsKICAgICAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5oaWRlX3NsaWRlKHNsaWRlKTsKICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID0gdzNjX3NsaWR5LmZpbmRfc2xpZGVfbnVtYmVyKHVyaSk7CiAgICAgICAgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CiAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgiaGlkZGVuIik7CiAgICAgICAgdzNjX3NsaWR5LnNldF9lb3Nfc3RhdHVzKCF3M2Nfc2xpZHkubmV4dF9pbmNyZW1lbnRhbF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKSk7CiAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICAgIC8vdGFyZ2V0LmZvY3VzKCk7CgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmICghdzNjX3NsaWR5Lm9wZXJhKQogICAgICAgICAgICB3M2Nfc2xpZHkuc2V0X2ZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKQogICAgICAgIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB3M2Nfc2xpZHkuaGlkZV90YWJsZV9vZl9jb250ZW50cyh0cnVlKTsKICAgIGlmICh3M2Nfc2xpZHkuaWU3KSB3M2Nfc2xpZHkuaWVfaGFjaygpOwogICAgdzNjX3NsaWR5LnN0b3BfcHJvcGFnYXRpb24oZSk7CiAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChlKTsKICB9LAoKICAvLyBjYWxsZWQgb25rZXlkb3duIGZvciB0b2MgZW50cnkKICB0b2Nfa2V5X2Rvd246IGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIGtleTsKCiAgICBpZiAoIWV2ZW50KQogICAgICB2YXIgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh3aW5kb3cuZXZlbnQpCiAgICAgIGtleSA9IHdpbmRvdy5ldmVudC5rZXlDb2RlOwogICAgZWxzZSBpZiAoZXZlbnQud2hpY2gpCiAgICAgIGtleSA9IGV2ZW50LndoaWNoOwogICAgZWxzZQogICAgICByZXR1cm4gdHJ1ZTsgLy8gWWlrZXMhIHVua25vd24gYnJvd3NlcgoKICAgIC8vIGlnbm9yZSBldmVudCBpZiBrZXkgdmFsdWUgaXMgemVybwogICAgLy8gYXMgZm9yIGFsdCBvbiBPcGVyYSBhbmQgS29ucXVlcm9yCiAgICBpZiAoIWtleSkKICAgICAgcmV0dXJuIHRydWU7CgogICAgLy8gY2hlY2sgZm9yIGNvbmN1cnJlbnQgY29udHJvbC9jb21tYW5kL2FsdCBrZXkKICAgIC8vIGJ1dCBhcmUgdGhlc2Ugb25seSBwcmVzZW50IG9uIG1vdXNlIGV2ZW50cz8KCiAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmIChrZXkgPT0gMTMpCiAgICB7CiAgICAgIHZhciB1cmkgPSB0aGlzLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwoKICAgICAgaWYgKHVyaSkKICAgICAgewogICAgICAgIC8vYWxlcnQoImdvaW5nIHRvICIgKyB1cmkpOwogICAgICAgdmFyIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkuaGlkZV9zbGlkZShzbGlkZSk7CiAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5maW5kX3NsaWRlX251bWJlcih1cmkpOwogICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IG51bGw7CiAgICAgICAgdzNjX3NsaWR5LnNldF9sb2NhdGlvbigpOwogICAgICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoImhpZGRlbiIpOwogICAgICAgIHczY19zbGlkeS5zZXRfZW9zX3N0YXR1cyghdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbSh3M2Nfc2xpZHkubGFzdF9zaG93bikpOwogICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgICAvL3RhcmdldC5mb2N1cygpOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoIXczY19zbGlkeS5vcGVyYSkKICAgICAgICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkKICAgICAgICB7CiAgICAgICAgfQogICAgICB9CgogICAgICB3M2Nfc2xpZHkuaGlkZV90YWJsZV9vZl9jb250ZW50cyh0cnVlKTsKCiAgICAgIGlmIChzZWxmLmllNykKICAgICAgIHczY19zbGlkeS5pZV9oYWNrKCk7CgogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CgogICAgaWYgKGtleSA9PSA0MCAmJiB0aGlzLm5leHQpCiAgICB7CiAgICAgIHRoaXMubmV4dC5mb2N1cygpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CgogICAgaWYgKGtleSA9PSAzOCAmJiB0aGlzLnByZXZpb3VzKQogICAgewogICAgICB0aGlzLnByZXZpb3VzLmZvY3VzKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICB0b3VjaHN0YXJ0OiBmdW5jdGlvbiAoZSkKICB7CiAgICAvLyBhIGRvdWJsZSB0b3VjaCBvZnRlbiBzdGFydHMgd2l0aCBhCiAgICAvLyBzaW5nbGUgdG91Y2ggZHVlIHRvIGZpbmdlcnMgdG91Y2hpbmcKICAgIC8vIGRvd24gYXQgc2xpZ2h0bHkgZGlmZmVyZW50IHRpbWVzCiAgICAvLyB0aHVzIGF2b2lkIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaGVyZQogICAgdGhpcy5wcmV2X3RhcCA9IHRoaXMubGFzdF90YXA7CiAgICB0aGlzLmxhc3RfdGFwID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7CgogICAgdmFyIHRhcF9kZWxheSA9IHRoaXMubGFzdF90YXAgLSB0aGlzLnByZXZfdGFwOwoKICAgIGlmICh0YXBfZGVsYXkgPD0gMjAwKQogICAgewogICAgICAvLyBkb3VibGUgdGFwCiAgICB9CgogICAgdmFyIHRvdWNoID0gZS50b3VjaGVzWzBdOwoKICAgIHRoaXMucGFnZVggPSB0b3VjaC5wYWdlWDsKICAgIHRoaXMucGFnZVkgPSB0b3VjaC5wYWdlWTsKICAgIHRoaXMuc2NyZWVuWCA9IHRvdWNoLnNjcmVlblg7CiAgICB0aGlzLnNjcmVlblkgPSB0b3VjaC5zY3JlZW5ZOwogICAgdGhpcy5jbGllbnRYID0gdG91Y2guY2xpZW50WDsKICAgIHRoaXMuY2xpZW50WSA9IHRvdWNoLmNsaWVudFk7CgogICAgdGhpcy5kZWx0YV94ID0gdGhpcy5kZWx0YV95ID0gMDsKICB9LAoKICB0b3VjaG1vdmU6IGZ1bmN0aW9uIChlKQogIHsKICAgIC8vIG92ZXJyaWRlIG5hdGl2ZSBnZXN0dXJlcyBmb3Igc2luZ2xlIHRvdWNoCiAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+IDEpCiAgICAgIHJldHVybjsKCiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB2YXIgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICB0aGlzLmRlbHRhX3ggPSB0b3VjaC5wYWdlWCAtIHRoaXMucGFnZVg7CiAgICB0aGlzLmRlbHRhX3kgPSB0b3VjaC5wYWdlWSAtIHRoaXMucGFnZVk7CiAgfSwKCiAgdG91Y2hlbmQ6IGZ1bmN0aW9uIChlKQogIHsKICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIG11bHRpLXRvdWNoCiAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+IDEpCiAgICAgIHJldHVybjsKCiAgICB2YXIgZGVsYXkgPSAobmV3IERhdGUpLmdldFRpbWUoKSAtIHRoaXMubGFzdF90YXA7CiAgICB2YXIgZHggPSB0aGlzLmRlbHRhX3g7CiAgICB2YXIgZHkgPSB0aGlzLmRlbHRhX3k7CiAgICB2YXIgYWJzX2R4ID0gTWF0aC5hYnMoZHgpOwogICAgdmFyIGFic19keSA9IE1hdGguYWJzKGR5KTsKCiAgICBpZiAoZGVsYXkgPCA1MDAgJiYgKGFic19keCA+IDEwMCB8fCBhYnNfZHkgPiAxMDApKQogICAgewogICAgICBpZiAoYWJzX2R4ID4gMC41ICogYWJzX2R5KQogICAgICB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICBpZiAoZHggPCAwKQogICAgICAgICAgdzNjX3NsaWR5Lm5leHRfc2xpZGUodHJ1ZSk7CiAgICAgICAgZWxzZQogICAgICAgICAgdzNjX3NsaWR5LnByZXZpb3VzX3NsaWRlKHRydWUpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGFic19keSA+IDIgKiBhYnNfZHgpCiAgICAgIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdzNjX3NsaWR5LnRvZ2dsZV90YWJsZV9vZl9jb250ZW50cygpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gIyMjIE9CU09MRVRFICMjIwogIGJlZm9yZV9wcmludDogZnVuY3Rpb24gKCkgewogICAgdGhpcy5zaG93X2FsbF9zbGlkZXMoKTsKICAgIHRoaXMuaGlkZV90b29sYmFyKCk7CiAgICBhbGVydCgiYmVmb3JlIHByaW50Iik7CiAgfSwKCiAgLy8gIyMjIE9CU09MRVRFICMjIwogIGFmdGVyX3ByaW50OiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIXRoaXMudmlld19hbGwpCiAgICB7CiAgICAgIHRoaXMuc2luZ2xlX3NsaWRlX3ZpZXcoKTsKICAgICAgdGhpcy5zaG93X3Rvb2xiYXIoKTsKICAgIH0KICAgIGFsZXJ0KCJhZnRlciBwcmludCIpOwogIH0sCgogIC8vICMjIyBPQlNPTEVURSAjIyMKICBwcmludF9zbGlkZXM6IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuYmVmb3JlX3ByaW50KCk7CiAgICB3aW5kb3cucHJpbnQoKTsKICAgIHRoaXMuYWZ0ZXJfcHJpbnQoKTsKICB9LAoKICAvLyAjIyMgT0JTT0xFVEUgPz8gIyMjCiAgdG9nZ2xlX3ZpZXc6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnZpZXdfYWxsKQogICAgewogICAgICB0aGlzLnNpbmdsZV9zbGlkZV92aWV3KCk7CiAgICAgIHRoaXMuc2hvd190b29sYmFyKCk7CiAgICAgIHRoaXMudmlld19hbGwgPSAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICB0aGlzLnNob3dfYWxsX3NsaWRlcygpOwogICAgICB0aGlzLmhpZGVfdG9vbGJhcigpOwogICAgICB0aGlzLnZpZXdfYWxsID0gMTsKICAgIH0KICB9LAoKICAvLyBwcmVwYXJlIGZvciBwcmludGluZyAgIyMjIE9CU09MRVRFICMjIwogIHNob3dfYWxsX3NsaWRlczogZnVuY3Rpb24gKCkgewogICAgdGhpcy5yZW1vdmVfY2xhc3MoZG9jdW1lbnQuYm9keSwgInNpbmdsZV9zbGlkZSIpOwogICAgdGhpcy5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICB9LAoKICAvLyByZXN0b3JlIGFmdGVyIHByaW50aW5nICAjIyMgT0JTT0xFVEUgIyMjCiAgc2luZ2xlX3NsaWRlX3ZpZXc6IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuYWRkX2NsYXNzKGRvY3VtZW50LmJvZHksICJzaW5nbGVfc2xpZGUiKTsKICAgIHRoaXMuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJ2aXNpYmxlIik7CiAgICB0aGlzLmxhc3Rfc2hvd24gPSB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obnVsbCk7CiAgfSwKCiAgLy8gc3VwcHJlc3MgSUUncyBpbWFnZSB0b29sYmFyIHBvcCB1cAogIGhpZGVfaW1hZ2VfdG9vbGJhcjogZnVuY3Rpb24gKCkgewogICAgaWYgKCF0aGlzLm5zX3BvcykKICAgIHsKICAgICAgdmFyIGltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTUciKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKQogICAgICAgIGltYWdlc1tpXS5zZXRBdHRyaWJ1dGUoImdhbGxlcnlpbWciLCAibm8iKTsKICAgIH0KICB9LAoKICB1bmxvYWRlZDogZnVuY3Rpb24gKGUpIHsKICAgIC8vYWxlcnQoInVubG9hZGVkIik7CiAgfSwKCiAgLy8gU2FmYXJpIGFuZCBLb25xdWVyb3IgZG9uJ3QgeWV0IHN1cHBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSgpCiAgLy8gYW5kIHRoZXkgYWx3YXlzIHJlbG9hZCBwYWdlIHdoZW4gbG9jYXRpb24uaHJlZiBpcyB1cGRhdGVkCiAgaXNfS0hUTUw6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBhZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICByZXR1cm4gKGFnZW50LmluZGV4T2YoIktIVE1MIikgPj0gMCA/IHRydWUgOiBmYWxzZSk7CiAgfSwKCiAgLy8gZmluZCBzbGlkZSBuYW1lIGZyb20gZmlyc3QgaDEgZWxlbWVudAogIC8vIGRlZmF1bHQgdG8gZG9jdW1lbnQgdGl0bGUgKyBzbGlkZSBudW1iZXIKICBzbGlkZV9uYW1lOiBmdW5jdGlvbiAoaW5kZXgpIHsKICAgIHZhciBuYW1lID0gbnVsbDsKICAgIHZhciBzbGlkZSA9IHRoaXMuc2xpZGVzW2luZGV4XTsKCiAgICB2YXIgaGVhZGluZyA9IHRoaXMuZmluZF9oZWFkaW5nKHNsaWRlKTsKCiAgICBpZiAoaGVhZGluZykKICAgICAgbmFtZSA9IHRoaXMuZXh0cmFjdF90ZXh0KGhlYWRpbmcpOwoKICAgIGlmICghbmFtZSkKICAgICAgbmFtZSA9IHRoaXMudGl0bGUgKyAiKCIgKyAoaW5kZXggKyAxKSArICIpIjsKCiAgICBuYW1lLnJlcGxhY2UoL1wmL2csICImYW1wOyIpOwogICAgbmFtZS5yZXBsYWNlKC9cPC9nLCAiJmx0OyIpOwogICAgbmFtZS5yZXBsYWNlKC9cPi9nLCAiJmd0OyIpOwoKICAgIHJldHVybiBuYW1lOwogIH0sCgogIC8vIGZpbmQgZmlyc3QgaDEgZWxlbWVudCBpbiBET00gdHJlZQogIGZpbmRfaGVhZGluZzogZnVuY3Rpb24gKG5vZGUpIHsKICAgIGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBudWxsOwoKICAgIGlmIChub2RlLm5vZGVOYW1lID09ICJIMSIgfHwgbm9kZS5ub2RlTmFtZSA9PSAiaDEiKQogICAgICByZXR1cm4gbm9kZTsKCiAgICB2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7CgogICAgd2hpbGUgKGNoaWxkKQogICAgewogICAgICBub2RlID0gdGhpcy5maW5kX2hlYWRpbmcoY2hpbGQpOwoKICAgICAgaWYgKG5vZGUpCiAgICAgICAgcmV0dXJuIG5vZGU7CgogICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIC8vIHJlY3Vyc2l2ZWx5IGV4dHJhY3QgdGV4dCBmcm9tIERPTSB0cmVlCiAgZXh0cmFjdF90ZXh0OiBmdW5jdGlvbiAobm9kZSkgewogICAgaWYgKCFub2RlKQogICAgICByZXR1cm4gIiI7CgogICAgLy8gdGV4dCBub2RlcwogICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykKICAgICAgcmV0dXJuIG5vZGUubm9kZVZhbHVlOwoKICAgIC8vIGVsZW1lbnRzCiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKQogICAgewogICAgICBub2RlID0gbm9kZS5maXJzdENoaWxkOwogICAgICB2YXIgdGV4dCA9ICIiOwoKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB0ZXh0ID0gdGV4dCArIHRoaXMuZXh0cmFjdF90ZXh0KG5vZGUpOwogICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICB9CgogICAgICByZXR1cm4gdGV4dDsKICAgIH0KCiAgICByZXR1cm4gIiI7CiAgfSwKCiAgLy8gZmluZCBjb3B5cmlnaHQgdGV4dCBmcm9tIG1ldGEgZWxlbWVudAogIGZpbmRfY29weXJpZ2h0OiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgbmFtZSwgY29udGVudDsKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1ldGEiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGEubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIG5hbWUgPSBtZXRhW2ldLmdldEF0dHJpYnV0ZSgibmFtZSIpOwogICAgICBjb250ZW50ID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKTsKCiAgICAgIGlmIChuYW1lID09ICJjb3B5cmlnaHQiKQogICAgICAgIHJldHVybiBjb250ZW50OwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIGZpbmRfc2l6ZV9hZGp1c3Q6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBuYW1lLCBjb250ZW50LCBvZmZzZXQ7CiAgICB2YXIgbWV0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhLmxlbmd0aDsgKytpKQogICAgewogICAgICBuYW1lID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKICAgICAgY29udGVudCA9IG1ldGFbaV0uZ2V0QXR0cmlidXRlKCJjb250ZW50Iik7CgogICAgICBpZiAobmFtZSA9PSAiZm9udC1zaXplLWFkanVzdG1lbnQiKQogICAgICAgIHJldHVybiAxICogY29udGVudDsKICAgIH0KCiAgICByZXR1cm4gMTsKICB9LAoKICAvLyA8bWV0YSBuYW1lPSJkdXJhdGlvbiIgY29udGVudD0iMjAiIC8+ICBmb3IgMjAgbWludXRlcwogIGZpbmRfZHVyYXRpb246IGZ1bmN0aW9uICgpIHsKICAgIHZhciBuYW1lLCBjb250ZW50LCBvZmZzZXQ7CiAgICB2YXIgbWV0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhLmxlbmd0aDsgKytpKQogICAgewogICAgICBuYW1lID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKICAgICAgY29udGVudCA9IG1ldGFbaV0uZ2V0QXR0cmlidXRlKCJjb250ZW50Iik7CgogICAgICBpZiAobmFtZSA9PSAiZHVyYXRpb24iKQogICAgICAgIHJldHVybiA2MDAwMCAqIGNvbnRlbnQ7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfSwKCiAgcmVwbGFjZV9ieV9ub25fYnJlYWtpbmdfc3BhY2U6IGZ1bmN0aW9uIChzdHIpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKQogICAgICBzdHJbaV0gPSAxNjA7CiAgfSwKCiAgLy8gIyMjIENIRUNLIE1FICMjIyBpcyB1c2Ugb2YgImxpIiBva2F5IGZvciB0ZXh0L2h0bWw/CiAgLy8gZm9yIFhIVE1MIGRvIHdlIGFsc28gbmVlZCB0byBzcGVjaWZ5IG5hbWVzcGFjZT8KICBpbml0X291dGxpbmVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgaXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGkiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKQogICAgewogICAgICB2YXIgdGFyZ2V0ID0gaXRlbXNbaV07CgogICAgICBpZiAoIXRoaXMuaGFzX2NsYXNzKHRhcmdldC5wYXJlbnROb2RlLCAib3V0bGluZSIpKQogICAgICAgIGNvbnRpbnVlOwoKICAgICAgdGFyZ2V0Lm9uY2xpY2sgPSB0aGlzLm91dGxpbmVfY2xpY2s7Ci8qICMjIyBtb3JlIHdvcmsgbmVlZGVkIGZvciBJRTYKICAgICAgaWYgKCF0aGlzLm5zX3BvcykKICAgICAgewogICAgICAgIHRhcmdldC5vbm1vdXNlb3ZlciA9IHRoaXMuaG92ZXJfb3V0bGluZTsKICAgICAgICB0YXJnZXQub25tb3VzZW91dCA9IHRoaXMudW5ob3Zlcl9vdXRsaW5lOwogICAgICB9CiovCiAgICAgIGlmICh0aGlzLmZvbGRhYmxlKHRhcmdldCkpCiAgICAgIHsKICAgICAgICB0YXJnZXQuZm9sZGFibGUgPSB0cnVlOwogICAgICAgIHRhcmdldC5vbmZvY3VzID0gZnVuY3Rpb24gKCkge3czY19zbGlkeS5vdXRsaW5lID0gdGhpczt9OwogICAgICAgIHRhcmdldC5vbmJsdXIgPSBmdW5jdGlvbiAoKSB7dzNjX3NsaWR5Lm91dGxpbmUgPSBudWxsO307CgogICAgICAgIGlmICghdGFyZ2V0LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSkKICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKCiAgICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKHRhcmdldCwgImV4cGFuZCIpKQogICAgICAgICAgdGhpcy51bmZvbGQodGFyZ2V0KTsKICAgICAgICBlbHNlCiAgICAgICAgICB0aGlzLmZvbGQodGFyZ2V0KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0aGlzLmFkZF9jbGFzcyh0YXJnZXQsICJub2ZvbGQiKTsKICAgICAgICB0YXJnZXQudmlzaWJsZSA9IHRydWU7CiAgICAgICAgdGFyZ2V0LmZvbGRhYmxlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9LAoKICBmb2xkYWJsZTogZnVuY3Rpb24gKGl0ZW0pIHsKICAgIGlmICghaXRlbSB8fCBpdGVtLm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB2YXIgbm9kZSA9IGl0ZW0uZmlyc3RDaGlsZDsKCiAgICB3aGlsZSAobm9kZSkKICAgIHsKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiB0aGlzLmlzX2Jsb2NrKG5vZGUpKQogICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIC8vICMjIyBDSEVDSyBNRSAjIyMgc3dpdGNoIHRvIGFkZC9yZW1vdmUgImhpZGRlbiIgY2xhc3MKICBmb2xkOiBmdW5jdGlvbiAoaXRlbSkgewogICAgaWYgKGl0ZW0pCiAgICB7CiAgICAgIHRoaXMucmVtb3ZlX2NsYXNzKGl0ZW0sICJ1bmZvbGRlZCIpOwogICAgICB0aGlzLmFkZF9jbGFzcyhpdGVtLCAiZm9sZGVkIik7CiAgICB9CgogICAgdmFyIG5vZGUgPSBpdGVtID8gaXRlbS5maXJzdENoaWxkIDogbnVsbDsKCiAgICB3aGlsZSAobm9kZSkKICAgIHsKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiB0aGlzLmlzX2Jsb2NrKG5vZGUpKSAvLyBlbGVtZW50CiAgICAgIHsKICAgICAgICAgdzNjX3NsaWR5LmFkZF9jbGFzcyhub2RlLCAiaGlkZGVuIik7CiAgICAgIH0KCiAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgfQoKICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlOwogIH0sCgogIC8vICMjIyBDSEVDSyBNRSAjIyMgc3dpdGNoIHRvIGFkZC9yZW1vdmUgImhpZGRlbiIgY2xhc3MKICB1bmZvbGQ6IGZ1bmN0aW9uIChpdGVtKSB7CiAgICBpZiAoaXRlbSkKICAgIHsKICAgICAgdGhpcy5hZGRfY2xhc3MoaXRlbSwgInVuZm9sZGVkIik7CiAgICAgIHRoaXMucmVtb3ZlX2NsYXNzKGl0ZW0sICJmb2xkZWQiKTsKICAgIH0KCiAgICB2YXIgbm9kZSA9IGl0ZW0gPyBpdGVtLmZpcnN0Q2hpbGQgOiBudWxsOwoKICAgIHdoaWxlIChub2RlKQogICAgewogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxICYmIHRoaXMuaXNfYmxvY2sobm9kZSkpIC8vIGVsZW1lbnQKICAgICAgewogICAgICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3Mobm9kZSwgImhpZGRlbiIpOwogICAgICB9CgogICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKICAgIH0KCiAgICBpdGVtLnZpc2libGUgPSB0cnVlOwogIH0sCgogIG91dGxpbmVfY2xpY2s6IGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoIWUpCiAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgdmFyIHJpZ2h0Y2xpY2sgPSBmYWxzZTsKICAgIHZhciB0YXJnZXQgPSB3M2Nfc2xpZHkuZ2V0X3RhcmdldChlKTsKCiAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC52aXNpYmxlID09IHVuZGVmaW5lZCkKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmIChlLndoaWNoKQogICAgICByaWdodGNsaWNrID0gKGUud2hpY2ggPT0gMyk7CiAgICBlbHNlIGlmIChlLmJ1dHRvbikKICAgICAgcmlnaHRjbGljayA9IChlLmJ1dHRvbiA9PSAyKTsKCiAgICBpZiAoIXJpZ2h0Y2xpY2sgJiYgdGFyZ2V0LnZpc2libGUgIT0gdW5kZWZpbmVkKQogICAgewogICAgICBpZiAodGFyZ2V0LmZvbGRhYmxlKQogICAgICB7CiAgICAgICAgaWYgKHRhcmdldC52aXNpYmxlKQogICAgICAgICAgdzNjX3NsaWR5LmZvbGQodGFyZ2V0KTsKICAgICAgICBlbHNlCiAgICAgICAgICB3M2Nfc2xpZHkudW5mb2xkKHRhcmdldCk7CiAgICAgIH0KCiAgICAgIHczY19zbGlkeS5zdG9wX3Byb3BhZ2F0aW9uKGUpOwogICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgYWRkX2luaXRpYWxfcHJvbXB0OiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgcHJvbXB0ID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICBwcm9tcHQuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJpbml0aWFsX3Byb21wdCIpOwoKICAgIHZhciBwMSA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoInAiKTsKICAgIHByb21wdC5hcHBlbmRDaGlsZChwMSk7CiAgICBwMS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImhlbHAiKTsKCiAgICBpZiAodGhpcy5rZXlib2FyZGxlc3MpCiAgICAgIHAxLmlubmVySFRNTCA9ICJzd2lwZSBsZWZ0IHRvIG1vdmUgdG8gbmV4dCBzbGlkZSI7CiAgICBlbHNlCiAgICAgIHAxLmlubmVySFRNTCA9ICJTcGFjZSwgUmlnaHQgQXJyb3cgb3Igc3dpcGUgbGVmdCB0byBtb3ZlIHRvICIgKwogICAgICAgICAgICAgICAgICAgICAibmV4dCBzbGlkZSwgY2xpY2sgaGVscCBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIjsKCiAgICB0aGlzLmFkZF9saXN0ZW5lcihwcm9tcHQsICJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocHJvbXB0KTsKICAgICAgdzNjX3NsaWR5LnN0b3BfcHJvcGFnYXRpb24oZSk7CiAgICAKICAgICAgaWYgKGUuY2FuY2VsICE9IHVuZGVmaW5lZCkKICAgICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIAogICAgICBpZiAoZS5yZXR1cm5WYWx1ZSAhPSB1bmRlZmluZWQpCiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgICAKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcm9tcHQpOwogICAgdGhpcy5pbml0aWFsX3Byb21wdCA9IHByb21wdDsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwcm9tcHQpO30sIDUwMDApOwogIH0sCgogIGFkZF90b29sYmFyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgY291bnRlciwgcGFnZTsKCiAgICAgdGhpcy50b29sYmFyID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy50b29sYmFyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAidG9vbGJhciIpOwoKICAgICAvLyBhIHJlYXNvbmFibHkgYmVoYXZlZCBicm93c2VyCiAgICAgaWYgKHRoaXMubnNfcG9zIHx8ICF0aGlzLmllNikKICAgICB7CiAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKTsKICAgICAgIHJpZ2h0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAiZmxvYXQ6IHJpZ2h0OyB0ZXh0LWFsaWduOiByaWdodCIpOwoKICAgICAgIGNvdW50ZXIgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIikKICAgICAgIGNvdW50ZXIuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgic2xpZGUiKSArICIgbi9tIjsKICAgICAgIHJpZ2h0LmFwcGVuZENoaWxkKGNvdW50ZXIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKHJpZ2h0KTsKCiAgICAgICB2YXIgbGVmdCA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImRpdiIpOwogICAgICAgbGVmdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInRleHQtYWxpZ246IGxlZnQiKTsKCiAgICAgICAvLyBnbG9iYWwgZW5kIG9mIHNsaWRlIGluZGljYXRvcgogICAgICAgdGhpcy5lb3MgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICB0aGlzLmVvcy5pbm5lckhUTUwgPSAiKiAiOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZCh0aGlzLmVvcyk7CgogICAgICAgdmFyIGhlbHAgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJhIik7CiAgICAgICBoZWxwLnNldEF0dHJpYnV0ZSgiaHJlZiIsIHRoaXMuaGVscF9wYWdlKTsKICAgICAgIGhlbHAuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIHRoaXMubG9jYWxpemUodGhpcy5oZWxwX3RleHQpKTsKICAgICAgIGhlbHAuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgiaGVscD8iKTsKICAgICAgIGxlZnQuYXBwZW5kQ2hpbGQoaGVscCk7CiAgICAgICBoZWxwLnN0eWxlLmRpc3BsYXk9Im5vbmUiOyAKICAgICAgIHRoaXMuaGVscF9hbmNob3IgPSBoZWxwOyAgLy8gc2F2ZSBmb3IgZm9jdXMgaGFjawoKICAgICAgIHZhciBnYXAxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKTsKICAgICAgIGxlZnQuYXBwZW5kQ2hpbGQoZ2FwMSk7CgogICAgICAgdmFyIGNvbnRlbnRzID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiYSIpOwogICAgICAgY29udGVudHMuc2V0QXR0cmlidXRlKCJocmVmIiwgImphdmFzY3JpcHQ6dzNjX3NsaWR5LnRvZ2dsZV90YWJsZV9vZl9jb250ZW50cygpIik7CiAgICAgICBjb250ZW50cy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSgidGFibGUgb2YgY29udGVudHMiKSk7CiAgICAgICBjb250ZW50cy5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJDb250ZW50cyIpOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZChjb250ZW50cyk7CgogICAgICAgdmFyIGdhcDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZChnYXAyKTsKCiAgICAgICB2YXIgY29weXJpZ2h0ID0gdGhpcy5maW5kX2NvcHlyaWdodCgpOwoKICAgICAgIGlmIChjb3B5cmlnaHQpCiAgICAgICB7CiAgICAgICAgIHZhciBzcGFuID0gdGhpcy5jcmVhdGVfZWxlbWVudCgic3BhbiIpOwogICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJjb3B5cmlnaHQiOwogICAgICAgICBzcGFuLmlubmVySFRNTCA9IGNvcHlyaWdodDsKICAgICAgICAgbGVmdC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgIH0KCiAgICAgICB0aGlzLnRvb2xiYXIuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICAgICB0aGlzLnRvb2xiYXIuYXBwZW5kQ2hpbGQobGVmdCk7CiAgICAgfQogICAgIGVsc2UgLy8gSUU2IHNvIG5lZWQgdG8gd29yayBhcm91bmQgaXRzIHBvb3IgQ1NTIHN1cHBvcnQKICAgICB7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUucG9zaXRpb24gPSAodGhpcy5pZTcgPyAiZml4ZWQiIDogImFic29sdXRlIik7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUuekluZGV4ID0gIjIwMCI7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUud2lkdGggPSAiOTkuOSUiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmhlaWdodCA9ICIxLjJlbSI7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUudG9wID0gImF1dG8iOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLnRleHRBbGlnbiA9ICJsZWZ0IjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5mb250U2l6ZSA9ICI2MCUiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmNvbG9yID0gInJlZCI7CiAgICAgICB0aGlzLnRvb2xiYXIuYm9yZGVyV2lkdGggPSAwOwogICAgICAgdGhpcy50b29sYmFyLmNsYXNzTmFtZSA9ICJ0b29sYmFyIjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5iYWNrZ3JvdW5kID0gInJnYigyNDAsMjQwLDI0MCkiOwoKICAgICAgIC8vIHdvdWxkIGxpa2UgdG8gaGF2ZSBoZWxwIHRleHQgbGVmdCBhbGlnbmVkCiAgICAgICAvLyBhbmQgcGFnZSBjb3VudGVyIHJpZ2h0IGFsaWduZWQsIGZsb2F0aW5nCiAgICAgICAvLyBkaXYncyBkb24ndCB3b3JrLCBzbyBpbnN0ZWFkIHVzZSBuZXN0ZWQKICAgICAgIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZCBkaXYncy4KCiAgICAgICB2YXIgc3AgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICBzcC5pbm5lckhUTUwgPSAiJm5ic3A7Jm5ic3A7KiZuYnNwOyI7CiAgICAgICB0aGlzLnRvb2xiYXIuYXBwZW5kQ2hpbGQoc3ApOwogICAgICAgdGhpcy5lb3MgPSBzcDsgIC8vIGVuZCBvZiBzbGlkZSBpbmRpY2F0b3IKCiAgICAgICB2YXIgaGVscCA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImEiKTsKICAgICAgIGhlbHAuc2V0QXR0cmlidXRlKCJocmVmIiwgdGhpcy5oZWxwX3BhZ2UpOwogICAgICAgaGVscC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSh0aGlzLmhlbHBfdGV4dCkpOwogICAgICAgaGVscC5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJoZWxwPyIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGhlbHApOwogICAgICAgdGhpcy5oZWxwX2FuY2hvciA9IGhlbHA7ICAvLyBzYXZlIGZvciBmb2N1cyBoYWNrCgogICAgICAgdmFyIGdhcDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGdhcDEpOwoKICAgICAgIHZhciBjb250ZW50cyA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImEiKTsKICAgICAgIGNvbnRlbnRzLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJqYXZhc2NyaXB0OnRvZ2dsZVRhYmxlT2ZDb250ZW50cygpIik7CiAgICAgICBjb250ZW50cy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSgidGFibGUgb2YgY29udGVudHMiLmxvY2FsaXplKSk7CiAgICAgICBjb250ZW50cy5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJjb250ZW50cz8iKTsKICAgICAgIHRoaXMudG9vbGJhci5hcHBlbmRDaGlsZChjb250ZW50cyk7CgogICAgICAgdmFyIGdhcDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGdhcDIpOwoKICAgICAgIHZhciBjb3B5cmlnaHQgPSB0aGlzLmZpbmRfY29weXJpZ2h0KCk7CgogICAgICAgaWYgKGNvcHlyaWdodCkKICAgICAgIHsKICAgICAgICAgdmFyIHNwYW4gPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICAgIHNwYW4uaW5uZXJIVE1MID0gY29weXJpZ2h0OwogICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gImJsYWNrIjsKICAgICAgICAgc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gIjAuNWVtIjsKICAgICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKHNwYW4pOwogICAgICAgfQoKICAgICAgIGNvdW50ZXIgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKQogICAgICAgY291bnRlci5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICBjb3VudGVyLnN0eWxlLndpZHRoID0gImF1dG8iOyAvLyIyMCUiOwogICAgICAgY291bnRlci5zdHlsZS5oZWlnaHQgPSAiMS4yZW0iOwogICAgICAgY291bnRlci5zdHlsZS50b3AgPSAiYXV0byI7CiAgICAgICBjb3VudGVyLnN0eWxlLmJvdHRvbSA9IDA7CiAgICAgICBjb3VudGVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgY291bnRlci5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgY291bnRlci5zdHlsZS5jb2xvciA9ICJyZWQiOwogICAgICAgY291bnRlci5zdHlsZS5iYWNrZ3JvdW5kID0gInJnYigyNDAsMjQwLDI0MCkiOwoKICAgICAgIGNvdW50ZXIuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgic2xpZGUiKSArICIgbi9tIjsKICAgICAgIHRoaXMudG9vbGJhci5hcHBlbmRDaGlsZChjb3VudGVyKTsKICAgICB9CgogICAgIC8vIGVuc3VyZSB0aGF0IGNsaWNrIGlzbid0IHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBwYWdlCiAgICAgdGhpcy50b29sYmFyLm9uY2xpY2sgPQogICAgICAgICBmdW5jdGlvbiAoZSkgewogICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDsKCiAgICAgICAgICAgaWYgKCF0YXJnZXQgJiYgZS5zcmNFbGVtZW50KQogICAgICAgICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCBTYWZhcmkgYnVnCiAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykKICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOwoKICAgICAgICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKCiAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAiYSIpCiAgICAgICAgICAgICB3M2Nfc2xpZHkubW91c2VfYnV0dG9uX2NsaWNrKGUpOwogICAgICAgICB9OwoKICAgICB0aGlzLnNsaWRlX251bWJlcl9lbGVtZW50ID0gY291bnRlcjsKICAgICB0aGlzLnNldF9lb3Nfc3RhdHVzKGZhbHNlKTsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudG9vbGJhcik7CiAgfSwKCiAgLy8gd3lzaXd5ZyBlZGl0b3JzIG1ha2UgaXQgaGFyZCB0byB1c2UgZGl2IGVsZW1lbnRzCiAgLy8gZS5nLiBhbWF5YSBsb3NlcyB0aGUgZGl2IHdoZW4geW91IGNvcHkgYW5kIHBhc3RlCiAgLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBkaXYgZWxlbWVudHMgYXJvdW5kIGltcGxpY2l0CiAgLy8gc2xpZGVzIHdoaWNoIHN0YXJ0IHdpdGggYW4gaDEgZWxlbWVudCBhbmQgY29udGludWUKICAvLyB1cCB0byB0aGUgbmV4dCBoZWFkaW5nIG9yIGRpdiBlbGVtZW50CiAgd3JhcF9pbXBsaWNpdF9zbGlkZXM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBpLCBoZWFkaW5nLCBub2RlLCBuZXh0LCBkaXY7CiAgICB2YXIgaGVhZGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaDEiKTsKCiAgICBpZiAoIWhlYWRpbmdzKQogICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8IGhlYWRpbmdzLmxlbmd0aDsgKytpKQogICAgewogICAgICBoZWFkaW5nID0gaGVhZGluZ3NbaV07CgogICAgICBpZiAoaGVhZGluZy5wYXJlbnROb2RlICE9IGRvY3VtZW50LmJvZHkpCiAgICAgICAgY29udGludWU7CgogICAgICBub2RlID0gaGVhZGluZy5uZXh0U2libGluZzsKCiAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0aGlzLmFkZF9jbGFzcyhkaXYsICJzbGlkZSIpOwogICAgICBkb2N1bWVudC5ib2R5LnJlcGxhY2VDaGlsZChkaXYsIGhlYWRpbmcpOwogICAgICBkaXYuYXBwZW5kQ2hpbGQoaGVhZGluZyk7CgogICAgICB3aGlsZSAobm9kZSkKICAgICAgewogICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIC8vIGFuIGVsZW1lbnQKICAgICAgICB7CiAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gIkgxIiB8fCBub2RlLm5vZGVOYW1lID09ICJoMSIpCiAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gIkRJViIgfHwgbm9kZS5ub2RlTmFtZSA9PSAiZGl2IikKICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAodGhpcy5oYXNfY2xhc3Mobm9kZSwgInNsaWRlIikpCiAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgIGlmICh0aGlzLmhhc19jbGFzcyhub2RlLCAiaGFuZG91dCIpKQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgICBub2RlID0gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChub2RlKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgIH0gCiAgICB9CiAgfSwKCiAgYXR0YWNoX3RvdWNoX2hhbmRlcnM6IGZ1bmN0aW9uKHNsaWRlcykKICB7CiAgICB2YXIgaSwgc2xpZGU7CgogICAgZm9yIChpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgc2xpZGUgPSBzbGlkZXNbaV07CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKHNsaWRlLCAidG91Y2hzdGFydCIsIHRoaXMudG91Y2hzdGFydCk7CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKHNsaWRlLCAidG91Y2htb3ZlIiwgdGhpcy50b3VjaG1vdmUpOwogICAgICB0aGlzLmFkZF9saXN0ZW5lcihzbGlkZSwgInRvdWNoZW5kIiwgdGhpcy50b3VjaGVuZCk7CiAgICB9CiAgfSwKCi8vIHJldHVybiBuZXcgYXJyYXkgb2YgYWxsIHNsaWRlcwogIGNvbGxlY3Rfc2xpZGVzOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgc2xpZGVzID0gbmV3IEFycmF5KCk7CiAgICB2YXIgZGl2cyA9IGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGl2cy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgZGl2ID0gZGl2cy5pdGVtKGkpOwoKICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKGRpdiwgInNsaWRlIikpCiAgICAgIHsKICAgICAgICAvLyBhZGQgc2xpZGUgdG8gY29sbGVjdGlvbgogICAgICAgIHNsaWRlc1tzbGlkZXMubGVuZ3RoXSA9IGRpdjsKCiAgICAgICAgLy8gaGlkZSBlYWNoIHNsaWRlIGFzIGl0IGlzIGZvdW5kCiAgICAgICAgdGhpcy5hZGRfY2xhc3MoZGl2LCAiaGlkZGVuIik7CgogICAgICAgIC8vIGFkZCBkdW1teSA8YnIvPiBhdCBlbmQgZm9yIHNjcm9sbGluZyBoYWNrCiAgICAgICAgdmFyIG5vZGUxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZTEpOwogICAgICAgIHZhciBub2RlMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUyKTsKICAgICAgfQogICAgICBlbHNlIGlmICh0aGlzLmhhc19jbGFzcyhkaXYsICJiYWNrZ3JvdW5kIikpCiAgICAgIHsgIC8vIHdvcmsgYXJvdW5kIGZvciBGaXJlZm94IFNWRyByZWxvYWQgYnVnCiAgICAgICAgLy8gd2hpY2ggb3RoZXJ3aXNlIHJlcGxhY2VzIDFzdCBTVkcgZ3JhcGhpYyB3aXRoIDJuZAogICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgfQogICAgfQoKICAgIHRoaXMuc2xpZGVzID0gc2xpZGVzOwogIH0sCgogIC8vIHJldHVybiBuZXcgYXJyYXkgb2YgYWxsIDxkaXYgY2xhc3M9ImhhbmRvdXQiPgogIGNvbGxlY3Rfbm90ZXM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBub3RlcyA9IG5ldyBBcnJheSgpOwogICAgdmFyIGRpdnMgPSBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGRpdiA9IGRpdnMuaXRlbShpKTsKCiAgICAgIGlmICh0aGlzLmhhc19jbGFzcyhkaXYsICJoYW5kb3V0IikpCiAgICAgIHsKICAgICAgICAvLyBhZGQgbm90ZSB0byBjb2xsZWN0aW9uCiAgICAgICAgbm90ZXNbbm90ZXMubGVuZ3RoXSA9IGRpdjsKCiAgICAgICAgLy8gYW5kIGhpZGUgaXQKICAgICAgICB0aGlzLmFkZF9jbGFzcyhkaXYsICJoaWRkZW4iKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMubm90ZXMgPSBub3RlczsKICB9LAoKICAvLyByZXR1cm4gbmV3IGFycmF5IG9mIGFsbCA8ZGl2IGNsYXNzPSJiYWNrZ3JvdW5kIj4KICAvLyBpbmNsdWRpbmcgbmFtZWQgYmFja2dyb3VuZHMgZS5nLiBjbGFzcz0iYmFja2dyb3VuZCB0aXRsZXBhZ2UiCiAgY29sbGVjdF9iYWNrZ3JvdW5kczogZnVuY3Rpb24gKCkgewogICAgdmFyIGJhY2tncm91bmRzID0gbmV3IEFycmF5KCk7CiAgICB2YXIgZGl2cyA9IGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGl2cy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgZGl2ID0gZGl2cy5pdGVtKGkpOwoKICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKGRpdiwgImJhY2tncm91bmQiKSkKICAgICAgewogICAgICAgIC8vIGFkZCBiYWNrZ3JvdW5kIHRvIGNvbGxlY3Rpb24KICAgICAgICBiYWNrZ3JvdW5kc1tiYWNrZ3JvdW5kcy5sZW5ndGhdID0gZGl2OwoKICAgICAgICAvLyBhbmQgaGlkZSBpdAogICAgICAgIHRoaXMuYWRkX2NsYXNzKGRpdiwgImhpZGRlbiIpOwogICAgICB9CiAgICB9CgogICAgdGhpcy5iYWNrZ3JvdW5kcyA9IGJhY2tncm91bmRzOwogIH0sCgogIC8vIHNldCBjbGljayBoYW5kbGVycyBvbiBhbGwgYW5jaG9ycwogIHBhdGNoX2FuY2hvcnM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzZWxmID0gdzNjX3NsaWR5OwogICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgLy8gY29tcGFyZSB0aGlzLmhyZWYgd2l0aCBsb2NhdGlvbi5ocmVmCiAgICAgIC8vIGZvciBsaW5rIHRvIGFub3RoZXIgc2xpZGUgaW4gdGhpcyBkb2MKCiAgICAgIGlmIChzZWxmLnBhZ2VfYWRkcmVzcyh0aGlzLmhyZWYpID09IHNlbGYucGFnZV9hZGRyZXNzKGxvY2F0aW9uLmhyZWYpKQogICAgICB7CiAgICAgICAgLy8geWVzLCBzbyBmaW5kIG5ldyBzbGlkZSBudW1iZXIKICAgICAgICB2YXIgbmV3c2xpZGVudW0gPSBzZWxmLmZpbmRfc2xpZGVfbnVtYmVyKHRoaXMuaHJlZik7CgogICAgICAgIGlmIChuZXdzbGlkZW51bSAhPSBzZWxmLnNsaWRlX251bWJlcikKICAgICAgICB7CiAgICAgICAgICB2YXIgc2xpZGUgPSBzZWxmLnNsaWRlc1tzZWxmLnNsaWRlX251bWJlcl07CiAgICAgICAgICBzZWxmLmhpZGVfc2xpZGUoc2xpZGUpOwogICAgICAgICAgc2VsZi5zbGlkZV9udW1iZXIgPSBuZXdzbGlkZW51bTsKICAgICAgICAgIHNsaWRlID0gc2VsZi5zbGlkZXNbc2VsZi5zbGlkZV9udW1iZXJdOwogICAgICAgICAgc2VsZi5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgICAgIHNlbGYuc2V0X2xvY2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihldmVudCk7CgovLyAgICAgIGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09IG51bGwpCi8vICAgICAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5ocmVmOwoKICAgICAgdGhpcy5ibHVyKCk7CiAgICAgIHNlbGYuZGlzYWJsZV9zbGlkZV9jbGljayA9IHRydWU7CiAgICB9OwoKICAgIHZhciBhbmNob3JzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jaG9ycy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKQogICAgICAgIGFuY2hvcnNbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVyLCBmYWxzZSk7CiAgICAgIGVsc2UKICAgICAgICBhbmNob3JzW2ldLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgaGFuZGxlcik7CiAgICB9CiAgfSwKCiAgLy8gIyMjIENIRUNLIE1FICMjIyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZva2VkIHZpYSBzZXRUaW1lb3V0CiAgLy8gZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZm9yIHVzZSBvZiB3M2Nfc2xpZHkgdnMgdGhpcwogIHNob3dfc2xpZGVfbnVtYmVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGltZXIgPSB3M2Nfc2xpZHkuZ2V0X3RpbWVyKCk7CiAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyX2VsZW1lbnQuaW5uZXJIVE1MID0gdGltZXIgKyB3M2Nfc2xpZHkubG9jYWxpemUoInNsaWRlIikgKyAiICIgKwogICAgICAgICAgICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyICsgMSkgKyAiLyIgKyB3M2Nfc2xpZHkuc2xpZGVzLmxlbmd0aDsKICB9LAoKICAvLyBldmVyeSAyMDBtUyBjaGVjayBpZiB0aGUgbG9jYXRpb24gaGFzIGJlZW4gY2hhbmdlZCBhcyBhCiAgLy8gcmVzdWx0IG9mIHRoZSB1c2VyIGFjdGl2YXRpbmcgdGhlIEJhY2sgYnV0dG9uL21lbnUgaXRlbQogIC8vIGRvZXNuJ3Qgd29yayBmb3IgT3BlcmEgPCA5LjUKICBjaGVja19sb2NhdGlvbjogZnVuY3Rpb24gKCkgewogICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoOwoKICAgIGlmICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID4gMCAmJiAoaGFzaCA9PSAiIiB8fCBoYXNoID09ICIjIikpCiAgICAgIHczY19zbGlkeS5nb3RvX3NsaWRlKDApOwogICAgZWxzZSBpZiAoaGFzaC5sZW5ndGggPiAyICYmIGhhc2ggIT0gIiMoIisodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSsiKSIpCiAgICB7CiAgICAgIHZhciBudW0gPSBwYXJzZUludChsb2NhdGlvbi5oYXNoLnN1YnN0cigyKSk7CgogICAgICBpZiAoIWlzTmFOKG51bSkpCiAgICAgICAgdzNjX3NsaWR5LmdvdG9fc2xpZGUobnVtLTEpOwogICAgfQoKICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0ICYmIHczY19zbGlkeS5zbGlkZV9udW1iZXIgPiAwKQogICAgewogICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKCiAgICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0ID4gMCkKICAgICAgICB3M2Nfc2xpZHkudGltZV9sZWZ0IC09IDIwMDsKICAgIH0gCiAgfSwKCiAgZ2V0X3RpbWVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGltZXIgPSAiIjsKICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0KQogICAgewogICAgICB2YXIgbWlucywgc2VjczsKICAgICAgc2VjcyA9IE1hdGguZmxvb3IodzNjX3NsaWR5LnRpbWVfbGVmdC8xMDAwKTsKICAgICAgbWlucyA9IE1hdGguZmxvb3Ioc2VjcyAvIDYwKTsKICAgICAgc2VjcyA9IHNlY3MgJSA2MDsKICAgICAgdGltZXIgPSAobWlucyA/IG1pbnMrIm0iIDogIiIpICsgc2VjcyArICJzICI7CiAgICB9CgogICAgcmV0dXJuIHRpbWVyOwogIH0sCgogIC8vIHRoaXMgZG9lc24ndCBwdXNoIGxvY2F0aW9uIG9udG8gaGlzdG9yeSBzdGFjayBmb3IgSUUKICAvLyBmb3Igd2hpY2ggYSBoaWRkZW4gaWZyYW1lIGhhY2sgaXMgbmVlZGVkOiBsb2FkIHBhZ2UgaW50bwogIC8vIHRoZSBpZnJhbWUgd2l0aCBzY3JpcHQgdGhhdCBzZXQncyBwYXJlbnQncyBsb2NhdGlvbi5oYXNoCiAgLy8gYnV0IHRoYXQgd29uJ3Qgd29yayBmb3Igc3RhbmRhbG9uZSB1c2UgdW5sZXNzIHdlIGNhbgogIC8vIGNyZWF0ZSB0aGUgcGFnZSBkeW5hbWljYWxseSB2aWEgYSBqYXZhc2NyaXB0OiBVUkwKICAvLyAjIyMgdXNlIGhpc3RvcnkucHVzaFN0YXRlIGlmIGF2YWlsYWJsZQogIHNldF9sb2NhdGlvbjogZnVuY3Rpb24gKCkgewogICAgIHZhciB1cmkgPSB3M2Nfc2xpZHkucGFnZV9hZGRyZXNzKGxvY2F0aW9uLmhyZWYpOwogICAgIHZhciBoYXNoID0gIiMoIiArICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyKzEpICsgIikiOwoKICAgICBpZiAodzNjX3NsaWR5LnNsaWRlX251bWJlciA+PSAwKQogICAgICAgdXJpID0gdXJpICsgaGFzaDsKCiAgICAgaWYgKHR5cGVvZihoaXN0b3J5LnB1c2hTdGF0ZSkgIT0gInVuZGVmaW5lZCIgJiYgbG9jYXRpb24ucHJvdG9jb2wgIT09ICJmaWxlOiIpCiAgICAgewogICAgICAgZG9jdW1lbnQudGl0bGUgPSB3M2Nfc2xpZHkudGl0bGUgKyAiICgiICsgKHczY19zbGlkeS5zbGlkZV9udW1iZXIrMSkgKyAiKSI7CiAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSgwLCBkb2N1bWVudC50aXRsZSwgaGFzaCk7CiAgICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKICAgICAgIHczY19zbGlkeS5ub3RpZnlfb2JzZXJ2ZXJzKCk7CiAgICAgICByZXR1cm47CiAgICAgfQoKICAgICBpZiAodzNjX3NsaWR5LmllICYmICh3M2Nfc2xpZHkuaWU2IHx8IHczY19zbGlkeS5pZTcpKQogICAgICAgdzNjX3NsaWR5LnB1c2hfaGFzaChoYXNoKTsKCiAgICAgaWYgKHVyaSAhPSBsb2NhdGlvbi5ocmVmKSAvLyAmJiAha2h0bWwKICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJpOwoKICAgICBpZiAodGhpcy5raHRtbCkKICAgICAgICBoYXNoID0gIigiICsgKHczY19zbGlkeS5zbGlkZV9udW1iZXIrMSkgKyAiKSI7CgogICAgIGlmICghdGhpcy5pZSAmJiBsb2NhdGlvbi5oYXNoICE9IGhhc2ggJiYgbG9jYXRpb24uaGFzaCAhPSAiIikKICAgICAgIGxvY2F0aW9uLmhhc2ggPSBoYXNoOwoKICAgICBkb2N1bWVudC50aXRsZSA9IHczY19zbGlkeS50aXRsZSArICIgKCIgKyAodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSArICIpIjsKICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKICAgICB3M2Nfc2xpZHkubm90aWZ5X29ic2VydmVycygpOwogIH0sCgogIG5vdGlmeV9vYnNlcnZlcnM6IGZ1bmN0aW9uICgpCiAgewogICAgdmFyIHNsaWRlID0gdGhpcy5zbGlkZXNbdGhpcy5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYnNlcnZlcnMubGVuZ3RoOyArK2kpCiAgICAgIHRoaXMub2JzZXJ2ZXJzW2ldKHRoaXMuc2xpZGVfbnVtYmVyKzEsIHRoaXMuZmluZF9oZWFkaW5nKHNsaWRlKS5pbm5lclRleHQsIGxvY2F0aW9uLmhyZWYpOwogIH0sCgogIGFkZF9vYnNlcnZlcjogZnVuY3Rpb24gKG9ic2VydmVyKQogIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYnNlcnZlcnMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGlmIChvYnNlcnZlciA9PSB0aGlzLm9ic2VydmVyc1tpXSkKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7CiAgfSwKCiAgcmVtb3ZlX29ic2VydmVyOiBmdW5jdGlvbiAobykKICB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDsgKytpKQogICAgewogICAgICBpZiAob2JzZXJ2ZXIgPT0gdGhpcy5vYnNlcnZlcnNbaV0pCiAgICAgIHsKICAgICAgICB0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwxKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0sCgogIHBhZ2VfYWRkcmVzczogZnVuY3Rpb24gKHVyaSkgewogICAgdmFyIGkgPSB1cmkuaW5kZXhPZigiIyIpOwoKICAgIGlmIChpIDwgMCkKICAgICAgaSA9IHVyaS5pbmRleE9mKCIlMjMiKTsKCiAgICAvLyBjaGVjayBpZiBhbmNob3IgaXMgZW50aXJlIHBhZ2UKCiAgICBpZiAoaSA8IDApCiAgICAgIHJldHVybiB1cmk7ICAvLyB5ZXMKCiAgICByZXR1cm4gdXJpLnN1YnN0cigwLCBpKTsKICB9LAoKICAvLyBvbmx5IHVzZWQgZm9yIElFNiBhbmQgSUU3CiAgb25fZnJhbWVfbG9hZGVkOiBmdW5jdGlvbiAoaGFzaCkgewogICAgbG9jYXRpb24uaGFzaCA9IGhhc2g7CiAgICB2YXIgdXJpID0gdzNjX3NsaWR5LnBhZ2VfYWRkcmVzcyhsb2NhdGlvbi5ocmVmKTsKICAgIGxvY2F0aW9uLmhyZWYgPSB1cmkgKyBoYXNoOwogIH0sCgogIC8vIGhpc3RvcnkgaGFjayB3aXRoIHRoYW5rcyB0byBCZXJ0cmFuZCBMZSBSb3kKICBwdXNoX2hhc2g6IGZ1bmN0aW9uIChoYXNoKSB7CiAgICBpZiAoaGFzaCA9PSAiIikgaGFzaCA9ICIjKDEpIjsKICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoOwoKICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGlzdG9yeUZyYW1lIikuY29udGVudFdpbmRvdy5kb2N1bWVudDsKICAgIGRvYy5vcGVuKCJqYXZhc2NyaXB0Oic8aHRtbD48L2h0bWw+JyIpOwogICAgZG9jLndyaXRlKCI8aHRtbD48aGVhZD48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj53aW5kb3cucGFyZW50LnczY19zbGlkeS5vbl9mcmFtZV9sb2FkZWQoJyIrCiAgICAgIChoYXNoKSArICInKTs8L3NjcmlwdD48L2hlYWQ+PGJvZHk+aGVsbG8gbXVtPC9ib2R5PjwvaHRtbD4iKTsKICAgICAgZG9jLmNsb3NlKCk7CiAgfSwKCiAgLy8gZmluZCBjdXJyZW50IHNsaWRlIGJhc2VkIHVwb24gbG9jYXRpb24KICAvLyBmaXJzdCBmaW5kIHRhcmdldCBhbmNob3IgYW5kIHRoZW4gbG9vawogIC8vIGZvciBhc3NvY2lhdGVkIGRpdiBlbGVtZW50IGVuY2xvc2luZyBpdAogIC8vIGZpbmFsbHkgbWFwIHRoYXQgdG8gc2xpZGUgbnVtYmVyCiAgZmluZF9zbGlkZV9udW1iZXI6IGZ1bmN0aW9uICh1cmkpIHsKICAgIC8vIGZpcnN0IGdldCBhbmNob3IgZnJvbSBwYWdlIGxvY2F0aW9uCgogICAgdmFyIGkgPSB1cmkuaW5kZXhPZigiIyIpOwoKICAgIC8vIGNoZWNrIGlmIGFuY2hvciBpcyBlbnRpcmUgcGFnZQogICAgaWYgKGkgPCAwKQogICAgICByZXR1cm4gMDsgIC8vIHllcwoKICAgIHZhciBhbmNob3IgPSB1bmVzY2FwZSh1cmkuc3Vic3RyKGkrMSkpOwoKICAgIC8vIG5vdyB1c2UgYW5jaG9yIGFzIFhNTCBJRCB0byBmaW5kIHRhcmdldAogICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFuY2hvcik7CgogICAgaWYgKCF0YXJnZXQpCiAgICB7CiAgICAgIC8vIGRvZXMgYW5jaG9yIGxvb2sgbGlrZSAiKDIpIiBmb3Igc2xpZGUgMiA/PwogICAgICAvLyB3aGVyZSBmaXJzdCBzbGlkZSBpcyAoMSkKICAgICAgdmFyIHJlID0gL1woKFxkKStcKS87CgogICAgICBpZiAoYW5jaG9yLm1hdGNoKHJlKSkKICAgICAgewogICAgICAgIHZhciBudW0gPSBwYXJzZUludChhbmNob3Iuc3Vic3RyaW5nKDEsIGFuY2hvci5sZW5ndGgtMSkpOwoKICAgICAgICBpZiAobnVtID4gdGhpcy5zbGlkZXMubGVuZ3RoKQogICAgICAgICAgbnVtID0gMTsKCiAgICAgICAgaWYgKC0tbnVtIDwgMCkKICAgICAgICAgIG51bSA9IDA7CgogICAgICAgIHJldHVybiBudW07CiAgICAgIH0KCiAgICAgIC8vIGFjY2VwdCBbMl0gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgIHJlID0gL1xbKFxkKStcXS87CgogICAgICBpZiAoYW5jaG9yLm1hdGNoKHJlKSkKICAgICAgewogICAgICAgICB2YXIgbnVtID0gcGFyc2VJbnQoYW5jaG9yLnN1YnN0cmluZygxLCBhbmNob3IubGVuZ3RoLTEpKTsKCiAgICAgICAgIGlmIChudW0gPiB0aGlzLnNsaWRlcy5sZW5ndGgpCiAgICAgICAgICAgIG51bSA9IDE7CgogICAgICAgICBpZiAoLS1udW0gPCAwKQogICAgICAgICAgICBudW0gPSAwOwoKICAgICAgICAgcmV0dXJuIG51bTsKICAgICAgfQoKICAgICAgLy8gb2ggZGVhciB1bmtub3duIGFuY2hvcgogICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyBzZWFyY2ggZm9yIGVuY2xvc2luZyBzbGlkZQoKICAgIHdoaWxlICh0cnVlKQogICAgewogICAgICAvLyBicm93c2VyIGNvZXJjZXMgaHRtbCBlbGVtZW50cyB0byB1cHBlcmNhc2UhCiAgICAgIGlmICh0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAiZGl2IiAmJgogICAgICAgICAgICB0aGlzLmhhc19jbGFzcyh0YXJnZXQsICJzbGlkZSIpKQogICAgICB7CiAgICAgICAgLy8gZm91bmQgdGhlIHNsaWRlIGVsZW1lbnQKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgLy8gb3RoZXJ3aXNlIHRyeSBwYXJlbnQgZWxlbWVudCBpZiBhbnkKCiAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOwoKICAgICAgaWYgKCF0YXJnZXQpCiAgICAgIHsKICAgICAgICByZXR1cm4gMDsgICAvLyBubyBsdWNrIQogICAgICB9CiAgICB9OwoKICAgIGZvciAoaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGlmIChzbGlkZXNbaV0gPT0gdGFyZ2V0KQogICAgICAgIHJldHVybiBpOyAgLy8gc3VjY2VzcwogICAgfQoKICAgIC8vIG9oIGRlYXIgc3RpbGwgbm8gbHVjawogICAgcmV0dXJuIDA7CiAgfSwKCiAgcHJldmlvdXNfc2xpZGU6IGZ1bmN0aW9uIChpbmNyZW1lbnRhbCkgewogICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICB7CiAgICAgIHZhciBzbGlkZTsKCiAgICAgIGlmICgoaW5jcmVtZW50YWwgfHwgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9PSAwKSAmJiB3M2Nfc2xpZHkubGFzdF9zaG93biAhPSBudWxsKQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkuaGlkZV9wcmV2aW91c19pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXMoZmFsc2UpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHczY19zbGlkeS5zbGlkZV9udW1iZXIgPiAwKQogICAgICB7CiAgICAgICAgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5oaWRlX3NsaWRlKHNsaWRlKTsKCiAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5zbGlkZV9udW1iZXIgLSAxOwogICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJ2aXNpYmxlIik7CiAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkucHJldmlvdXNfaW5jcmVtZW50YWxfaXRlbShudWxsKTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXModHJ1ZSk7CiAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CgogICAgICBpZiAoIXczY19zbGlkeS5uc19wb3MpCiAgICAgICAgdzNjX3NsaWR5LnJlZnJlc2hfdG9vbGJhcigyMDApOwogICAgfQogIH0sCgogIG5leHRfc2xpZGU6IGZ1bmN0aW9uIChpbmNyZW1lbnRhbCkgewogICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICB7CiAgICAgIHZhciBzbGlkZSwgbGFzdCA9IHczY19zbGlkeS5sYXN0X3Nob3duOwoKICAgICAgaWYgKGluY3JlbWVudGFsIHx8IHczY19zbGlkeS5zbGlkZV9udW1iZXIgPT0gdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IHczY19zbGlkeS5yZXZlYWxfbmV4dF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKTsKCiAgICAgIGlmICgoIWluY3JlbWVudGFsIHx8IHczY19zbGlkeS5sYXN0X3Nob3duID09IG51bGwpICYmCiAgICAgICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyIDwgdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwoKICAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5zbGlkZV9udW1iZXIgKyAxOwogICAgICAgICBzbGlkZSA9IHczY19zbGlkeS5zbGlkZXNbdzNjX3NsaWR5LnNsaWRlX251bWJlcl07CiAgICAgICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgiaGlkZGVuIik7CiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgfQogICAgICBlbHNlIGlmICghdzNjX3NsaWR5Lmxhc3Rfc2hvd24pCiAgICAgIHsKICAgICAgICAgaWYgKGxhc3QgJiYgaW5jcmVtZW50YWwpCiAgICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSBsYXN0OwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CgogICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXMoIXczY19zbGlkeS5uZXh0X2luY3JlbWVudGFsX2l0ZW0odzNjX3NsaWR5Lmxhc3Rfc2hvd24pKTsKCiAgICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcykKICAgICAgICAgdzNjX3NsaWR5LnJlZnJlc2hfdG9vbGJhcigyMDApOwogICAgIH0KICB9LAoKICAvLyB0byBmaXJzdCBzbGlkZSB3aXRoIG5vdGhpbmcgcmV2ZWFsZWQKICAvLyBpLmUuIHN0YXRlIGF0IHN0YXJ0IG9mIHByZXNlbnRhdGlvbgogIGZpcnN0X3NsaWRlOiBmdW5jdGlvbiAoKSB7CiAgICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICAgewogICAgICAgdmFyIHNsaWRlOwoKICAgICAgIGlmICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyICE9IDApCiAgICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwoKICAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IDA7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSBudWxsOwogICAgICAgICB3M2Nfc2xpZHkuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJoaWRkZW4iKTsKICAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICAgfQoKICAgICAgIHczY19zbGlkeS5zZXRfZW9zX3N0YXR1cygKICAgICAgICAgIXczY19zbGlkeS5uZXh0X2luY3JlbWVudGFsX2l0ZW0odzNjX3NsaWR5Lmxhc3Rfc2hvd24pKTsKICAgICAgIHczY19zbGlkeS5zZXRfbG9jYXRpb24oKTsKICAgICB9CiAgfSwKCiAgLy8gZ290byBsYXN0IHNsaWRlIHdpdGggZXZlcnl0aGluZyByZXZlYWxlZAogIC8vIGkuZS4gc3RhdGUgYXQgZW5kIG9mIHByZXNlbnRhdGlvbgogIGxhc3Rfc2xpZGU6IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdzNjX3NsaWR5LnZpZXdfYWxsKQogICAgewogICAgICB2YXIgc2xpZGU7CgogICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IG51bGw7IC8vcmV2ZWFsTmV4dEl0ZW0obGFzdFNob3duKTsKCiAgICAgIGlmICh3M2Nfc2xpZHkubGFzdF9zaG93biA9PSBudWxsICYmCiAgICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyIDwgdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID0gdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxOwogICAgICAgICBzbGlkZSA9IHczY19zbGlkeS5zbGlkZXNbdzNjX3NsaWR5LnNsaWRlX251bWJlcl07CiAgICAgICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkucHJldmlvdXNfaW5jcmVtZW50YWxfaXRlbShudWxsKTsKCiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgidmlzaWJsZSIpOwogICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IHczY19zbGlkeS5wcmV2aW91c19pbmNyZW1lbnRhbF9pdGVtKG51bGwpOwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXModHJ1ZSk7CiAgICAgIHczY19zbGlkeS5zZXRfbG9jYXRpb24oKTsKICAgIH0KICB9LAoKCiAgLy8gIyMjIGNoZWNrIHRoaXMgYW5kIGNvbnNpZGVyIGFkZC9yZW1vdmUgY2xhc3MKICBzZXRfZW9zX3N0YXR1czogZnVuY3Rpb24gKHN0YXRlKSB7CiAgICBpZiAodGhpcy5lb3MpCiAgICAgIHRoaXMuZW9zLnN0eWxlLmNvbG9yID0gKHN0YXRlID8gInJnYigyNDAsMjQwLDI0MCkiIDogInJlZCIpOwogIH0sCgogIC8vIGZpcnN0IHNsaWRlIGlzIDAKICBnb3RvX3NsaWRlOiBmdW5jdGlvbiAobnVtKSB7CiAgICAvL2FsZXJ0KCJnb2luZyB0byBzbGlkZSAiICsgKG51bSsxKSk7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IG51bTsKICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoImhpZGRlbiIpOwogICAgdzNjX3NsaWR5LnNldF9lb3Nfc3RhdHVzKCF3M2Nfc2xpZHkubmV4dF9pbmNyZW1lbnRhbF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKSk7CiAgICBkb2N1bWVudC50aXRsZSA9IHczY19zbGlkeS50aXRsZSArICIgKCIgKyAodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSArICIpIjsKICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgIHczY19zbGlkeS5zaG93X3NsaWRlX251bWJlcigpOwogIH0sCgoKICBzaG93X3NsaWRlOiBmdW5jdGlvbiAoc2xpZGUpIHsKICAgIHRoaXMuc3luY19iYWNrZ3JvdW5kKHNsaWRlKTsKICAgIHRoaXMucmVtb3ZlX2NsYXNzKHNsaWRlLCAiaGlkZGVuIik7CgogICAgLy8gd29yayBhcm91bmQgSUU5IG9iamVjdCByZW5kZXJpbmcgYnVnCiAgICBzZXRUaW1lb3V0KCJ3aW5kb3cuc2Nyb2xsVG8oMCwwKTsiLCAxKTsKICB9LAoKICBoaWRlX3NsaWRlOiBmdW5jdGlvbiAoc2xpZGUpIHsKICAgIHRoaXMuYWRkX2NsYXNzKHNsaWRlLCAiaGlkZGVuIik7CiAgfSwKCiAgc2V0X2ZvY3VzOiBmdW5jdGlvbiAoZWxlbWVudCkKICB7CiAgICBpZiAoZWxlbWVudCkKICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgZWxzZQogICAgewogICAgICB3M2Nfc2xpZHkuaGVscF9hbmNob3IuZm9jdXMoKTsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgdzNjX3NsaWR5LmhlbHBfYW5jaG9yLmJsdXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfSwKCiAgLy8gc2hvdyBqdXN0IHRoZSBiYWNrZ3JvdW5kcyBwZXJ0aW5lbnQgdG8gdGhpcyBzbGlkZQogIC8vIHdoZW4gc2xpZGUgYmFja2dyb3VuZC1jb2xvciBpcyB0cmFuc3BhcmVudAogIC8vIHRoaXMgc2hvdWxkIG5vdyB3b3JrIHdpdGggcmdiYSBjb2xvciB2YWx1ZXMKICBzeW5jX2JhY2tncm91bmQ6IGZ1bmN0aW9uIChzbGlkZSkgewogICAgdmFyIGJhY2tncm91bmQ7CiAgICB2YXIgYmdDb2xvcjsKCiAgICBpZiAoc2xpZGUuY3VycmVudFN0eWxlKQogICAgICBiZ0NvbG9yID0gc2xpZGUuY3VycmVudFN0eWxlWyJiYWNrZ3JvdW5kQ29sb3IiXTsKICAgIGVsc2UgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3KQogICAgewogICAgICB2YXIgc3R5bGVzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShzbGlkZSxudWxsKTsKCiAgICAgIGlmIChzdHlsZXMpCiAgICAgICAgYmdDb2xvciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWNvbG9yIik7CiAgICAgIGVsc2UgLy8gYnJva2VuIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IGR1ZSBTYWZhcmkgb3IgS29ucXVlcm9yCiAgICAgIHsKICAgICAgICAvL2FsZXJ0KCJkZWZlY3RpdmUgaW1wbGVtZW50YXRpb24gb2YgZ2V0Q29tcHV0ZWRTdHlsZSgpIik7CiAgICAgICAgYmdDb2xvciA9ICJ0cmFuc3BhcmVudCI7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgYmdDb2xvciA9PSAidHJhbnNwYXJlbnQiOwoKICAgIGlmIChiZ0NvbG9yID09ICJ0cmFuc3BhcmVudCIgfHwKICAgICAgICBiZ0NvbG9yLmluZGV4T2YoInJnYmEiKSA+PSAwIHx8CiAgICAgICAgYmdDb2xvci5pbmRleE9mKCJvcGFjaXR5IikgPj0gMCkKICAgIHsKICAgICAgdmFyIHNsaWRlQ2xhc3MgPSB0aGlzLmdldF9jbGFzc19saXN0KHNsaWRlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iYWNrZ3JvdW5kcy5sZW5ndGg7IGkrKykKICAgICAgewogICAgICAgIGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRzW2ldOwoKICAgICAgICB2YXIgYmdDbGFzcyA9IHRoaXMuZ2V0X2NsYXNzX2xpc3QoYmFja2dyb3VuZCk7CgogICAgICAgIGlmICh0aGlzLm1hdGNoaW5nX2JhY2tncm91bmQoc2xpZGVDbGFzcywgYmdDbGFzcykpCiAgICAgICAgICB0aGlzLnJlbW92ZV9jbGFzcyhiYWNrZ3JvdW5kLCAiaGlkZGVuIik7CiAgICAgICAgZWxzZQogICAgICAgICAgdGhpcy5hZGRfY2xhc3MoYmFja2dyb3VuZCwgImhpZGRlbiIpOwogICAgICB9CiAgICB9CiAgICBlbHNlIC8vIGZvcmNpYmx5IGhpZGUgYWxsIGJhY2tncm91bmRzCiAgICAgIHRoaXMuaGlkZV9iYWNrZ3JvdW5kcygpOwogIH0sCgogIGhpZGVfYmFja2dyb3VuZHM6IGZ1bmN0aW9uICgpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iYWNrZ3JvdW5kcy5sZW5ndGg7IGkrKykKICAgIHsKICAgICAgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZHNbaV07CiAgICAgIHRoaXMuYWRkX2NsYXNzKGJhY2tncm91bmQsICJoaWRkZW4iKTsKICAgIH0KICB9LAoKICAvLyBjb21wYXJlIGNsYXNzZXMgZm9yIHNsaWRlIGFuZCBiYWNrZ3JvdW5kCiAgbWF0Y2hpbmdfYmFja2dyb3VuZDogZnVuY3Rpb24gKHNsaWRlQ2xhc3MsIGJnQ2xhc3MpIHsKICAgIHZhciBpLCBjb3VudCwgcGF0dGVybiwgcmVzdWx0OwoKICAgIC8vIGRlZmluZSBwYXR0ZXJuIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgcGF0dGVybiA9IC9cdysvZzsKCiAgICAvLyBjaGVjayBiYWNrZ3JvdW5kIGNsYXNzIG5hbWVzCiAgICByZXN1bHQgPSBiZ0NsYXNzLm1hdGNoKHBhdHRlcm4pOwoKICAgIGZvciAoaSA9IGNvdW50ID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykKICAgIHsKICAgICAgaWYgKHJlc3VsdFtpXSA9PSAiaGlkZGVuIikKICAgICAgICBjb250aW51ZTsKCiAgICAgIGlmIChyZXN1bHRbaV0gPT0gImJhY2tncm91bmQiKQoJY29udGludWU7CgogICAgICArK2NvdW50OwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSAgLy8gZGVmYXVsdCBtYXRjaAogICAgICByZXR1cm4gdHJ1ZTsKCiAgICAvLyBjaGVjayBmb3IgbWF0Y2hlcyBhbmQgcGxhY2UgcmVzdWx0IGluIGFycmF5CiAgICByZXN1bHQgPSBzbGlkZUNsYXNzLm1hdGNoKHBhdHRlcm4pOwoKICAgIC8vIG5vdyBjaGVjayBpZiBkZXNpcmVkIG5hbWUgaXMgcHJlc2VudCBmb3IgYmFja2dyb3VuZAogICAgZm9yIChpID0gY291bnQgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKQogICAgewogICAgICBpZiAocmVzdWx0W2ldID09ICJoaWRkZW4iKQogICAgICAgIGNvbnRpbnVlOwoKICAgICAgaWYgKHRoaXMuaGFzX3Rva2VuKGJnQ2xhc3MsIHJlc3VsdFtpXSkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIHJlc2l6ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICB2YXIgd2lkdGggPSAwOwoKICAgICBpZiAoIHR5cGVvZiggd2luZG93LmlubmVyV2lkdGggKSA9PSAnbnVtYmVyJyApCiAgICAgICB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyAgLy8gTm9uIElFIGJyb3dzZXIKICAgICBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKQogICAgICAgd2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ICAvLyBJRTYKICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpCiAgICAgICB3aWR0aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7IC8vIElFNAoKICAgICB2YXIgaGVpZ2h0ID0gMDsKCiAgICAgaWYgKCB0eXBlb2YoIHdpbmRvdy5pbm5lckhlaWdodCApID09ICdudW1iZXInICkKICAgICAgIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsgIC8vIE5vbiBJRSBicm93c2VyCiAgICAgZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCiAgICAgICBoZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyAgLy8gSUU2CiAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkKICAgICAgIGhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OyAvLyBJRTQKCiAgICAgaWYgKGhlaWdodCAmJiAod2lkdGgvaGVpZ2h0ID4gMS4wNSoxMDI0Lzc2OCkpCiAgICAgewogICAgICAgd2lkdGggPSBoZWlnaHQgKiAxMDI0LjAvNzY4OwogICAgIH0KCiAgICAgLy8gSUUgZmlyZXMgb25yZXNpemUgZXZlbiB3aGVuIG9ubHkgZm9udCBzaXplIGlzIGNoYW5nZWQhCiAgICAgLy8gc28gd2UgZG8gYSBjaGVjayB0byBhdm9pZCBibG9ja2luZyA8IGFuZCA+IGFjdGlvbnMKICAgICBpZiAod2lkdGggIT0gdzNjX3NsaWR5Lmxhc3Rfd2lkdGggfHwgaGVpZ2h0ICE9IHczY19zbGlkeS5sYXN0X2hlaWdodCkKICAgICB7CiAgICAgICBpZiAod2lkdGggPj0gMTEwMCkKICAgICAgICAgdzNjX3NsaWR5LnNpemVfaW5kZXggPSA1OyAgICAvLyA0CiAgICAgICBlbHNlIGlmICh3aWR0aCA+PSAxMDAwKQogICAgICAgICB3M2Nfc2xpZHkuc2l6ZV9pbmRleCA9IDQ7ICAgIC8vIDMKICAgICAgIGVsc2UgaWYgKHdpZHRoID49IDgwMCkKICAgICAgICAgdzNjX3NsaWR5LnNpemVfaW5kZXggPSAzOyAgICAvLyAyCiAgICAgICBlbHNlIGlmICh3aWR0aCA+PSA2MDApCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gMjsgICAgLy8gMQogICAgICAgZWxzZSBpZiAod2lkdGgpCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gMDsKCiAgICAgICAvLyBhZGQgaW4gZm9udCBzaXplIGFkanVzdG1lbnQgZnJvbSBtZXRhIGVsZW1lbnQgZS5nLgogICAgICAgLy8gPG1ldGEgbmFtZT0iZm9udC1zaXplLWFkanVzdG1lbnQiIGNvbnRlbnQ9Ii0yIiAvPgogICAgICAgLy8gdXNlZnVsIHdoZW4gc2xpZGVzIGhhdmUgdG9vIG11Y2ggY29udGVudCA7LSkKCiAgICAgICBpZiAoMCA8PSB3M2Nfc2xpZHkuc2l6ZV9pbmRleCArIHczY19zbGlkeS5zaXplX2FkanVzdG1lbnQgJiYKICAgICAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ICsgdzNjX3NsaWR5LnNpemVfYWRqdXN0bWVudCA8IHczY19zbGlkeS5zaXplcy5sZW5ndGgpCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gdzNjX3NsaWR5LnNpemVfaW5kZXggKyB3M2Nfc2xpZHkuc2l6ZV9hZGp1c3RtZW50OwoKICAgICAgIC8vIGVuYWJsZXMgY3Jvc3MgYnJvd3NlciB1c2Ugb2YgcmVsYXRpdmUgd2lkdGgvaGVpZ2h0CiAgICAgICAvLyBvbiBvYmplY3QgZWxlbWVudHMgZm9yIHVzZSB3aXRoIFNWRyBhbmQgRmxhc2ggbWVkaWEKICAgICAgIHczY19zbGlkeS5hZGp1c3Rfb2JqZWN0X2RpbWVuc2lvbnMod2lkdGgsIGhlaWdodCk7CgogICAgICAgaWYgKGRvY3VtZW50LmJvZHkuc3R5bGUuZm9udFNpemUgIT0gdzNjX3NsaWR5LnNpemVzW3czY19zbGlkeS5zaXplX2luZGV4XSkKICAgICAgIHsKICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICAgICB9CgogICAgICAgdzNjX3NsaWR5Lmxhc3Rfd2lkdGggPSB3aWR0aDsKICAgICAgIHczY19zbGlkeS5sYXN0X2hlaWdodCA9IGhlaWdodDsKCiAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gd29yayBhcm91bmQgTW96aWxsYSBidWcKICAgICAgIGlmICh3M2Nfc2xpZHkubnNfcG9zKQogICAgICAgewogICAgICAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgICB3M2Nfc2xpZHkuaGlkZV9zbGlkZShzbGlkZSk7CiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgIH0KCiAgICAgICAvLyBmb3JjZSBjb3JyZWN0IHBvc2l0aW9uaW5nIG9mIHRvb2xiYXIKICAgICAgIHczY19zbGlkeS5yZWZyZXNoX3Rvb2xiYXIoMjAwKTsKICAgICB9CiAgfSwKCiAgc2Nyb2xsZWQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3M2Nfc2xpZHkudG9vbGJhciAmJiAhdzNjX3NsaWR5Lm5zX3BvcyAmJiAhdzNjX3NsaWR5LmllNykKICAgIHsKICAgICAgdzNjX3NsaWR5LmhhY2tfb2Zmc2V0ID0gdzNjX3NsaWR5LnNjcm9sbF94X29mZnNldCgpOwogICAgICAvLyBoaWRlIHRvb2xiYXIKICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCiAgICAgIC8vIG1ha2UgaXQgcmVhcHBlYXIgbGF0ZXIKICAgICAgaWYgKHczY19zbGlkeS5zY3JvbGxoYWNrID09IDAgJiYgIXczY19zbGlkeS52aWV3X2FsbCkKICAgICAgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge3czY19zbGlkeS5zaG93X3Rvb2xiYXIoKTsgfSwgMTAwMCk7CiAgICAgICAgdzNjX3NsaWR5LnNjcm9sbGhhY2sgPSAxOwogICAgICB9CiAgICB9CiAgfSwKCiAgaGlkZV90b29sYmFyOiBmdW5jdGlvbiAoKSB7CiAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKHczY19zbGlkeS50b29sYmFyLCAiaGlkZGVuIik7CiAgICB3aW5kb3cuZm9jdXMoKTsKICB9LAoKICAvLyB1c2VkIHRvIGVuc3VyZSBJRSByZWZyZXNoZXMgdG9vbGJhciBpbiBjb3JyZWN0IHBvc2l0aW9uCiAgcmVmcmVzaF90b29sYmFyOiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHsKICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcyAmJiAhdzNjX3NsaWR5LmllNykKICAgIHsKICAgICAgdzNjX3NsaWR5LmhpZGVfdG9vbGJhcigpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHt3M2Nfc2xpZHkuc2hvd190b29sYmFyKCk7fSwgaW50ZXJ2YWwpOwogICAgfQogIH0sCgogIC8vIHJlc3RvcmVzIHRvb2xiYXIgYWZ0ZXIgc2hvcnQgZGVsYXkKICBzaG93X3Rvb2xiYXI6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3M2Nfc2xpZHkud2FudF90b29sYmFyKQogICAgewogICAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCiAgICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcykKICAgICAgewogICAgICAgIC8vIGFkanVzdCBwb3NpdGlvbiB0byBhbGxvdyBmb3Igc2Nyb2xsaW5nCiAgICAgICAgdmFyIHhvZmZzZXQgPSB3M2Nfc2xpZHkuc2Nyb2xsX3hfb2Zmc2V0KCk7CiAgICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUubGVmdCA9IHhvZmZzZXQ7CiAgICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUucmlnaHQgPSB4b2Zmc2V0OwoKICAgICAgICAvLyBkZXRlcm1pbmUgdmVydGljYWwgc2Nyb2xsIG9mZnNldAogICAgICAgIC8vdmFyIHlvZmZzZXQgPSBzY3JvbGxZT2Zmc2V0KCk7CgogICAgICAgIC8vIGJvdHRvbSBpcyBkb2MgaGVpZ2h0IC0gd2luZG93IGhlaWdodCAtIHNjcm9sbCBvZmZzZXQKICAgICAgICAvL3ZhciBib3R0b20gPSBkb2N1bWVudEhlaWdodCgpIC0gbGFzdEhlaWdodCAtIHlvZmZzZXQKCiAgICAgICAgLy9pZiAoeW9mZnNldCA+IDAgfHwgZG9jdW1lbnRIZWlnaHQoKSA+IGxhc3RIZWlnaHQpCiAgICAgICAgLy8gICBib3R0b20gKz0gMTY7ICAvLyBhbGxvdyBmb3IgaGVpZ2h0IG9mIHNjcm9sbGJhcgoKICAgICAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5ib3R0b20gPSAwOyAvL2JvdHRvbTsKICAgICAgfQoKICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpOwogICAgfQoKICAgIHczY19zbGlkeS5zY3JvbGxoYWNrID0gMDsKCgogICAgLy8gc2V0IHRoZSBrZXlib2FyZCBmb2N1cyB0byB0aGUgaGVscCBsaW5rIG9uIHRoZQogICAgLy8gdG9vbGJhciB0byBlbnN1cmUgdGhhdCBkb2N1bWVudCBoYXMgdGhlIGZvY3VzCiAgICAvLyBJRSBkb2Vzbid0IGFsd2F5cyB3b3JrIHdpdGggd2luZG93LmZvY3VzKCkKICAgIC8vIGFuZCB0aGlzIGhhY2sgaGFzIGJlbmVmaXQgb2YgRW50ZXIgZm9yIGhlbHAKCiAgICB0cnkKICAgIHsKICAgICAgaWYgKCF3M2Nfc2xpZHkub3BlcmEpCiAgICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogICAgfQogICAgY2F0Y2ggKGUpCiAgICB7CiAgICB9CiAgfSwKCi8vIGludm9rZWQgdmlhIEYga2V5CiAgdG9nZ2xlX3Rvb2xiYXI6IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdzNjX3NsaWR5LnZpZXdfYWxsKQogICAgewogICAgICBpZiAodzNjX3NsaWR5Lmhhc19jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpKQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgICAgdzNjX3NsaWR5LndhbnRfdG9vbGJhciA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5LmFkZF9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgICAgdzNjX3NsaWR5LndhbnRfdG9vbGJhciA9IDA7CiAgICAgIH0KICAgIH0KICB9LAoKICBzY3JvbGxfeF9vZmZzZXQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3aW5kb3cucGFnZVhPZmZzZXQpCiAgICAgIHJldHVybiBzZWxmLnBhZ2VYT2Zmc2V0OwoKICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgCiAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwoKICAgIGlmIChkb2N1bWVudC5ib2R5KQogICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OwoKICAgIHJldHVybiAwOwogIH0sCgogIHNjcm9sbF95X29mZnNldDogZnVuY3Rpb24gKCkgewogICAgaWYgKHdpbmRvdy5wYWdlWU9mZnNldCkKICAgICAgcmV0dXJuIHNlbGYucGFnZVlPZmZzZXQ7CgogICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAKICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApCiAgICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwoKICAgIGlmIChkb2N1bWVudC5ib2R5KQogICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CgogICAgcmV0dXJuIDA7CiAgfSwKCiAgLy8gbG9va2luZyBmb3IgYSB3YXkgdG8gZGV0ZXJtaW5lIGhlaWdodCBvZiBzbGlkZSBjb250ZW50CiAgLy8gdGhlIHNsaWRlIGl0c2VsZiBpcyBzZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgd2luZG93CiAgb3B0aW1pemVfZm9udF9zaXplOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIC8vdmFyIGRoID0gZG9jdW1lbnRIZWlnaHQoKTsgLy9nZXREb2NIZWlnaHQoZG9jdW1lbnQpOwogICAgdmFyIGRoID0gc2xpZGUuc2Nyb2xsSGVpZ2h0OwogICAgdmFyIHdoID0gZ2V0V2luZG93SGVpZ2h0KCk7CiAgICB2YXIgdSA9IDEwMCAqIGRoIC8gd2g7CgogICAgYWxlcnQoIndpbmRvdyB1dGlsaXphdGlvbiA9ICIgKyB1ICsgIiUgKGRvYyAiCiAgICAgICsgZGggKyAiIHdpbiAiICsgd2ggKyAiKSIpOwogIH0sCgogIC8vIGZyb20gZG9jdW1lbnQgb2JqZWN0CiAgZ2V0X2RvY19oZWlnaHQ6IGZ1bmN0aW9uIChkb2MpIHsKICAgIGlmICghZG9jKQogICAgICBkb2MgPSBkb2N1bWVudDsKCiAgICBpZiAoZG9jICYmIGRvYy5ib2R5ICYmIGRvYy5ib2R5Lm9mZnNldEhlaWdodCkKICAgICAgcmV0dXJuIGRvYy5ib2R5Lm9mZnNldEhlaWdodDsgIC8vIG5zL2dlY2tvIHN5bnRheAoKICAgIGlmIChkb2MgJiYgZG9jLmJvZHkgJiYgZG9jLmJvZHkuc2Nyb2xsSGVpZ2h0KQogICAgICByZXR1cm4gZG9jLmJvZHkuc2Nyb2xsSGVpZ2h0OwoKICAgIGFsZXJ0KCJjb3VsZG4ndCBkZXRlcm1pbmUgZG9jdW1lbnQgaGVpZ2h0Iik7CiAgfSwKCiAgZ2V0X3dpbmRvd19oZWlnaHQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICggdHlwZW9mKCB3aW5kb3cuaW5uZXJIZWlnaHQgKSA9PSAnbnVtYmVyJyApCiAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7ICAvLyBOb24gSUUgYnJvd3NlcgoKICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7ICAvLyBJRTYKCiAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OyAvLyBJRTQKICB9LAoKICBkb2N1bWVudF9oZWlnaHQ6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzaCwgb2g7CgogICAgc2ggPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKICAgIG9oID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7CgogICAgaWYgKHNoICYmIG9oKQogICAgewogICAgICByZXR1cm4gKHNoID4gb2ggPyBzaCA6IG9oKTsKICAgIH0KCiAgICAvLyBubyBpZGVhIQogICAgcmV0dXJuIDA7CiAgfSwKCiAgc21hbGxlcjogZnVuY3Rpb24gKCkgewogICAgaWYgKHczY19zbGlkeS5zaXplX2luZGV4ID4gMCkKICAgIHsKICAgICAgLS13M2Nfc2xpZHkuc2l6ZV9pbmRleDsKICAgIH0KCiAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7dzNjX3NsaWR5LnNob3dfdG9vbGJhcigpOyB9LCA1MCk7CiAgfSwKCiAgYmlnZ2VyOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAodzNjX3NsaWR5LnNpemVfaW5kZXggPCB3M2Nfc2xpZHkuc2l6ZXMubGVuZ3RoIC0gMSkKICAgIHsKICAgICAgKyt3M2Nfc2xpZHkuc2l6ZV9pbmRleDsKICAgIH0KCiAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7dzNjX3NsaWR5LnNob3dfdG9vbGJhcigpOyB9LCA1MCk7CiAgfSwKCiAgLy8gZW5hYmxlcyBjcm9zcyBicm93c2VyIHVzZSBvZiByZWxhdGl2ZSB3aWR0aC9oZWlnaHQKICAvLyBvbiBvYmplY3QgZWxlbWVudHMgZm9yIHVzZSB3aXRoIFNWRyBhbmQgRmxhc2ggbWVkaWEKICAvLyB3aXRoIHRoYW5rcyB0byBJdmFuIEhlcm1hbiBmb3IgdGhlIHN1Z2dlc3Rpb24KICBhZGp1c3Rfb2JqZWN0X2RpbWVuc2lvbnM6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7CiAgICBmb3IoIHZhciBpID0gMDsgaSA8IHczY19zbGlkeS5vYmplY3RzLmxlbmd0aDsgaSsrICkKICAgIHsKICAgICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0c1tpXTsKICAgICAgdmFyIG1pbWVUeXBlID0gb2JqLmdldEF0dHJpYnV0ZSgidHlwZSIpOwoKICAgICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKQogICAgICB7CiAgICAgICAgaWYgKCAhb2JqLmluaXRpYWxXaWR0aCApIAogICAgICAgICAgb2JqLmluaXRpYWxXaWR0aCA9IG9iai5nZXRBdHRyaWJ1dGUoIndpZHRoIik7CgogICAgICAgIGlmICggIW9iai5pbml0aWFsSGVpZ2h0ICkgCiAgICAgICAgICBvYmouaW5pdGlhbEhlaWdodCA9IG9iai5nZXRBdHRyaWJ1dGUoImhlaWdodCIpOwoKICAgICAgICBpZiAoIG9iai5pbml0aWFsV2lkdGggJiYgb2JqLmluaXRpYWxXaWR0aC5jaGFyQXQob2JqLmluaXRpYWxXaWR0aC5sZW5ndGgtMSkgPT0gIiUiICkKICAgICAgICB7CiAgICAgICAgICB2YXIgdyA9IHBhcnNlSW50KG9iai5pbml0aWFsV2lkdGguc2xpY2UoMCwgb2JqLmluaXRpYWxXaWR0aC5sZW5ndGgtMSkpOwogICAgICAgICAgdmFyIG5ld1cgPSB3aWR0aCAqICh3LzEwMC4wKTsKICAgICAgICAgIG9iai5zZXRBdHRyaWJ1dGUoIndpZHRoIixuZXdXKTsKICAgICAgICB9CgogICAgICAgIGlmICggb2JqLmluaXRpYWxIZWlnaHQgJiYKICAgICAgICAgICAgIG9iai5pbml0aWFsSGVpZ2h0LmNoYXJBdChvYmouaW5pdGlhbEhlaWdodC5sZW5ndGgtMSkgPT0gIiUiICkKICAgICAgICB7CiAgICAgICAgICB2YXIgaCA9IHBhcnNlSW50KG9iai5pbml0aWFsSGVpZ2h0LnNsaWNlKDAsIG9iai5pbml0aWFsSGVpZ2h0Lmxlbmd0aC0xKSk7CiAgICAgICAgICB2YXIgbmV3SCA9IGhlaWdodCAqIChoLzEwMC4wKTsKICAgICAgICAgIG9iai5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIG5ld0gpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCgogIC8vIG5lZWRlZCBmb3IgT3BlcmEgdG8gaW5oaWJpdCBkZWZhdWx0IGJlaGF2aW9yCiAgLy8gc2luY2UgT3BlcmEgZGVsaXZlcnMga2V5UHJlc3MgZXZlbiBpZiBrZXlEb3duCiAgLy8gd2FzIGNhbmNlbGxlZAogIGtleV9wcmVzczogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50KQogICAgICBldmVudCA9IHdpbmRvdy5ldmVudDsKCiAgICBpZiAoIXczY19zbGlkeS5rZXlfd2FudGVkKQogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgLy8gIFNlZSBlLmcuIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzL2tleXMuaHRtbCBmb3Iga2V5Y29kZXMKICBrZXlfZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIga2V5LCB0YXJnZXQsIHRhZzsKCiAgICB3M2Nfc2xpZHkua2V5X3dhbnRlZCA9IHRydWU7CgogICAgaWYgKCFldmVudCkKICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh3aW5kb3cuZXZlbnQpCiAgICB7CiAgICAgIGtleSA9IHdpbmRvdy5ldmVudC5rZXlDb2RlOwogICAgICB0YXJnZXQgPSB3aW5kb3cuZXZlbnQuc3JjRWxlbWVudDsKICAgIH0KICAgIGVsc2UgaWYgKGV2ZW50LndoaWNoKQogICAgewogICAgICBrZXkgPSBldmVudC53aGljaDsKICAgICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgfQogICAgZWxzZQogICAgICByZXR1cm4gdHJ1ZTsgLy8gWWlrZXMhIHVua25vd24gYnJvd3NlcgoKICAgIC8vIGlnbm9yZSBldmVudCBpZiBrZXkgdmFsdWUgaXMgemVybwogICAgLy8gYXMgZm9yIGFsdCBvbiBPcGVyYSBhbmQgS29ucXVlcm9yCiAgICBpZiAoIWtleSkKICAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGgga2V5c3Ryb2tlCiAgICAvLyBiZWhhdmlvciBmb3Igbm9uLXNsaWR5IGNocm9tZSBlbGVtZW50cwogICAgaWYgKCF3M2Nfc2xpZHkuc2xpZHlfY2hyb21lKHRhcmdldCkgJiYKICAgICAgICB3M2Nfc2xpZHkuc3BlY2lhbF9lbGVtZW50KHRhcmdldCkpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGNoZWNrIGZvciBjb25jdXJyZW50IGNvbnRyb2wvY29tbWFuZC9hbHQga2V5CiAgICAvLyBidXQgYXJlIHRoZXNlIG9ubHkgcHJlc2VudCBvbiBtb3VzZSBldmVudHM/CgogICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAvLyBkaXNtaXNzIHRhYmxlIG9mIGNvbnRlbnRzIGlmIHZpc2libGUKICAgIGlmICh3M2Nfc2xpZHkuaXNfc2hvd25fdG9jKCkgJiYga2V5ICE9IDkgJiYga2V5ICE9IDE2ICYmIGtleSAhPSAzOCAmJiBrZXkgIT0gNDApCiAgICB7CiAgICAgIHczY19zbGlkeS5oaWRlX3RhYmxlX29mX2NvbnRlbnRzKHRydWUpOwoKICAgICAgaWYgKGtleSA9PSAyNyB8fCBrZXkgPT0gODQgfHwga2V5ID09IDY3KQogICAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KCiAgICBpZiAoa2V5ID09IDM0KSAvLyBQYWdlIERvd24KICAgIHsKICAgICAgaWYgKHczY19zbGlkeS52aWV3X2FsbCkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgIHczY19zbGlkeS5uZXh0X3NsaWRlKGZhbHNlKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDMzKSAvLyBQYWdlIFVwCiAgICB7CiAgICAgIGlmICh3M2Nfc2xpZHkudmlld19hbGwpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICB3M2Nfc2xpZHkucHJldmlvdXNfc2xpZGUoZmFsc2UpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMzIpIC8vIHNwYWNlIGJhcgogICAgewogICAgICB3M2Nfc2xpZHkubmV4dF9zbGlkZSh0cnVlKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDM3KSAvLyBMZWZ0IGFycm93CiAgICB7CiAgICAgIHczY19zbGlkeS5wcmV2aW91c19zbGlkZSghZXZlbnQuc2hpZnRLZXkpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMzYpIC8vIEhvbWUKICAgIHsKICAgICAgdzNjX3NsaWR5LmZpcnN0X3NsaWRlKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSAzNSkgLy8gRW5kCiAgICB7CiAgICAgIHczY19zbGlkeS5sYXN0X3NsaWRlKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSAzOSkgLy8gUmlnaHQgYXJyb3cKICAgIHsKICAgICAgdzNjX3NsaWR5Lm5leHRfc2xpZGUoIWV2ZW50LnNoaWZ0S2V5KTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDEzKSAvLyBFbnRlcgogICAgewogICAgICBpZiAodzNjX3NsaWR5Lm91dGxpbmUpCiAgICAgIHsKICAgICAgICBpZiAodzNjX3NsaWR5Lm91dGxpbmUudmlzaWJsZSkKICAgICAgICAgIHczY19zbGlkeS5mb2xkKHczY19zbGlkeS5vdXRsaW5lKTsKICAgICAgICBlbHNlCiAgICAgICAgICB3M2Nfc2xpZHkudW5mb2xkKHczY19zbGlkeS5vdXRsaW5lKTsKICAgICAgICAgIAogICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTg4KSAgLy8gPCBmb3Igc21hbGxlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuc21hbGxlcigpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTkwKSAgLy8gPiBmb3IgbGFyZ2VyIGZvbnRzCiAgICB7CiAgICAgIHczY19zbGlkeS5iaWdnZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDE4OSB8fCBrZXkgPT0gMTA5KSAgLy8gLSBmb3Igc21hbGxlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuc21hbGxlcigpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTg3IHx8IGtleSA9PSAxOTEgfHwga2V5ID09IDEwNykgIC8vID0gKyAgZm9yIGxhcmdlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuYmlnZ2VyKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA4MykgIC8vIFMgZm9yIHNtYWxsZXIgZm9udHMKICAgIHsKICAgICAgdzNjX3NsaWR5LnNtYWxsZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDY2KSAgLy8gQiBmb3IgbGFyZ2VyIGZvbnRzCiAgICB7CiAgICAgIHczY19zbGlkeS5iaWdnZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDkwKSAgLy8gWiBmb3IgbGFzdCBzbGlkZQogICAgewogICAgICB3M2Nfc2xpZHkubGFzdF9zbGlkZSgpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gNzApICAvLyBGIGZvciB0b2dnbGUgdG9vbGJhcgogICAgewogICAgICB3M2Nfc2xpZHkudG9nZ2xlX3Rvb2xiYXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDY1KSAgLy8gQSBmb3IgdG9nZ2xlIHZpZXcgc2luZ2xlL2FsbCBzbGlkZXMKICAgIHsKICAgICAgdzNjX3NsaWR5LnRvZ2dsZV92aWV3KCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA3NSkgIC8vIHRvZ2dsZSBhY3Rpb24gb2YgbGVmdCBjbGljayBmb3IgbmV4dCBwYWdlCiAgICB7CiAgICAgIHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkID0gIXczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkOwogICAgICB2YXIgYWxlcnRfbXNnID0gKHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkID8KICAgICAgICAgICAgICAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpICsgICIgbW91c2UgY2xpY2sgYWR2YW5jZSI7CgogICAgICBhbGVydCh3M2Nfc2xpZHkubG9jYWxpemUoYWxlcnRfbXNnKSk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA4NCB8fCBrZXkgPT0gNjcpICAvLyBUIG9yIEMgZm9yIHRhYmxlIG9mIGNvbnRlbnRzCiAgICB7CiAgICAgIGlmICh3M2Nfc2xpZHkudG9jKQogICAgICAgIHczY19zbGlkeS50b2dnbGVfdGFibGVfb2ZfY29udGVudHMoKTsKCiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA3MikgLy8gSCBmb3IgaGVscAogICAgewogICAgICB3aW5kb3cubG9jYXRpb24gPSB3M2Nfc2xpZHkuaGVscF9wYWdlOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICAvL2Vsc2UgYWxlcnQoImtleSBjb2RlIGlzICIrIGtleSk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgLy8gc2FmZSBmb3IgYm90aCB0ZXh0L2h0bWwgYW5kIGFwcGxpY2F0aW9uL3hodG1sK3htbAogIGNyZWF0ZV9lbGVtZW50OiBmdW5jdGlvbiAobmFtZSkgewogICAgaWYgKHRoaXMueGh0bWwgJiYgKHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgIT0gJ3VuZGVmaW5lZCcpKQogICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgbmFtZSkKCiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTsKICB9LAoKICBnZXRfZWxlbWVudF9zdHlsZTogZnVuY3Rpb24gKGVsZW0sIElFU3R5bGVQcm9wLCBDU1NTdHlsZVByb3ApIHsKICAgIGlmIChlbGVtLmN1cnJlbnRTdHlsZSkKICAgIHsKICAgICAgcmV0dXJuIGVsZW0uY3VycmVudFN0eWxlW0lFU3R5bGVQcm9wXTsKICAgIH0KICAgIGVsc2UgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKQogICAgewogICAgICB2YXIgY29tcFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgIiIpOwogICAgICByZXR1cm4gY29tcFN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTU3R5bGVQcm9wKTsKICAgIH0KICAgIHJldHVybiAiIjsKICB9LAoKICAvLyB0aGUgc3RyaW5nIHN0ciBpcyBhIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdG9rZW5zCiAgLy8gdGVzdCBpZiBzdHIgY29udGFpbnMgYSBwYXJ0aWN1bGFyIHRva2VuLCBlLmcuICJzbGlkZSIKICBoYXNfdG9rZW46IGZ1bmN0aW9uIChzdHIsIHRva2VuKSB7CiAgICBpZiAoc3RyKQogICAgewogICAgICAvLyBkZWZpbmUgcGF0dGVybiBhcyByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgdmFyIHBhdHRlcm4gPSAvXHcrL2c7CgogICAgICAvLyBjaGVjayBmb3IgbWF0Y2hlcwogICAgICAvLyBwbGFjZSByZXN1bHQgaW4gYXJyYXkKICAgICAgdmFyIHJlc3VsdCA9IHN0ci5tYXRjaChwYXR0ZXJuKTsKCiAgICAgIC8vIG5vdyBjaGVjayBpZiBkZXNpcmVkIHRva2VuIGlzIHByZXNlbnQKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCiAgICAgIHsKICAgICAgICBpZiAocmVzdWx0W2ldID09IHRva2VuKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgZ2V0X2NsYXNzX2xpc3Q6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lICE9ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gZWxlbWVudC5jbGFzc05hbWU7CgogICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwogIH0sCgogIGhhc19jbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgiKF58ICkiICsgbmFtZSArICJcVyoiKTsKCiAgICBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lICE9ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gcmVnZXhwLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpOwoKICAgIHJldHVybiByZWdleHAudGVzdChlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2xhc3MiKSk7CiAgfSwKCiAgcmVtb3ZlX2NsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkgewogICAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoIihefCApIiArIG5hbWUgKyAiXFcqIik7CiAgICB2YXIgY2xzdmFsID0gIiI7CgogICAgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSAhPSAndW5kZWZpbmVkJykKICAgIHsKICAgICAgY2xzdmFsID0gZWxlbWVudC5jbGFzc05hbWU7CgogICAgICBpZiAoY2xzdmFsKQogICAgICB7CiAgICAgICAgY2xzdmFsID0gY2xzdmFsLnJlcGxhY2UocmVnZXhwLCAiIik7CiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBjbHN2YWw7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgY2xzdmFsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImNsYXNzIik7CgogICAgICBpZiAoY2xzdmFsKQogICAgICB7CiAgICAgICAgY2xzdmFsID0gY2xzdmFsLnJlcGxhY2UocmVnZXhwLCAiIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgY2xzdmFsKTsKICAgICAgfQogICAgfQogIH0sCgogIGFkZF9jbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKICAgIGlmICghdGhpcy5oYXNfY2xhc3MoZWxlbWVudCwgbmFtZSkpCiAgICB7CiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgIT0gJ3VuZGVmaW5lZCcpCiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gIiAiICsgbmFtZTsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdmFyIGNsc3ZhbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwogICAgICAgIGNsc3ZhbCA9IGNsc3ZhbCA/IGNsc3ZhbCArICIgIiArIG5hbWUgOiBuYW1lOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGNsc3ZhbCk7CiAgICAgIH0KICAgIH0KICB9LAoKICAvLyBIVE1MIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBjbGFzcz0iaW5jcmVtZW50YWwiCiAgLy8gbm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBwdXQgdGhlIGNsYXNzIG9uIGNvbnRhaW5lcnMgbGlrZQogIC8vIHVwLCBvbCwgZGwsIGFuZCBkaXYgdG8gbWFrZSB0aGVpciBjb250ZW50cyBhcHBlYXIKICAvLyBpbmNyZW1lbnRhbGx5LiBVcHBlciBjYXNlIGlzIHVzZWQgc2luY2UgdGhpcyBpcyB3aGF0CiAgLy8gYnJvd3NlcnMgcmVwb3J0IGZvciBIVE1MIG5vZGUgbmFtZXMgKHRleHQvaHRtbCkuCiAgaW5jcmVtZW50YWxfZWxlbWVudHM6IG51bGwsCiAgb2theV9mb3JfaW5jcmVtZW50YWw6IGZ1bmN0aW9uIChuYW1lKSB7CiAgICBpZiAoIXRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHMpCiAgICB7CiAgICAgIHZhciBpbmNsaXN0ID0gbmV3IEFycmF5KCk7CiAgICAgIGluY2xpc3RbInAiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbInByZSJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsibGkiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImJsb2NrcXVvdGUiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImR0Il0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJkZCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaDIiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImgzIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJoNCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaDUiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImg2Il0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJzcGFuIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJhZGRyZXNzIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJ0YWJsZSJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsidHIiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbInRoIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJ0ZCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaW1nIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJvYmplY3QiXSA9IHRydWU7CiAgICAgIHRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHMgPSBpbmNsaXN0OwogICAgfQogICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKICB9LAoKICBuZXh0X2luY3JlbWVudGFsX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICB2YXIgYnIgPSB0aGlzLmlzX3hodG1sID8gImJyIiA6ICJCUiI7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSB3M2Nfc2xpZHkubmV4dF9ub2RlKHNsaWRlLCBub2RlKTsKCiAgICAgIGlmIChub2RlID09IG51bGwgfHwgbm9kZS5wYXJlbnROb2RlID09IG51bGwpCiAgICAgICAgYnJlYWs7CgogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSAgLy8gRUxFTUVOVAogICAgICB7CiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gYnIpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgaWYgKHczY19zbGlkeS5oYXNfY2xhc3Mobm9kZSwgImluY3JlbWVudGFsIikKICAgICAgICAgICAgICYmIHczY19zbGlkeS5va2F5X2Zvcl9pbmNyZW1lbnRhbChub2RlLm5vZGVOYW1lKSkKICAgICAgICAgIHJldHVybiBub2RlOwoKICAgICAgICBpZiAodzNjX3NsaWR5Lmhhc19jbGFzcyhub2RlLnBhcmVudE5vZGUsICJpbmNyZW1lbnRhbCIpCiAgICAgICAgICAgICAmJiAhdzNjX3NsaWR5Lmhhc19jbGFzcyhub2RlLCAibm9uLWluY3JlbWVudGFsIikpCiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0sCgogIHByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICB2YXIgYnIgPSB0aGlzLmlzX3hodG1sID8gImJyIiA6ICJCUiI7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSB3M2Nfc2xpZHkucHJldmlvdXNfbm9kZShzbGlkZSwgbm9kZSk7CgogICAgICBpZiAobm9kZSA9PSBudWxsIHx8IG5vZGUucGFyZW50Tm9kZSA9PSBudWxsKQogICAgICAgIGJyZWFrOwoKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkKICAgICAgewogICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09IGJyKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIGlmICh3M2Nfc2xpZHkuaGFzX2NsYXNzKG5vZGUsICJpbmNyZW1lbnRhbCIpCiAgICAgICAgICAgICAmJiB3M2Nfc2xpZHkub2theV9mb3JfaW5jcmVtZW50YWwobm9kZS5ub2RlTmFtZSkpCiAgICAgICAgICByZXR1cm4gbm9kZTsKCiAgICAgICAgaWYgKHczY19zbGlkeS5oYXNfY2xhc3Mobm9kZS5wYXJlbnROb2RlLCAiaW5jcmVtZW50YWwiKQogICAgICAgICAgICAgJiYgIXczY19zbGlkeS5oYXNfY2xhc3Mobm9kZSwgIm5vbi1pbmNyZW1lbnRhbCIpKQogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9LAoKICAvLyBzZXQgdmlzaWJpbGl0eSBmb3IgYWxsIGVsZW1lbnRzIG9uIGN1cnJlbnQgc2xpZGUgd2l0aAogIC8vIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhdHRyaWJ1dGUgY2xhc3M9ImluY3JlbWVudGFsIgogIHNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICB2YXIgbm9kZSA9IHRoaXMubmV4dF9pbmNyZW1lbnRhbF9pdGVtKG51bGwpOwoKICAgIGlmICh2YWx1ZSA9PSAiaGlkZGVuIikKICAgIHsKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKG5vZGUsICJpbnZpc2libGUiKTsKICAgICAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKICAgICAgfQogICAgfQogICAgZWxzZSAvLyB2YWx1ZSA9PSAidmlzaWJsZSIKICAgIHsKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB3M2Nfc2xpZHkucmVtb3ZlX2NsYXNzKG5vZGUsICJpbnZpc2libGUiKTsKICAgICAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vIHJldmVhbCB0aGUgbmV4dCBoaWRkZW4gaXRlbSBvbiB0aGUgc2xpZGUKICAvLyBub2RlIGlzIG51bGwgb3IgdGhlIG5vZGUgdGhhdCB3YXMgbGFzdCByZXZlYWxlZAogIHJldmVhbF9uZXh0X2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKCiAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09IDEpICAvLyBhbiBlbGVtZW50CiAgICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3Mobm9kZSwgImludmlzaWJsZSIpOwoKICAgIHJldHVybiBub2RlOwogIH0sCgogIC8vIGV4YWN0IGludmVyc2Ugb2YgcmV2ZWFsTmV4dEl0ZW0obm9kZSkKICBoaWRlX3ByZXZpb3VzX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09IDEpICAvLyBhbiBlbGVtZW50CiAgICAgIHczY19zbGlkeS5hZGRfY2xhc3Mobm9kZSwgImludmlzaWJsZSIpOwoKICAgIHJldHVybiB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obm9kZSk7CiAgfSwKCiAgLy8gbGVmdCB0byByaWdodCB0cmF2ZXJzYWwgb2Ygcm9vdCdzIGNvbnRlbnQKICBuZXh0X25vZGU6IGZ1bmN0aW9uIChyb290LCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKQogICAgICByZXR1cm4gcm9vdC5maXJzdENoaWxkOwoKICAgIGlmIChub2RlLmZpcnN0Q2hpbGQpCiAgICAgIHJldHVybiBub2RlLmZpcnN0Q2hpbGQ7CgogICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpCiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7CgogICAgICBpZiAoIW5vZGUgfHwgbm9kZSA9PSByb290KQogICAgICAgIGJyZWFrOwoKICAgICAgaWYgKG5vZGUgJiYgbm9kZS5uZXh0U2libGluZykKICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZzsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9LAoKICAvLyByaWdodCB0byBsZWZ0IHRyYXZlcnNhbCBvZiByb290J3MgY29udGVudAogIHByZXZpb3VzX25vZGU6IGZ1bmN0aW9uIChyb290LCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKQogICAgewogICAgICBub2RlID0gcm9vdC5sYXN0Q2hpbGQ7CgogICAgICBpZiAobm9kZSkKICAgICAgewogICAgICAgIHdoaWxlIChub2RlLmxhc3RDaGlsZCkKICAgICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKICAgICAgfQoKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKQogICAgewogICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7CgogICAgICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpCiAgICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkOwoKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPSByb290KQogICAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlOwoKICAgIHJldHVybiBudWxsOwogIH0sCgogIHByZXZpb3VzX3NpYmxpbmdfZWxlbWVudDogZnVuY3Rpb24gKGVsKSB7CiAgICBlbCA9IGVsLnByZXZpb3VzU2libGluZzsKCiAgICB3aGlsZSAoZWwgJiYgZWwubm9kZVR5cGUgIT0gMSkKICAgICAgZWwgPSBlbC5wcmV2aW91c1NpYmxpbmc7CgogICAgcmV0dXJuIGVsOwogIH0sCgogIG5leHRfc2libGluZ19lbGVtZW50OiBmdW5jdGlvbiAoZWwpIHsKICAgIGVsID0gZWwubmV4dFNpYmxpbmc7CgogICAgd2hpbGUgKGVsICYmIGVsLm5vZGVUeXBlICE9IDEpCiAgICAgIGVsID0gZWwubmV4dFNpYmxpbmc7CgogICAgcmV0dXJuIGVsOwogIH0sCgogIGZpcnN0X2NoaWxkX2VsZW1lbnQ6IGZ1bmN0aW9uIChlbCkgewogICAgdmFyIG5vZGU7CgogICAgZm9yIChub2RlID0gZWwuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpCiAgICB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpCiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfSwKCiAgZmlyc3RfdGFnOiBmdW5jdGlvbiAoZWxlbWVudCwgdGFnKSB7CiAgICB2YXIgbm9kZTsKCiAgICBpZiAoIXRoaXMuaXNfeGh0bWwpCiAgICAgIHRhZyA9IHRhZy50b1VwcGVyQ2FzZSgpOwoKICAgIGZvciAobm9kZSA9IGVsZW1lbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpCiAgICB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgbm9kZS5ub2RlTmFtZSA9PSB0YWcpCiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfSwKCiAgaGlkZV9zZWxlY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSAvLyBGaXJlZm94LCBDaHJvbWl1bSwgU2FmYXJpLCBPcGVyYQogICAgewogICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwoKICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkKICAgICAgewogICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgIHJhbmdlLmNvbGxhcHNlIChmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgLy8gSW50ZXJuZXQgRXhwbG9yZXIKICAgIHsKICAgICAgdmFyIHRleHRSYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSAoKTsKICAgICAgdGV4dFJhbmdlLmNvbGxhcHNlIChmYWxzZSk7CiAgICB9CiAgfSwKCiAgZ2V0X3NlbGVjdGVkX3RleHQ6IGZ1bmN0aW9uICgpIHsKICAgIHRyeQogICAgewogICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikKICAgICAgICByZXR1cm4gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7CgogICAgICBpZiAoZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKQogICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOwoKICAgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikKICAgICAgICByZXR1cm4gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dDsKICAgIH0KICAgIGNhdGNoIChlKQogICAgewogICAgfQoKICAgIHJldHVybiAiIjsKICB9LAoKICAvLyBtYWtlIG5vdGUgb2YgbGVuZ3RoIG9mIHNlbGVjdGVkIHRleHQKICAvLyBhcyB0aGlzIGV2YWx1YXRlcyB0byB6ZXJvIGluIGNsaWNrIGV2ZW50CiAgbW91c2VfYnV0dG9uX3VwOiBmdW5jdGlvbiAoZSkgewogICAgdzNjX3NsaWR5LnNlbGVjdGVkX3RleHRfbGVuID0gdzNjX3NsaWR5LmdldF9zZWxlY3RlZF90ZXh0KCkubGVuZ3RoOwogIH0sCgogIG1vdXNlX2J1dHRvbl9kb3duOiBmdW5jdGlvbiAoZSkgewogICAgdzNjX3NsaWR5LnNlbGVjdGVkX3RleHRfbGVuID0gdzNjX3NsaWR5LmdldF9zZWxlY3RlZF90ZXh0KCkubGVuZ3RoOwogICAgdzNjX3NsaWR5Lm1vdXNlX3ggPSBlLmNsaWVudFg7CiAgICB3M2Nfc2xpZHkubW91c2VfeSA9IGUuY2xpZW50WTsKICB9LAoKICAvLyByaWdodCBtb3VzZSBidXR0b24gY2xpY2sgaXMgcmVzZXJ2ZWQgZm9yIGNvbnRleHQgbWVudXMKICAvLyBpdCBpcyBtb3JlIHJlbGlhYmxlIHRvIGRldGVjdCByaWdodGNsaWNrIHRoYW4gbGVmdGNsaWNrCiAgbW91c2VfYnV0dG9uX2NsaWNrOiBmdW5jdGlvbiAoZSkgewogICAgaWYgKCFlKQogICAgICB2YXIgZSA9IHdpbmRvdy5ldmVudDsKCiAgICBpZiAoTWF0aC5hYnMoZS5jbGllbnRYIC13M2Nfc2xpZHkubW91c2VfeCkgKwogICAgICAgIE1hdGguYWJzKGUuY2xpZW50WSAtdzNjX3NsaWR5Lm1vdXNlX3kpID4gMTApCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmICh3M2Nfc2xpZHkuc2VsZWN0ZWRfdGV4dF9sZW4gPiAwKQogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgcmlnaHRjbGljayA9IGZhbHNlOwogICAgdmFyIGxlZnRjbGljayA9IGZhbHNlOwogICAgdmFyIG1pZGRsZWNsaWNrID0gZmFsc2U7CiAgICB2YXIgdGFyZ2V0OwoKICAgIGlmICghZSkKICAgICAgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgaWYgKGUudGFyZ2V0KQogICAgICB0YXJnZXQgPSBlLnRhcmdldDsKICAgIGVsc2UgaWYgKGUuc3JjRWxlbWVudCkKICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgIC8vIHdvcmsgYXJvdW5kIFNhZmFyaSBidWcKICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT0gMykKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgaWYgKGUud2hpY2gpIC8vIGFsbCBicm93c2VycyBleGNlcHQgSUUKICAgIHsKICAgICAgbGVmdGNsaWNrID0gKGUud2hpY2ggPT0gMSk7CiAgICAgIG1pZGRsZWNsaWNrID0gKGUud2hpY2ggPT0gMik7CiAgICAgIHJpZ2h0Y2xpY2sgPSAoZS53aGljaCA9PSAzKTsKICAgIH0KICAgIGVsc2UgaWYgKGUuYnV0dG9uKQogICAgewogICAgICAvLyBLb25xdWVyb3IgZ2l2ZXMgMSBmb3IgbGVmdCwgNCBmb3IgbWlkZGxlCiAgICAgIC8vIElFNiBnaXZlcyAwIGZvciBsZWZ0IGFuZCBub3QgMSBhcyBJIGV4cGVjdGVkCgogICAgICBpZiAoZS5idXR0b24gPT0gNCkKICAgICAgICBtaWRkbGVjbGljayA9IHRydWU7CgogICAgICAvLyBhbGwgYnJvd3NlcnMgYWdyZWUgb24gMiBmb3IgcmlnaHQgYnV0dG9uCiAgICAgIHJpZ2h0Y2xpY2sgPSAoZS5idXR0b24gPT0gMik7CiAgICB9CiAgICBlbHNlCiAgICAgIGxlZnRjbGljayA9IHRydWU7CgogICAgaWYgKHczY19zbGlkeS5zZWxlY3RlZF90ZXh0X2xlbiA+IDApCiAgICB7CiAgICAgIHczY19zbGlkeS5zdG9wX3Byb3BhZ2F0aW9uKGUpOwogICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIGRpc21pc3MgdGFibGUgb2YgY29udGVudHMKICAgIHczY19zbGlkeS5oaWRlX3RhYmxlX29mX2NvbnRlbnRzKGZhbHNlKTsKCiAgICAvLyBjaGVjayBpZiB0YXJnZXQgaXMgc29tZXRoaW5nIHRoYXQgcHJvYmFibHkgd2FudCdzIGNsaWNrcwogICAgLy8gZS5nLiBhLCBlbWJlZCwgb2JqZWN0LCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgb3B0aW9uCiAgICB2YXIgdGFnID0gdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgogICAgaWYgKHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkICYmIGxlZnRjbGljayAmJgogICAgICAgICF3M2Nfc2xpZHkuc3BlY2lhbF9lbGVtZW50KHRhcmdldCkgJiYKICAgICAgICAhdGFyZ2V0Lm9uY2xpY2spCiAgICB7CiAgICAgIHczY19zbGlkeS5uZXh0X3NsaWRlKHRydWUpOwogICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKICAgICAgZS5jYW5jZWwgPSB0cnVlOwogICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICBzcGVjaWFsX2VsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICBpZiAodGhpcy5oYXNfY2xhc3MoZWxlbWVudCwgIm5vbi1pbnRlcmFjdGl2ZSIpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFyIHRhZyA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCiAgICByZXR1cm4gZWxlbWVudC5vbmtleWRvd24gfHwKICAgICAgZWxlbWVudC5vbmNsaWNrIHx8CiAgICAgIHRhZyA9PSAiYSIgfHwKICAgICAgdGFnID09ICJlbWJlZCIgfHwKICAgICAgdGFnID09ICJvYmplY3QiIHx8CiAgICAgIHRhZyA9PSAidmlkZW8iIHx8CiAgICAgIHRhZyA9PSAiYXVkaW8iIHx8CiAgICAgIHRhZyA9PSAic3ZnIiB8fAogICAgICB0YWcgPT0gImNhbnZhcyIgfHwKICAgICAgdGFnID09ICJpbnB1dCIgfHwKICAgICAgdGFnID09ICJ0ZXh0YXJlYSIgfHwKICAgICAgdGFnID09ICJzZWxlY3QiIHx8CiAgICAgIHRhZyA9PSAib3B0aW9uIjsKICB9LAoKICBzbGlkeV9jaHJvbWU6IGZ1bmN0aW9uIChlbCkgewogICAgd2hpbGUgKGVsKQogICAgewogICAgICBpZiAoZWwgPT0gdzNjX3NsaWR5LnRvYyB8fAogICAgICAgICAgZWwgPT0gdzNjX3NsaWR5LnRvb2xiYXIgfHwKICAgICAgICAgIHczY19zbGlkeS5oYXNfY2xhc3MoZWwsICJvdXRsaW5lIikpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICBlbCA9IGVsLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGdldF9rZXk6IGZ1bmN0aW9uIChlKQogIHsKICAgIHZhciBrZXk7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSB3aW5kb3cuZXZlbnQua2V5Q29kZTsKICAgIGVsc2UgaWYgKGUud2hpY2gpCiAgICAgIGtleSA9IGUud2hpY2g7CgogICAgcmV0dXJuIGtleTsKICB9LAoKICBnZXRfdGFyZ2V0OiBmdW5jdGlvbiAoZSkgewogICAgdmFyIHRhcmdldDsKCiAgICBpZiAoIWUpCiAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgaWYgKGUudGFyZ2V0KQogICAgICB0YXJnZXQgPSBlLnRhcmdldDsKICAgIGVsc2UgaWYgKGUuc3JjRWxlbWVudCkKICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gMSkKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgcmV0dXJuIHRhcmdldDsKICB9LAoKICAvLyBkb2VzIGRpc3BsYXkgcHJvcGVydHkgcHJvdmlkZSBjb3JyZWN0IGRlZmF1bHRzPwogIGlzX2Jsb2NrOiBmdW5jdGlvbiAoZWxlbSkgewogICAgdmFyIHRhZyA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCiAgICByZXR1cm4gdGFnID09ICJvbCIgfHwgdGFnID09ICJ1bCIgfHwgdGFnID09ICJwIiB8fCB0YWcgPT0gImRsIiB8fAogICAgICAgICAgIHRhZyA9PSAibGkiIHx8IHRhZyA9PSAidGFibGUiIHx8IHRhZyA9PSAicHJlIiB8fAogICAgICAgICAgIHRhZyA9PSAiaDEiIHx8IHRhZyA9PSAiaDIiIHx8IHRhZyA9PSAiaDMiIHx8CiAgICAgICAgICAgdGFnID09ICJoNCIgfHwgdGFnID09ICJoNSIgfHwgdGFnID09ICJoNiIgfHwKICAgICAgICAgICB0YWcgPT0gImJsb2NrcXVvdGUiIHx8IHRhZyA9PSAiYWRkcmVzcyI7IAogIH0sCgogIGFkZF9saXN0ZW5lcjogZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7CiAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpCiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgZmFsc2UpOwogICAgZWxzZQogICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIrZXZlbnQsIGhhbmRsZXIpOwogIH0sCgogIC8vIHVzZWQgdG8gcHJldmVudCBldmVudCBwcm9wYWdhdGlvbiBmcm9tIGZpZWxkIGNvbnRyb2xzCiAgc3RvcF9wcm9wYWdhdGlvbjogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBldmVudCA9IGV2ZW50ID8gZXZlbnQgOiB3aW5kb3cuZXZlbnQ7CiAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyAgLy8gZm9yIElFCgogICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikKICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgY2FuY2VsOiBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIGlmIChldmVudCkKICAgIHsKICAgICAgIGV2ZW50LmNhbmNlbCA9IHRydWU7CiAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoKICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KQogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CgogICAgdzNjX3NsaWR5LmtleV93YW50ZWQgPSBmYWxzZTsKICAgIHJldHVybiBmYWxzZTsKICB9LAoKLy8gZm9yIGVhY2ggbGFuZ3VhZ2UgZGVmaW5lIGFuIGFzc29jaWF0aXZlIGFycmF5Ci8vIGFuZCBhbHNvIHRoZSBoZWxwIHRleHQgd2hpY2ggaXMgbG9uZ2VyCgogIHN0cmluZ3NfZXM6IHsKICAgICJzbGlkZSI6InDDoWcuIiwKICAgICJoZWxwPyI6IkF5dWRhIiwKICAgICJjb250ZW50cz8iOiLDjW5kaWNlIiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6InRhYmxhIGRlIGNvbnRlbmlkb3MiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoiVGFibGEgZGUgQ29udGVuaWRvcyIsCiAgICAicmVzdGFydCBwcmVzZW50YXRpb24iOiJSZWluaWNpYXIgcHJlc2VudGFjacOzbiIsCiAgICAicmVzdGFydD8iOiJJbmljaW8iCiAgfSwKICBoZWxwX2VzOgogICAgIlV0aWxpY2UgZWwgcmF0w7NuLCBiYXJyYSBlc3BhY2lhZG9yYSwgdGVjbGFzIEl6ZGEvRGNoYSwgIiArCiAgICAibyBSZSBww6FnIHkgQXYgcMOhZy4gVXNlIFMgeSBCIHBhcmEgY2FtYmlhciBlbCB0YW1hw7FvIGRlIGZ1ZW50ZS4iLAoKICBzdHJpbmdzX2NhOiB7CiAgICAic2xpZGUiOiJww6BnLi4iLAogICAgImhlbHA/IjoiQWp1ZGEiLAogICAgImNvbnRlbnRzPyI6IsONbmRleCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJ0YXVsYSBkZSBjb250aW5ndXRzIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlRhdWxhIGRlIENvbnRpbmd1dHMiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmVpbmljaWFyIHByZXNlbnRhY2nDsyIsCiAgICAicmVzdGFydD8iOiJJbmljaSIKICB9LAogIGhlbHBfY2E6CiAgICAiVXRpbGl0emkgZWwgcmF0b2zDrSwgYmFycmEgZXNwYWlhZG9yYSwgdGVjbGVzIEVzcS4vRHRhLiAiICsKICAgICJvIFJlIHDDoGcgeSBBdiBww6BnLiBVc2kgUyBpIEIgcGVyIGNhbnZpYXIgZ3JhbmTDoHJpYSBkZSBmb250LiIsCgogIHN0cmluZ3NfY3M6IHsKICAgICJzbGlkZSI6InNuw61tZWsiLAogICAgImhlbHA/IjoibsOhcG92xJtkYSIsCiAgICAiY29udGVudHM/Ijoib2JzYWgiLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoib2JzYWggcHJlemVudGFjZSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJPYnNhaCBwcmV6ZW50YWNlIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6Inpub3Z1IHNwdXN0aXQgcHJlemVudGFjaSIsCiAgICAicmVzdGFydD8iOiJyZXN0YXJ0IgogIH0sCiAgaGVscF9jczoKICAgICJQcmV6ZW50YWNpIG3Fr8W+ZXRlIHByb2Now6F6ZXQgcG9tb2PDrSBrbGlrbnV0w60gbXnFoWksIG1lemVybsOta3UsICIgKwogICAgIsWhaXBlayB2bGV2byBhIHZwcmF2byBuZWJvIGtsw6F2ZXMgUGFnZVVwIGEgUGFnZURvd24uIFDDrXNtbyBzZSAiICsKICAgICJkw6EgenbEm3TFoWl0IGEgem1lbsWhaXQgcG9tb2PDrSBrbMOhdmVzIEIgYSBTLiIsCgogIHN0cmluZ3Nfbmw6IHsKICAgICJzbGlkZSI6InBhZ2luYSIsCiAgICAiaGVscD8iOiJIZWxwPyIsCiAgICAiY29udGVudHM/IjoiSW5ob3VkPyIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJpbmhvdWRzb3BnYXZlIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IkluaG91ZHNvcGdhdmUiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiaGVyc3RhcnQgcHJlc2VudGF0aWUiLAogICAgInJlc3RhcnQ/IjoiSGVyc3RhcnQ/IgogIH0sCiAgaGVscF9ubDoKICAgICAiTmF2aWdlZXIgZC5tLnYuIGhldCBtdWlzLCBzcGF0aWViYXIsIExpbmtzL1JlY2h0cyB0b2V0c2VuLCAiICsKICAgICAib2YgUGdVcCBlbiBQZ0RuLiBHZWJydWlrIFMgZW4gQiBvbSBkZSBrYXJha3Rlcmdyb290dGUgdGUgdmVyYW5kZXJlbi4iLAoKICBzdHJpbmdzX2RlOiB7CiAgICAic2xpZGUiOiJTZWl0ZSIsCiAgICAiaGVscD8iOiJIaWxmZSIsCiAgICAiY29udGVudHM/Ijoiw5xiZXJzaWNodCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJJbmhhbHRzdmVyemVpY2huaXMiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoiSW5oYWx0c3ZlcnplaWNobmlzIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IlByw6RzZW50YXRpb24gbmV1IHN0YXJ0ZW4iLAogICAgInJlc3RhcnQ/IjoiTmV1c3RhcnQiCiAgfSwKICBoZWxwX2RlOgogICAgIkJlbnV0emVuIFNpZSBkaWUgTWF1cywgTGVlcnNjaGxhZywgZGllIEN1cnNvcnRhc3RlbiBsaW5rcy9yZWNodHMgb2RlciAiICsKICAgICJQYWdlIHVwL1BhZ2UgRG93biB6dW0gV2VjaHNlbG4gZGVyIFNlaXRlbiB1bmQgUyB1bmQgQiBmw7xyIGRpZSBTY2hyaWZ0Z3LDtnNzZS4iLAoKICBzdHJpbmdzX3BsOiB7CiAgICAic2xpZGUiOiJzbGFqZCIsCiAgICAiaGVscD8iOiJwb21vYz8iLAogICAgImNvbnRlbnRzPyI6InNwaXMgdHJlxZtjaT8iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoic3BpcyB0cmXFm2NpIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlNwaXMgVHJlxZtjaSIsCiAgICAicmVzdGFydCBwcmVzZW50YXRpb24iOiJSZXN0YXJ0dWogcHJlemVudGFjasSZIiwKICAgICJyZXN0YXJ0PyI6InJlc3RhcnQ/IgogIH0sCiAgaGVscF9wbDoKICAgICJabWllbmlhaiBzbGFqZHkga2xpa2FqxIVjIG15c3rEhSwgbmFjaXNrYWrEhWMgc3BhY2rEmSwgc3RyemHFgmtpIGxld28vcHJhd28iICsKICAgICJsdWIgUGdVcCAvIFBnRG4uIFXFvHlqIGtsYXdpc3p5IFMgaSBCLCBhYnkgem1pZW5pxIcgcm96bWlhciBjemN6aW9ua2kuIiwKCiAgc3RyaW5nc19mcjogewogICAgInNsaWRlIjoicGFnZSIsCiAgICAiaGVscD8iOiJBaWRlIiwKICAgICJjb250ZW50cz8iOiJJbmRleCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJ0YWJsZSBkZXMgbWF0acOocmVzIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlRhYmxlIGRlcyBtYXRpw6hyZXMiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmVjb21tZW5jZXIgbCdleHBvc8OpIiwKICAgICJyZXN0YXJ0PyI6IkTDqWJ1dCIKICB9LAogIGhlbHBfZnI6CiAgICAiTmF2aWd1ZXogYXZlYyBsYSBzb3VyaXMsIGxhIGJhcnJlIGQnZXNwYWNlLCBsZXMgZmzDqGNoZXMgIiArCiAgICAiZ2F1Y2hlL2Ryb2l0ZSBvdSBsZXMgdG91Y2hlcyBQZyBVcCwgUGcgRG4uIFV0aWxpc2V6ICIgKwogICAgImxlcyB0b3VjaGVzIFMgZXQgQiBwb3VyIG1vZGlmaWVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UuIiwKCiAgc3RyaW5nc19odTogewogICAgInNsaWRlIjoib2xkYWwiLAogICAgImhlbHA/Ijoic2Vnw610c8OpZyIsCiAgICAiY29udGVudHM/IjoidGFydGFsb20iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoidGFydGFsb21qZWd5esOpayIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJUYXJ0YWxvbWplZ3l6w6lrIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6ImJlbXV0YXTDsyDDumpyYWluZMOtdMOhc2EiLAogICAgInJlc3RhcnQ/Ijoiw7pqcmFpbmTDrXTDoXMiCiAgfSwKICBoZWxwX2h1OgogICAgIkF6IG9sZGFsYWsga8O2enRpIGzDqXBrZWTDqXNoZXoga2F0dGludHNvbiBheiBlZ8OpcnJlbCwgdmFneSAiICsKICAgICJoYXN6bsOhbGphIGEgc3rDs2vDtnosIGEgYmFsLCB2YWd5IGEgam9iYiBuecOtbCwgaWxsZXR2ZSBhIFBhZ2UgRG93biwgIiArCiAgICAiUGFnZSBVcCBiaWxsZW50ecWxa2V0LiBBeiBTIMOpcyBhIEIgYmlsbGVudHnFsWtrZWwgdsOhbHRvenRhdGhhdGphICIgKwogICAgImEgc3rDtnZlZyBtw6lyZXTDqXQuIiwKCiAgc3RyaW5nc19pdDogewogICAgInNsaWRlIjoicGFnLiIsCiAgICAiaGVscD8iOiJBaXV0byIsCiAgICAiY29udGVudHM/IjoiSW5kaWNlIiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6ImluZGljZSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJJbmRpY2UiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmljb21pbmNpYXJlIGxhIHByZXNlbnRhemlvbmUiLAogICAgInJlc3RhcnQ/IjoiSW5pemlvIgogIH0sCiAgaGVscF9pdDoKICAgICJOYXZpZ2FyZSBjb24gbW91c2UsIGJhcnJhIHNwYXppbywgZnJlY2NlIHNpbmlzdHJhL2Rlc3RyYSBvICIgKwogICAgIlBnVXAgZSBQZ0RuLiBVc2FyZSBTIGUgQiBwZXIgY2FtYmlhcmUgbGEgZGltZW5zaW9uZSBkZWkgY2FyYXR0ZXJpLiIsCgogIHN0cmluZ3NfZWw6IHsKICAgICJzbGlkZSI6Is+DzrXOu86vzrTOsSIsCiAgICAiaGVscD8iOiLOss6/zq7OuM61zrnOsTsiLAogICAgImNvbnRlbnRzPyI6Is+AzrXPgc65zrXPh8+MzrzOtc69zrE7IiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6Is+Azq/Ovc6xzrrOsc+CIM+AzrXPgc65zrXPh86/zrzOrc69z4nOvSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiLOoM6vzr3Osc66zrHPgiDOoM61z4HOuc61z4fOv868zq3Ovc+Jzr0iLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoizrXPgM6xzr3Otc66zrrOr869zrfPg863IM+AzrHPgc6/z4XPg86vzrHPg863z4IiLAogICAgInJlc3RhcnQ/IjoizrXPgM6xzr3Otc66zrrOr869zrfPg863OyIKICB9LAogIGhlbHBfZWw6CiAgICAizqDOu86/zrfOs863zrjOtc6vz4TOtSDOvM61IM+Ezr8gzrrOu86vzrogz4TOv8+FIM+Azr/Ovc+EzrnOus65zr/PjSwgz4TOvyBzcGFjZSwgz4TOsSDOss6tzrvOtyDOsc+BzrnPg8+EzrXPgc6sL860zrXOvs65zqwsICIgKwogICAgIs6uIFBhZ2UgVXAgzrrOsc65IFBhZ2UgRG93bi4gzqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xIFMgzrrOsc65IEIgzrPOuc6xIM69zrEgzrHOu867zqzOvs61z4TOtSAiICsKICAgICLPhM6/IM68zq3Os861zrjOv8+CIM+EzrfPgiDOs8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CLiIsCgogIHN0cmluZ3NfamE6IHsKICAgICJzbGlkZSI6IuOCueODqeOCpOODiSIsCiAgICAiaGVscD8iOiLjg5jjg6vjg5ciLAogICAgImNvbnRlbnRzPyI6IuebruasoSIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiLnm67mrKHjgpLooajnpLoiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi55uu5qyhIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IuacgOWIneOBi+OCieWGjeeUnyIsCiAgICAicmVzdGFydD8iOiLmnIDliJ3jgYvjgokiCiAgfSwKICBoZWxwX2phOgogICAgICLjg57jgqbjgrnlt6bjgq/jg6rjg4Pjgq8g44O7IOOCueODmuODvOOCuSDjg7sg5bem5Y+z44Kt44O8ICIgKwogICAgICLjgb7jgZ/jga8gUGFnZSBVcCDjg7sgUGFnZSBEb3du44Gn5pON5L2c77yMIFMg44O7IELjgafjg5Xjgqnjg7Pjg4jjgrXjgqTjgrrlpInmm7QiLAoKICBzdHJpbmdzX3poOiB7CiAgICAic2xpZGUiOiLlubvnga/niYciLAogICAgImhlbHA/Ijoi5biu5YqpPyIsCiAgICAiY29udGVudHM/Ijoi5YaF5a65PyIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiLnm67lvZUiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi55uu5b2VIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IumHjeaWsOWQr+WKqOWxleekuiIsCiAgICAicmVzdGFydD8iOiLph43mlrDlkK/liqg/IgogIH0sCiAgaGVscF96aDoKICAgICLnlKjpvKDmoIfngrnlh7ssIOepuuagvOadoSwg5bem5Y+z566t5aS0LCBQZyBVcCDlkowgUGcgRG4g5a+86IiqLiAiICsKICAgICLnlKggUywgQiDmlLnlj5jlrZfkvZPlpKflsI8uIiwKCiAgc3RyaW5nc19ydTogewogICAgInNsaWRlIjoi0YHQu9Cw0LnQtCIsCiAgICAiaGVscD8iOiLQv9C+0LzQvtGJ0Yw/IiwKICAgICJjb250ZW50cz8iOiLRgdC+0LTQtdGA0LbQsNC90LjQtT8iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoi0L7Qs9C70LDQstC70LXQvdC40LUiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi0J7Qs9C70LDQstC70LXQvdC40LUiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoi0L/QtdGA0LXQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC10LfQtdC90YLQsNGG0LjRjiIsCiAgICAicmVzdGFydD8iOiLQv9C10YDQtdC30LDQv9GD0YHQuj8iCiAgfSwKICBoZWxwX3J1OgogICAgItCf0LXRgNC10LzQtdGJ0LDQudGC0LXRgdGMINC60LvQuNC60LDRjyDQvNGL0YjQutC+0LksINC40YHQv9C+0LvRjNC30YPRjyDQutC70LDQstC40YjRgyDQv9GA0L7QsdC10LssINGB0YLRgNC10LvQutC4IiArCiAgICAi0LLQu9C10LLQvi/QstC/0YDQsNCy0L4g0LjQu9C4IFBnIFVwINC4IFBnIERuLiDQmtC70LDQstC40YjQuCBTINC4IEIg0LzQtdC90Y/RjtGCINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAuIiwKCiAgc3RyaW5nc19zdjogewogICAgInNsaWRlIjoic2lkYSIsCiAgICAiaGVscD8iOiJoasOkbHAiLAogICAgImNvbnRlbnRzPyI6ImlubmVow6VsbCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJpbm5laMOlbGxzZsO2cnRlY2tuaW5nIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IklubmVow6VsbHNmw7ZydGVja25pbmciLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoidmlzYSBwcmVzZW50YXRpb25lbiBmcsOlbiBiw7ZyamFuIiwKICAgICJyZXN0YXJ0PyI6ImLDtnJqYSBvbSIKICB9LAogIGhlbHBfc3Y6CiAgICAiQmzDpGRkcmEgbWVkIGV0dCBrbGljayBtZWQgdsOkbnN0cmEgbXVza25hcHBlbiwgbWVsbGFuc2xhZ3N0YW5nZW50ZW4sICIgKwogICAgInbDpG5zdGVyLSBvY2ggaMO2Z2VycGlsdGFuZ2VudGVybmEgZWxsZXIgdGFuZ2VudGVybmEgUGcgVXAsIFBnIERuLiAiICsKICAgICJBbnbDpG5kIHRhbmdlbnRlcm5hIFMgb2NoIEIgZsO2ciBhdHQgw6RuZHJhIHRleHRlbnMgc3Rvcmxlay4iLAoKICBzdHJpbmdzOiB7IH0sCgogIGxvY2FsaXplOiBmdW5jdGlvbiAoc3JjKSB7CiAgICBpZiAoc3JjID09ICIiKQogICAgICByZXR1cm4gc3JjOwoKICAgICAvLyB0cnkgZnVsbCBsYW5ndWFnZSBjb2RlLCBlLmcuIGVuLVVTCiAgICAgdmFyIHMsIGxvb2t1cCA9IHczY19zbGlkeS5zdHJpbmdzW3czY19zbGlkeS5sYW5nXTsKCiAgICAgaWYgKGxvb2t1cCkKICAgICB7CiAgICAgICBzID0gbG9va3VwW3NyY107CgogICAgICAgaWYgKHMpCiAgICAgICAgcmV0dXJuIHM7CiAgICAgfQoKICAgICAvLyBzdHJpcCBjb3VudHJ5IGNvZGUgc3VmZml4LCBlLmcuCiAgICAgLy8gdHJ5IGVuIGlmIHVuZGVmaW5lZCBmb3IgZW4tVVMKICAgICB2YXIgbGcgPSB3M2Nfc2xpZHkubGFuZy5zcGxpdCgiLSIpOwoKICAgICBpZiAobGcubGVuZ3RoID4gMSkKICAgICB7CiAgICAgICBsb29rdXAgPSB3M2Nfc2xpZHkuc3RyaW5nc1tsZ1swXV07CgogICAgICAgaWYgKGxvb2t1cCkKICAgICAgIHsKICAgICAgICAgcyA9IGxvb2t1cFtzcmNdOwoKICAgICAgICAgaWYgKHMpCiAgICAgICAgICByZXR1cm4gczsKICAgICAgIH0KICAgICB9CgogICAgIC8vIG90aGVyd2lzZSBzdHJpbmcgYXMgaXMKICAgICByZXR1cm4gc3JjOwogIH0sCgogIGluaXRfbG9jYWxpemF0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgaTE4biA9IHczY19zbGlkeTsKICAgIHZhciBoZWxwX3RleHQgPSB3M2Nfc2xpZHkuaGVscF90ZXh0OwoKICAgIC8vIGVhY2ggc3VjaCBsYW5ndWFnZSBhcnJheSBpcyBkZWNsYXJlZCBpbiB0aGUgbG9jYWxpemUgYXJyYXkKICAgIC8vIHRoaXMgaXMgdXNlZCBhcyBpbiAgdzNjX3NsaWR5LmxvY2FsaXplKCJmb28iKTsKICAgIHRoaXMuc3RyaW5ncyA9IHsKICAgICAgImVzIjp0aGlzLnN0cmluZ3NfZXMsCiAgICAgICJjYSI6dGhpcy5zdHJpbmdzX2NhLAogICAgICAiY3MiOnRoaXMuc3RyaW5nc19jcywKICAgICAgIm5sIjp0aGlzLnN0cmluZ3NfbmwsCiAgICAgICJkZSI6dGhpcy5zdHJpbmdzX2RlLAogICAgICAicGwiOnRoaXMuc3RyaW5nc19wbCwKICAgICAgImZyIjp0aGlzLnN0cmluZ3NfZnIsCiAgICAgICJodSI6dGhpcy5zdHJpbmdzX2h1LAogICAgICAiaXQiOnRoaXMuc3RyaW5nc19pdCwKICAgICAgImVsIjp0aGlzLnN0cmluZ3NfZWwsCiAgICAgICJqcCI6dGhpcy5zdHJpbmdzX2phLAogICAgICAiemgiOnRoaXMuc3RyaW5nc196aCwKICAgICAgInJ1Ijp0aGlzLnN0cmluZ3NfcnUsCiAgICAgICJzdiI6dGhpcy5zdHJpbmdzX3N2CiAgICB9LAoKICAgIGkxOG4uc3RyaW5nc19lc1toZWxwX3RleHRdID0gaTE4bi5oZWxwX2VzOwogICAgaTE4bi5zdHJpbmdzX2NhW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfY2E7CiAgICBpMThuLnN0cmluZ3NfY3NbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9jczsKICAgIGkxOG4uc3RyaW5nc19ubFtoZWxwX3RleHRdID0gaTE4bi5oZWxwX25sOwogICAgaTE4bi5zdHJpbmdzX2RlW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfZGU7CiAgICBpMThuLnN0cmluZ3NfcGxbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9wbDsKICAgIGkxOG4uc3RyaW5nc19mcltoZWxwX3RleHRdID0gaTE4bi5oZWxwX2ZyOwogICAgaTE4bi5zdHJpbmdzX2h1W2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfaHU7CiAgICBpMThuLnN0cmluZ3NfaXRbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9pdDsKICAgIGkxOG4uc3RyaW5nc19lbFtoZWxwX3RleHRdID0gaTE4bi5oZWxwX2VsOwogICAgaTE4bi5zdHJpbmdzX2phW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfamE7CiAgICBpMThuLnN0cmluZ3NfemhbaGVscF90ZXh0XSA9IGkxOG4uaGVscF96aDsKICAgIGkxOG4uc3RyaW5nc19ydVtoZWxwX3RleHRdID0gaTE4bi5oZWxwX3J1OwogICAgaTE4bi5zdHJpbmdzX3N2W2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfc3Y7CgogICAgdzNjX3NsaWR5LmxhbmcgPSBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJsYW5nIik7CgogICAgaWYgKCF3M2Nfc2xpZHkubGFuZykKICAgICAgdzNjX3NsaWR5LmxhbmcgPSBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpOwoKICAgIGlmICghdzNjX3NsaWR5LmxhbmcpCiAgICAgIHczY19zbGlkeS5sYW5nID0gImVuIjsKICB9Cn07CgovLyBoYWNrIGZvciBiYWNrIGJ1dHRvbiBiZWhhdmlvcgppZiAodzNjX3NsaWR5LmllNiB8fCB3M2Nfc2xpZHkuaWU3KQp7CiAgZG9jdW1lbnQud3JpdGUoIjxpZnJhbWUgaWQ9J2hpc3RvcnlGcmFtZScgIiArCiAgInNyYz0namF2YXNjcmlwdDpcIjxodG1sIisiPjwvIisiaHRtbD5cIicgIiArCiAgImhlaWdodD0nMScgd2lkdGg9JzEnICIgKwogICJzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDotODAwcHgnPjwvaWZyYW1lPiIpOwp9CgovLyBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzIGZvciBpbml0aWFsaXphdGlvbgp3M2Nfc2xpZHkuc2V0X3VwKCk7CgovLyBoaWRlIHRoZSBzbGlkZXMgYXMgc29vbiBhcyBib2R5IGVsZW1lbnQgaXMgYXZhaWxhYmxlCi8vIHRvIHJlZHVjZSBhbm5veWluZyBzY3JlZW4gbWVzcyBiZWZvcmUgdGhlIG9ubG9hZCBldmVudApzZXRUaW1lb3V0KHczY19zbGlkeS5oaWRlX3NsaWRlcywgNTApOwoK" charset="utf-8" type="text/javascript"></script>
</head>
<body>
<div class="slide titlepage">
<h1 class="title">Data Manupulation in R</h1>
<p class="author">
Parash Upreti
</p>
<p class="date">May 17, 2016</p>
</div>
<div id="review" class="slide section level2">
<h1>Review</h1>
<p>Data in R are in following structures</p>
<ul>
<li>Numeric or Integer</li>
<li>String</li>
<li>Factor</li>
<li>Date and Time</li>
</ul>
<p>Base R has some useful functions. Other functions can be created by user or used from R packages.</p>
<p>Similarly, data can be created/simulated in R or imported from external file. Some famous dataset is already available in R or R packages.</p>
</div>
<div id="simulating-data-in-r" class="slide section level2">
<h1>Simulating Data in R</h1>
<p>Data can be simulated in R in different ways on case by case basis. Try following codes.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">x <-<span class="st"> </span><span class="dv">1</span>:<span class="dv">10</span>
y <-<span class="st"> </span><span class="kw">seq</span>(<span class="dv">1</span>,<span class="dv">10</span>)
x ==<span class="st"> </span>y
z <-<span class="st"> </span><span class="kw">seq</span>(<span class="dv">0</span>, <span class="dv">10</span>, .<span class="dv">1</span>)
z_sq <-<span class="st"> </span>z^<span class="dv">2</span></code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">x_norm <-<span class="st"> </span><span class="kw">rnorm</span>(<span class="dv">100</span>, <span class="dv">0</span>, <span class="dv">1</span>)
<span class="kw">mean</span>(x_norm)
u <-<span class="st"> </span><span class="kw">runif</span>(<span class="dv">100</span>, -<span class="dv">1</span>, <span class="dv">1</span>)</code></pre></div>
<p><code>rnorm()</code> creates normally distributed data centered on mean and <code>runif()</code> creates uniformly distributed data on a given interval</p>
</div>
<div id="look-for-help" class="slide section level2">
<h1>Look for help</h1>
<p>What does certain code do? How to know if you do not know?</p>
<ul>
<li><p>R has very well maintained documentation that can explain code or function very easily. This can be accessed on R official website or through help tab on bottom right window</p></li>
<li><p>Can look up what certain function does by simply asking in console using <code>?function()</code>. eg. <code>?runif()</code>, <code>??runif()</code>, <code>help(runif)</code></p></li>
<li><p>Internet search: google (or other search engine), stackoverflow, etc.</p></li>
</ul>
</div>
<div id="r-datasets" class="slide section level2">
<h1>R Datasets</h1>
<p>Some famous datasets are available in R. Do you want to know what are available? Lets check out.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">data</span>()</code></pre></div>
<p>Note: These data are from a particular package called <code>datasets</code>. There are more data in other packages (as you can see if you scroll the result from <code>data()</code> screen).</p>
<p>This is how you see all packages that are loaded that has data</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co">#data(package = .packages(all.available = TRUE))</span></code></pre></div>
<p>As you load more packages, you may get more R data. You can access dataset from particular package by telling which package you want to look at.</p>
</div>
<div id="r-dataset-contd" class="slide section level2">
<h1>R Dataset contd…</h1>
<p>Looking at particular R Dataset</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Iris data is in the default 'dataset' package</span>
<span class="kw">data</span>(iris)
<span class="co"># Veteran data is in the survival package</span>
<span class="kw">data</span>(veteran, <span class="dt">package =</span> <span class="st">"survival"</span>)</code></pre></div>
<p>When you run the above code the data apprears as <code><Promise></code> in your workspace. If you try to work with that data, it will appear under data.</p>
</div>
<div id="exporatory-data-analysis-on-the-iris-dataset" class="slide section level2">
<h1>Exporatory data analysis on the <code>iris</code> dataset</h1>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">dim</span>(iris)</code></pre></div>
<pre><code>## [1] 150 5</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">str</span>(iris)</code></pre></div>
<pre><code>## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">head</span>(iris,<span class="dv">3</span>)</code></pre></div>
<pre><code>## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa</code></pre>
<p>Default <code>head</code> or <code>tail</code> will print 6 outputs. You can manupulate the numbers of rows by telling how many rows you want.</p>
<p>The <code>iris</code> dataset has 150 rows and 5 columns. The <code>str</code> or structure of the data tells us that first four variables are numerical variables and fifth variable is the categorical variables with three levels (three species of flowers)</p>
</div>
<div id="summary-of-iris-data" class="slide section level2">
<h1>Summary of Iris data</h1>
<pre><code>## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
## </code></pre>
<p>It is important to look at the summary of the data. You can spot the basic structure and distribution of numerical data through mean, median, quartiles and count.You can also see how many observations are in each factors.</p>
</div>
<div id="plotting-the-data-summary" class="slide section level2">
<h1>Plotting the data summary</h1>
<p>Lets use the base r package to plot some data. Scroll down for more plots</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">boxplot</span>(iris$Sepal.Width, <span class="dt">horizontal =</span> T)</code></pre></div>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABgAAAASACAMAAAAOH3aoAAAAQlBMVEUAAAAAADoAAGYAOpAAZrY6AAA6OgA6kNtmAABmtv+QOgCQkDqQ2/+2ZgC2///bkDrb////tmb/25D//7b//9v///+CStrFAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAcWUlEQVR4nO3d0UIdSZZYUc247XHbLtfIdv//r1qUSiUEiG5EBHki91pPUkGhEycvubmA0Kd/AJD06eoBALiGAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQNTsAHwC4E/rb7HL3+JCV28bYJLl99jVb3ClDcEDOJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAHCWT1lXb54bEgBOcvVN+EpX754bEgBOsv8CTr3ZTpyJ4wkAJxEAWEgAOIkAwEICwEkEABYSAE4iALCQAHASAYCFBICTCAAsJACcRABgIQHgJAIACwkAJxEAWEgAOIkAwEICwEkEABYSAE4iALCQAHASAYCFBICTCAAsJACcRABgIQHgJAIACwkAJxEAWEgAOIkAwEICwEkEABYSAE4iALCQAHAS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AJxEAGAhAeAkAgALCQAnEQBYSAA4iQDAQgLASQQAFhIATiIAsJAAcJJPYVfvnhsSAE5y9U34SlfvnhsSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgS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" width="768" /></p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">median</span>(iris$Sepal.Width)</code></pre></div>
<pre><code>## [1] 3</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">hist</span>(iris$Sepal.Width)</code></pre></div>
<p><img src="data:image/png;base64,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CK199/z4cjodyLuAqxEAEFqg7vFhf+kIAAgtUPf4uNd0BACE9pzu2Z0A9I5TQPV25wQAhNa0ezbHz4DZDA8GP0Bvd04AQGgNu+fwtP/ll99/fHl5XwLo7c4JAAitYfecPgry03++vBPgsStB6O3OCQAIrV33bJ/375b99eCzgDcPvhNAb3dOAEBo7bpnfdzhs3o5Xw/00U8E09udEwAQWrPu2S72h7N+Tm8E23nwE8H0ducEAITW8lpAh90915cDfegwsN7unACA0NoHwD8rAVCVAIDQWgbA8Y1fq+EuIAFQiQCA0FoeA7jd379yELgUAQChtTwL6Oacz0c/EUxvd04AQGjtumf3aQCfx9947K3AertzAgBCa9g9m+uPAHvHJ4Lp7c4JAAitZfdsLm8B++ddnwimtzsnACC0tt2zGuzyeccnguntzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC109+jtzgkACC10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" width="768" /></p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(<span class="dt">x =</span> iris$Petal.Length, <span class="dt">y =</span> iris$Sepal.Length,
<span class="dt">xlab =</span> <span class="st">"Petal Length "</span>,
<span class="dt">ylab =</span> <span class="st">"Sepal Length "</span>,
<span class="dt">main =</span> <span class="st">"Scatterplot of Sepal vs Petal Length"</span>)</code></pre></div>
<p><img src="data:image/png;base64,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" width="768" /></p>
</div>
<div id="making-nicer-plots" class="slide section level2">
<h1>Making nicer plots</h1>
<p>We can also plot the all variables in the dataset at once. In this plot we removed the categorical variable <code>Species</code>. This helped us quickly understand relationship between different features <img src="data:image/png;base64,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" width="768" /></p>
</div>
<div id="slide-with-plot" class="slide section level2">
<h1>Slide with Plot</h1>
<p><img src="data:image/png;base64,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" width="768" /></p>
</div>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>